class WatertankSimulationTestCase(unittest.TestCase):
    def setUp(self):
        self.watertank = Watertank(1000, [10, 10], [10], 0.5)

    def test_water_raises(self):
        so = self.watertank.get_json_state([20, 20], [20])
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertGreater(sf["water"], so["water"])

    def test_water_lowers(self):
        self.watertank.set_inputs([0, 0])

        so = self.watertank.get_json_state([20, 20], [20])
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertLess(sf["water"], so["water"])

    def cleanUp(self):
        pass
class WatertankSimulationTestCase(unittest.TestCase):
    def setUp(self):
        self.watertank = Watertank(1000, [10, 10], [10], 0.5)

    def test_water_raises(self):
        so = self.watertank.get_json_state([20, 20], [20])
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertGreater(sf["water"], so["water"])

    def test_water_lowers(self):
        self.watertank.set_inputs([0, 0])

        so = self.watertank.get_json_state([20, 20], [20])
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertLess(sf["water"], so["water"])

    def cleanUp(self):
        pass
 def setUp(self):
     self.watertank = Watertank(1000, [10, 10], [10], 0.5, True)
class WatertankSimulationTestCaseTemperatures(unittest.TestCase):
    def setUp(self):
        self.watertank = Watertank(1000, [10, 10], [10], 0.5, True)

    def test_not_overheat(self):

        self.assertFalse(self.watertank.firstPumpOverheated)
        self.assertFalse(self.watertank.secondPumpOverheated)

        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        self.assertFalse(self.watertank.firstPumpOverheated)
        self.assertFalse(self.watertank.secondPumpOverheated)

    def test_stay_within_temp_work_range(self):

        self.assertTrue(self.watertank.firstPumpWorkRange[1] >= self.watertank.firstPumpTemperature >=
                        self.watertank.secondPumpWorkRange[0])

        for i in range(3):
            self.watertank.update(1)

        self.assertTrue(self.watertank.firstPumpWorkRange[1] >= self.watertank.firstPumpTemperature >=
                        self.watertank.secondPumpWorkRange[0])

    def test_water_raises(self):
        so = self.watertank.get_json_state([20, 20], [20])
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertGreater(sf["water"], so["water"])

    def test_water_lowers(self):
        self.watertank.set_inputs([0, 0])

        so = self.watertank.get_json_state([20, 20], [20])
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertLess(sf["water"], so["water"])

    def test_left_temperature_raises(self):
        self.watertank.set_inputs([10, 0])

        so = self.watertank.get_json_state([20, 20], [20])
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertGreater(sf["temperatures"][0], so["temperatures"][0])

    def test_left_temperature_remains(self):
        self.watertank.set_inputs([0, 0])

        so = self.watertank.get_json_state([20, 20], [20])
        rso = self.watertank.firstPumpTemperature
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])
        rsf = self.watertank.firstPumpTemperature

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertEquals(rsf, rso)
        self.assertEquals(sf["temperatures"][0], so["temperatures"][0])

    def test_right_temperature_raises(self):
        self.watertank.set_inputs([0, 10])

        so = self.watertank.get_json_state([20, 20], [20])
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertGreater(sf["temperatures"][1], so["temperatures"][1])

    def test_right_temperature_remains(self):
        self.watertank.set_inputs([0, 0])

        so = self.watertank.get_json_state([20, 20], [20])
        rso = self.watertank.secondPumpTemperature
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])
        rsf = self.watertank.secondPumpTemperature

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertEquals(rsf, rso)
        self.assertEquals(sf["temperatures"][1], so["temperatures"][1])

    def test_all_overheat(self):
        self.watertank.set_inputs([10, 10])

        for i in range(30):
            self.watertank.update(1)

        self.assertTrue(self.watertank.firstPumpOverheated)
        self.assertTrue(self.watertank.secondPumpOverheated)

    def test_all_recover_after_overheat(self):
        self.watertank.set_inputs([10, 10])

        for i in range(30):
            self.watertank.update(1)

        self.watertank.set_inputs([0, 0])

        for i in range(20):
            self.watertank.update(1)

        self.assertFalse(self.watertank.firstPumpOverheated)
        self.assertFalse(self.watertank.secondPumpOverheated)

    def cleanUp(self):
        pass
 def setUp(self):
     self.watertank = Watertank(1000, [10, 10], [10], 0.5, True)
class WatertankSimulationTestCaseTemperatures(unittest.TestCase):
    def setUp(self):
        self.watertank = Watertank(1000, [10, 10], [10], 0.5, True)

    def test_not_overheat(self):

        self.assertFalse(self.watertank.firstPumpOverheated)
        self.assertFalse(self.watertank.secondPumpOverheated)

        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        self.assertFalse(self.watertank.firstPumpOverheated)
        self.assertFalse(self.watertank.secondPumpOverheated)

    def test_stay_within_temp_work_range(self):

        self.assertTrue(
            self.watertank.firstPumpWorkRange[1] >= self.watertank.
            firstPumpTemperature >= self.watertank.secondPumpWorkRange[0])

        for i in range(3):
            self.watertank.update(1)

        self.assertTrue(
            self.watertank.firstPumpWorkRange[1] >= self.watertank.
            firstPumpTemperature >= self.watertank.secondPumpWorkRange[0])

    def test_water_raises(self):
        so = self.watertank.get_json_state([20, 20], [20])
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertGreater(sf["water"], so["water"])

    def test_water_lowers(self):
        self.watertank.set_inputs([0, 0])

        so = self.watertank.get_json_state([20, 20], [20])
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertLess(sf["water"], so["water"])

    def test_left_temperature_raises(self):
        self.watertank.set_inputs([10, 0])

        so = self.watertank.get_json_state([20, 20], [20])
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertGreater(sf["temperatures"][0], so["temperatures"][0])

    def test_left_temperature_remains(self):
        self.watertank.set_inputs([0, 0])

        so = self.watertank.get_json_state([20, 20], [20])
        rso = self.watertank.firstPumpTemperature
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])
        rsf = self.watertank.firstPumpTemperature

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertEquals(rsf, rso)
        self.assertEquals(sf["temperatures"][0], so["temperatures"][0])

    def test_right_temperature_raises(self):
        self.watertank.set_inputs([0, 10])

        so = self.watertank.get_json_state([20, 20], [20])
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertGreater(sf["temperatures"][1], so["temperatures"][1])

    def test_right_temperature_remains(self):
        self.watertank.set_inputs([0, 0])

        so = self.watertank.get_json_state([20, 20], [20])
        rso = self.watertank.secondPumpTemperature
        for i in range(3):
            self.watertank.update(1)
        sf = self.watertank.get_json_state([20, 20], [20])
        rsf = self.watertank.secondPumpTemperature

        so = json.loads(so)
        sf = json.loads(sf)

        self.assertEquals(rsf, rso)
        self.assertEquals(sf["temperatures"][1], so["temperatures"][1])

    def test_all_overheat(self):
        self.watertank.set_inputs([10, 10])

        for i in range(30):
            self.watertank.update(1)

        self.assertTrue(self.watertank.firstPumpOverheated)
        self.assertTrue(self.watertank.secondPumpOverheated)

    def test_all_recover_after_overheat(self):
        self.watertank.set_inputs([10, 10])

        for i in range(30):
            self.watertank.update(1)

        self.watertank.set_inputs([0, 0])

        for i in range(20):
            self.watertank.update(1)

        self.assertFalse(self.watertank.firstPumpOverheated)
        self.assertFalse(self.watertank.secondPumpOverheated)

    def cleanUp(self):
        pass