AnalogueTester.scala

package net.snowtiger.test

import net.snowtiger.analogue.AnalogueLiteral._
import net.snowtiger.analogue.AnalogueRectangle

/**
 * Unit tests for AnalogueLine, AnalogueRectangle and AnalogueCuboid.
 * See http://snowtiger.net/scala/analogue for a complete article on the subject.
 *
 * @author Mark B Davies
 */
object AnalogueTester
{
	def main(args: Array[String])
	{
		testLines()
		testSquares()
		testCubes()
	}

	def testLines()
	{
		assert ( O == 0 )
		assert ( OI == 1 )
		assert ( O~I == 2)
		assert ( O~~I == 3)
		assert ( O~~~~~~~~I == 9)
		assert ( O~~~~~~~~~OI == 11)
		assert ( O~~~~~~~~~O~I == 12)
		assert ( O~~~~~~~~~O~~I == 13)
		assert ( O~~~~~~~~~O~~~~~~~~~O~~~~~I == 26)

		assert ( (O~~~I).size == 4 )
		assert ( O~~~I == 4 )
		assert ( O~~~I + 3 == 7 )
		assert ( 5 + O~~~I == 9 )
		assert ( 5 * O~~~I == 20 )
		assert ( O~~~I + O~~I == 7 )
		assert ( O~~~I - O~~I == 1 )
	}

	def testSquares()
	{
		assert ( (O~~~~I
		          |    I
		          |    I
		          |~~~~I).width == 5 )

		assert ( (O~~~~I
		          |    I
		          |    I
		          |~~~~I).height == 3 )

		assert ( (O~~~~I
		          |    I
		          |    I
		          |~~~~I).area == (O~~~~I * O~~I).size )

		assert ( (O~~I
		          |  I
		          |  I
		          |  I
		          |  I
		          |~~I).area == (O~~~~I
		                         |    I
		                         |    I
		                         |~~~~I).area )

		assert ( (O~~~~I
		          |    I
		          |    I
		          |~~~~I).top == O~~~~I )

		assert ( (O~~~~I
		          |    I
		          |    I
		          |~~~~I).side == 3 )

		assert ( (O~~~~I
		          |    I
		          |    I
		          |~~~~I) == new AnalogueRectangle(5, 3) )

		val threeBy3 = (O~~I
		                |  I
		                |  I
		                |~~I)

		assert ( (OI
		          |I) * 3 == threeBy3 )

		assert ( (OI
		          |I) + (O~I
		                 | I
		                 |~I) == threeBy3 )
	}

	def testCubes()
	{
		assert ( ( OI
		           |OI
		            !I ).volume == 1 )

		assert ( ( O~~I
		           |O~~I
		            !~~I ).volume == ( OI
		                               |OI
		                               |!I
		                               |!I
		                                !I ).volume )

		assert ( ( O~~~I
		           |O~~~I
		           |!   I
		           |!   I
		            !~~~I ).volume == ( O~~~I
		                                |+   L
		                                 \+   L
		                                  \O~~~I
		                                   !~~~I ).volume )

		val cuboid4x6x3 = ( O~~~I
		                    |+   L
		                    | +   L
		                    |  O~~~I
		                    |  !   I
		                    |  !   I
		                    |  !   I
		                     \ !   I
		                      \!   I
		                       !~~~I )

		assert (cuboid4x6x3.top == ( O~~~I
		                             |   I
		                             |   I
		                             |~~~I ) )

		assert ( cuboid4x6x3.side == ( O~~I
		                               |  I
		                               |  I
		                               |  I
		                               |  I
		                               |  I
		                               |~~I ) )

		assert ( cuboid4x6x3.front == ( O~~~I
		                                |   I
		                                |   I
		                                |   I
		                                |   I
		                                |   I
		                                |~~~I ) )

		assert ((( O~~~I
		           |+   L
		           | +   L
		           |  O~~~I
		           |  !   I
		           |  !   I
		           |  !   I
		            \ !   I
		             \!   I
		              !~~~I ) * 10 ).volume == 72000 )
	}

}