property ancestor, pCastlibName property pMoneyScript, pMoneyBagScript property p12CHF, p14CHF, p7USD, p21USD property pMB1, pMB2 on new me, testName pCastlibName = "MoneySample" ancestor = script("TestCase", "LingoUnit").new(testName) return me end on main thisScript script("TestRunner", "LingoUnit").run(member("MoneyTest", "MoneySample")) end on setUp me pMoneyScript = script("Money", pCastlibName) p12CHF = pMoneyScript.new(12, "CHF") p14CHF = pMoneyScript.new(14, "CHF") p7USD = pMoneyScript.new( 7, "USD") p21USD = pMoneyScript.new(21, "USD") pMoneyBagScript = script("MoneyBag", pCastlibName) pMB1 = pMoneyBagScript.new(p12CHF, p7USD) pMB2 = pMoneyBagScript.new(p14CHF, p21USD) end on testBagMultiply me bag = [] bag.append(pMoneyScript.new(24, "CHF")) bag.append(pMoneyScript.new(14, "USD")) expected = pMoneyBagScript.new(bag) me.assertTrue(expected.equals(pMB1.multiply(2))) me.assertTrue(pMB1.equals(pMB1.multiply(1))) me.assertTrue(pMB1.multiply(0).isZero()) end on testBagNegate me bag = [] bag.append(pMoneyScript.new(-12, "CHF")) bag.append(pMoneyScript.new(-7, "USD")) expected = pMoneyBagScript.new(bag) me.assertTrue(expected.equals(pMB1.negate())) end on testBagSimpleAdd me bag = [] bag.append(pMoneyScript.new(26, "CHF")) bag.append(pMoneyScript.new(7, "USD")) expected = pMoneyBagScript.new(bag) me.assertTrue(expected.equals(pMB1.add(p14CHF))) end on testBagSubtract me bag = [] bag.append(pMoneyScript.new(-2, "CHF")) bag.append(pMoneyScript.new(-14, "USD")) expected = pMoneyBagScript.new(bag) me.assertTrue(expected.equals(pMB1.subtract(pMB2))) end on testBagSumAdd me bag = [] bag.append(pMoneyScript.new(26, "CHF")) bag.append(pMoneyScript.new(28, "USD")) expected = pMoneyBagScript.new(bag) me.assertTrue(expected.equals(pMB1.add(pMB2))) end on testIsZero me me.assertTrue(pMB1.subtract(pMB1).isZero()) bag = [] bag.append(pMoneyScript.new(0, "CHF")) bag.append(pMoneyScript.new(0, "USD")) me.assertTrue(pMoneyBagScript.new(bag).isZero()) end on testMixedSimpleAdd me bag = [p12CHF, p7USD] expected = pMoneyBagScript.new(bag) me.assertTrue(expected.equals(p12CHF.add(p7USD))) end on testMoneyBagEquals me me.assertTrue(not(pMB1.equals(VOID))) me.assertEquals(pMB1, pMB1) aMoneyBag = pMoneyBagScript.new(pMoneyScript.new(12, "CHF"), pMoneyScript.new(7, "USD")) me.assertTrue(pMB1.equals(aMoneyBag)) me.assertTrue(not(pMB1.equals(p12CHF))) me.assertTrue(not(p12CHF.equals(pMB1))) me.assertTrue(not(pMB1.equals(pMB2))) end on testMoneyBagHash me aMoneyBag = pMoneyBagScript.new(pMoneyScript.new(12, "CHF"), pMoneyScript.new(7, "USD")) me.assertEquals(pMB1.hashCode(), aMoneyBag.hashCode()) end on testMoneyEquals me me.assertTrue(not(p12CHF.equals(VOID))) aMoney = pMoneyScript.new(12, "CHF") me.assertTrue(p12CHF.equals(p12CHF)) me.assertTrue(p12CHF.equals(aMoney)) me.assertEquals(p12CHF.hashCode(), aMoney.hashCode()) me.assertTrue(not(p12CHF.equals(p14CHF))) end on testMoneyHash me me.assertTrue(not(p12CHF.equals(VOID))) aMoney = pMoneyScript.new(12, "CHF") me.assertEquals(p12CHF.hashCode(), aMoney.hashCode()) end on testNormalize me bag = [] bag.append(pMoneyScript.new(26, "CHF")) bag.append(pMoneyScript.new(28, "CHF")) bag.append(pMoneyScript.new(6, "CHF")) aMoneyBag = pMoneyBagScript.new(bag) expected = [] expected.append(pMoneyScript.new(60, "CHF")) expectedBag = pMoneyBagScript.new(expected) me.assertTrue(expectedBag.equals(aMoneyBag)) end on testNormalize2 me aMoney = pMoneyScript.new(7, "USD") me.assertTrue(aMoney.equals(pMB1.subtract(p12CHF))) end on testNormalize3 me bag = [] bag.append(pMoneyScript.new(12, "CHF")) bag.append(pMoneyScript.new(3, "USD")) aMoneyBag = pMoneyBagScript.new(bag) aMoney = pMoneyScript.new(4, "USD") me.assertTrue(aMoney.equals(pMB1.subtract(aMoneyBag))) end on testNormalize4 me bag = [] bag.append(pMoneyScript.new(12, "CHF")) bag.append(pMoneyScript.new(3, "USD")) aMoneyBag = pMoneyBagScript.new(bag) aMoney = pMoneyScript.new(-3, "USD") me.assertTrue(aMoney.equals(p12CHF.subtract(aMoneyBag))) end on testPrint me me.assertEquals("[12 CHF]", p12CHF.toString()) end on testSimpleAdd me aMoney = pMoneyScript.new(26, "CHF") me.assertTrue(aMoney.equals(p12CHF.add(p14CHF))) end on testSimpleBagAdd me bag = [] bag.append(pMoneyScript.new(26, "CHF")) bag.append(pMoneyScript.new(7, "USD")) aMoneyBag = pMoneyBagScript.new(bag) me.assertTrue(aMoneyBag.equals(p14CHF.add(pMB1))) end on testSimpleMultiply me aMoney = pMoneyScript.new(28, "CHF") me.assertTrue(aMoney.equals(p14CHF.multiply(2))) end on testSimpleNegate me aMoney = pMoneyScript.new(-14, "CHF") me.assertTrue(aMoney.equals(p14CHF.negate())) end on testSimpleSubtract me aMoney = pMoneyScript.new(2, "CHF") me.assertTrue(aMoney.equals(p14CHF.subtract(p12CHF))) end