class PotionBottleTester { public static void main( String[] args ) { PotionBottle pb1 = new PotionBottle( "blue", 1.0, 3 ); PotionBottle pb2 = new PotionBottle( "green", 0.5, 10 ); PotionBottle pb3 = new PotionBottle( "green", 0.5, 2 ); PotionBottle water = new PotionBottle( "clear", 0, 7 ); PotionBottle empty = new PotionBottle( "yellow", 1.0, 0 ); System.out.print("\nTesting getters"); checkExpect( pb1.getPotency(), 1.0 ); checkExpect( pb1.getNumDoses(), 3 ); checkExpect( pb2.getPotency(), 0.5 ); checkExpect( pb2.getNumDoses(), 10 ); System.out.print("\nTesting isEmpty and consumeOneDose"); checkExpect( pb1.isEmpty(), false ); checkExpect( water.isEmpty(), false ); checkExpect( empty.isEmpty(), true ); checkExpect( empty.getNumDoses(), 0 ); empty.consumeOneDose(); checkExpect( empty.getNumDoses(), 0 ); checkExpect( empty.isEmpty(), true ); empty.consumeOneDose(); checkExpect( empty.getNumDoses(), 0 ); checkExpect( empty.isEmpty(), true ); checkExpect( pb3.getNumDoses(), 2 ); pb3.consumeOneDose(); checkExpect( pb3.getNumDoses(), 1 ); pb3.consumeOneDose(); checkExpect( pb3.getNumDoses(), 0 ); pb3.consumeOneDose(); checkExpect( pb3.getNumDoses(), 0 ); System.out.print("\nTesting toString"); checkExpect( pb1.toString(), "3 doses of a blue potion (potency 1.0)" ); checkExpect( pb2.toString(), "10 doses of a green potion (potency 0.5)" ); checkExpect( pb3.toString(), "0 doses of a green potion (potency 0.5)" ); checkExpect( water.toString(), "7 doses of a clear potion (potency 0.0)" ); System.out.print("\nTesting calculateStorePrice"); checkExpect( pb1.calculateStorePrice(), 45.0 ); checkExpect( pb2.calculateStorePrice(), 75.0 ); checkExpect( empty.calculateStorePrice(), 0.0 ); checkExpect( water.calculateStorePrice(), 0.0 ); System.out.print("\nTesting calculateSecondHandPrice"); checkExpect( pb1.calculateSecondhandPrice(), 30.0 ); checkExpect( pb2.calculateSecondhandPrice(), 50.0 ); checkExpect( empty.calculateSecondhandPrice(), 0.0 ); checkExpect( water.calculateSecondhandPrice(), 0.0 ); System.out.println("\nTesting done.\n\n"); } /*******************************************************************************/ /* Here are (multiple versions of) checkExpect -- * Strings and doubles are each handled slightly differently than most. * * If the test passes, a single "." is printed. * If it fails, a message is printed. */ static void checkExpect( int actual, int expected ) { if (actual == expected) { System.out.print("."); } else { System.out.print("\nfailed test: expected " + expected + ", got " + actual ); } } static void checkExpect( double actual, double expected ) { final double TOLERANCE = 0.00001; // How close is close enough? if (Math.abs(actual-expected) < TOLERANCE) { System.out.print("."); } else { System.out.print("\nfailed test: expected " + expected + ", got " + actual ); } } static void checkExpect( boolean actual, boolean expected ) { if (actual == expected) { System.out.print("."); } else { System.out.print("\nfailed test: expected " + expected + ", got " + actual ); } } static void checkExpect( String actual, String expected ) { if (actual.equals(expected)) { System.out.print("."); } else { System.out.print("\nfailed test: expected \"" + expected + "\", got \"" + actual + "\"" ); } } }