Saltware / Mbed 2 deprecated Water Play

Dependencies:   mbed DRV88255 TextLCD Ping mbed-rtos

Committer:
sbouber1
Date:
Fri Jun 17 11:02:01 2016 +0000
Revision:
51:4a70184ff7dc
Parent:
50:c1f682eb4c4e
Child:
52:eaddbde192f1
fixed testcase heater

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sbouber1 21:17dd0d778bda 1 #include "mbed.h"
sbouber1 21:17dd0d778bda 2
sbouber1 19:ee89eabe1fa2 3 #include "MockSensorController.h"
sbouber1 19:ee89eabe1fa2 4 #include "AlarmController.h"
sbouber1 36:8aeb014bd651 5 #include "PIDController.h"
sbouber1 19:ee89eabe1fa2 6 #include "testing.h"
sbouber1 19:ee89eabe1fa2 7
sbouber1 21:17dd0d778bda 8 #define NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM 30
sbouber1 28:f4a4ee58d57e 9 #define NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM 300
sbouber1 19:ee89eabe1fa2 10
sbouber1 31:1c50d2d8c155 11 void TestCase::assert(bool b, const char *error) {
sbouber1 19:ee89eabe1fa2 12 if(!b) {
sbouber1 19:ee89eabe1fa2 13 printf("[%s] ASSERTION FAILED: %s\r\n", this->name, error);
sbouber1 19:ee89eabe1fa2 14 this->failed = true;
sbouber1 19:ee89eabe1fa2 15 }
sbouber1 19:ee89eabe1fa2 16 }
sbouber1 19:ee89eabe1fa2 17
sbouber1 28:f4a4ee58d57e 18 MOCK(temp_mock_steady, 35.0);
sbouber1 23:46cc7d776988 19 MOCK(salt_mock_steady, 6.1);
sbouber1 50:c1f682eb4c4e 20 MOCK(prox_mock_steady, 500.0);
sbouber1 23:46cc7d776988 21
sbouber1 30:cf12566013a5 22
sbouber1 22:4b5bf1c2e1ff 23 MOCK(temp_mock1, 40.1+(t/1000.0));
sbouber1 30:cf12566013a5 24 ALARM_TEST(testTempDangerousHighAlarm, temp_mock1, salt_mock_steady, prox_mock_steady, NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1);
sbouber1 19:ee89eabe1fa2 25
sbouber1 22:4b5bf1c2e1ff 26 MOCK(temp_mock2, 29.9-(t/1000.0));
sbouber1 30:cf12566013a5 27 ALARM_TEST(testTempDangerousLowAlarm, temp_mock2, salt_mock_steady, prox_mock_steady, NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1);
sbouber1 22:4b5bf1c2e1ff 28
sbouber1 50:c1f682eb4c4e 29 MOCK(temp_mock3, 30+(t*0.000001));
sbouber1 30:cf12566013a5 30 ALARM_TEST(testTempLowRangeAlarm, temp_mock3, salt_mock_steady, prox_mock_steady, NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1);
sbouber1 22:4b5bf1c2e1ff 31
sbouber1 50:c1f682eb4c4e 32 MOCK(temp_mock4, 38+(t*0.000001));
sbouber1 30:cf12566013a5 33 ALARM_TEST(testTempHighRangeAlarm, temp_mock4, salt_mock_steady, prox_mock_steady, NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1);
sbouber1 30:cf12566013a5 34
sbouber1 30:cf12566013a5 35 MOCK(overflow_undesired_mock, 900+(t/4000.0));
sbouber1 30:cf12566013a5 36 ALARM_TEST(testAlarmWaterOverflowUndesired, temp_mock_steady, salt_mock_steady, overflow_undesired_mock, NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1);
sbouber1 30:cf12566013a5 37
sbouber1 30:cf12566013a5 38 MOCK(overflow_critical_mock, 1001+(t/4000.0));
sbouber1 30:cf12566013a5 39 ALARM_TEST(testAlarmWaterOverflowCritical, temp_mock_steady, salt_mock_steady, overflow_critical_mock, NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1);
sbouber1 30:cf12566013a5 40
sbouber1 30:cf12566013a5 41 MOCK(leak_undesired_mock, 1+(t/4000.0));
sbouber1 30:cf12566013a5 42 ALARM_TEST(testAlarmWaterLeakUndesired, temp_mock_steady, salt_mock_steady, leak_undesired_mock, NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1);
sbouber1 30:cf12566013a5 43
sbouber1 30:cf12566013a5 44 MOCK(leak_critical_mock, -1-(t/4000.0));
sbouber1 51:4a70184ff7dc 45 ALARM_TEST(testAlarmWaterLeakCritical, temp_mock_steady, salt_mock_steady, leak_critical_mock, NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1);
sbouber1 22:4b5bf1c2e1ff 46
sbouber1 50:c1f682eb4c4e 47 MOCK(salinity_mock1, 3.1+(t*0.000005));
sbouber1 31:1c50d2d8c155 48 ALARM_TEST(testSalinityLowRangeAlarm, temp_mock_steady, salinity_mock1, prox_mock_steady, NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1);
sbouber1 31:1c50d2d8c155 49
sbouber1 50:c1f682eb4c4e 50 MOCK(salinity_mock2, 9.1+(t*0.000005));
sbouber1 31:1c50d2d8c155 51 ALARM_TEST(testSalinityHighRangeAlarm, temp_mock_steady, salinity_mock2, prox_mock_steady, NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1);
sbouber1 31:1c50d2d8c155 52
sbouber1 50:c1f682eb4c4e 53 MOCK(salinity_mock3, 2.9-(t*0.000005));
sbouber1 31:1c50d2d8c155 54 ALARM_TEST(testSalinityDangerousLowAlarm, temp_mock_steady, salinity_mock3, prox_mock_steady, NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1);
sbouber1 31:1c50d2d8c155 55
sbouber1 50:c1f682eb4c4e 56 MOCK(salinity_mock4, 12.1+(t*0.000005));
sbouber1 31:1c50d2d8c155 57 ALARM_TEST(testSalinityDangerousHighAlarm, temp_mock_steady, salinity_mock4, prox_mock_steady, NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1);
sbouber1 19:ee89eabe1fa2 58
sbouber1 50:c1f682eb4c4e 59 MOCK(temp_heating_mock, 29+(0.001*t));
sbouber1 23:46cc7d776988 60 bool testTemperatureHeater(TestCase *tc) {
sbouber1 36:8aeb014bd651 61 DEF_MOCKS(temp_heating_mock, salt_mock_steady, prox_mock_steady);
sbouber1 36:8aeb014bd651 62 PIDController pidc(false,0,&temp,&salt,&prox);
sbouber1 36:8aeb014bd651 63
sbouber1 37:2d9480c498c9 64 pidc.run();
sbouber1 36:8aeb014bd651 65 tc->assert(pidc.is_heating(), "PIDController should be heating at temp=29!");
sbouber1 36:8aeb014bd651 66 Thread::wait(1000);
sbouber1 37:2d9480c498c9 67
sbouber1 37:2d9480c498c9 68 pidc.run();
sbouber1 36:8aeb014bd651 69 tc->assert(pidc.is_heating(), "PIDController should be heating at temp=30!");
sbouber1 36:8aeb014bd651 70 Thread::wait(1000);
sbouber1 37:2d9480c498c9 71
sbouber1 37:2d9480c498c9 72 pidc.run();
sbouber1 36:8aeb014bd651 73 tc->assert(pidc.is_heating(), "PIDController should be heating at temp=31!");
sbouber1 51:4a70184ff7dc 74 Thread::wait(2500);
sbouber1 37:2d9480c498c9 75
sbouber1 37:2d9480c498c9 76 pidc.run();
sbouber1 51:4a70184ff7dc 77 tc->assert(!pidc.is_heating(), "PIDController shouldn't be heating at temp=33.5!");
sbouber1 36:8aeb014bd651 78
sbouber1 23:46cc7d776988 79 return true;
sbouber1 23:46cc7d776988 80 }
sbouber1 23:46cc7d776988 81
sbouber1 30:cf12566013a5 82
sbouber1 30:cf12566013a5 83
sbouber1 19:ee89eabe1fa2 84 int test_main() {
sbouber1 31:1c50d2d8c155 85
sbouber1 31:1c50d2d8c155 86 START_TESTS();
sbouber1 31:1c50d2d8c155 87
sbouber1 51:4a70184ff7dc 88 /TESTCASE("Test if alarm is raised when temp > 40 for 30 seconds", testTempDangerousHighAlarm); // PASSED
sbouber1 51:4a70184ff7dc 89 TESTCASE("Test if alarm is raised when temp < 30 for 30 seconds", testTempDangerousLowAlarm); // PASSED
sbouber1 51:4a70184ff7dc 90 TESTCASE("Test if alarm is raised when temp > 30 and < 32 for 5 minutes", testTempLowRangeAlarm); // PASSED
sbouber1 51:4a70184ff7dc 91 TESTCASE("Test if alarm is raised when temp > 38 and < 40 for 5 minutes", testTempHighRangeAlarm); // PASSED
sbouber1 19:ee89eabe1fa2 92
sbouber1 51:4a70184ff7dc 93 TESTCASE("Test if alarm is raised when salinity > 3 and < 6 for 5 minutes", testSalinityLowRangeAlarm); // PASSED
sbouber1 51:4a70184ff7dc 94 TESTCASE("Test if alarm is raised when salinity > 9 and < 12 for 5 minutes", testSalinityHighRangeAlarm); // PASSED
sbouber1 51:4a70184ff7dc 95 TESTCASE("Test if alarm is raised when salinity < 3 for 30 seconds", testSalinityDangerousLowAlarm); // PASSED
sbouber1 51:4a70184ff7dc 96 TESTCASE("Test if alarm is raised when salinity > 12 for 30 seconds", testSalinityDangerousHighAlarm); // PASSED
sbouber1 31:1c50d2d8c155 97
sbouber1 51:4a70184ff7dc 98 TESTCASE("Test if heater gets enabled at < 32 and disabled at 33+", testTemperatureHeater); // PASSED
sbouber1 31:1c50d2d8c155 99
sbouber1 51:4a70184ff7dc 100 TESTCASE("Test if alarm is raised when water tank level in range 900-1000 ml for 5 minutes", testAlarmWaterOverflowUndesired); // PASSED
sbouber1 51:4a70184ff7dc 101 TESTCASE("Test if alarm is raised when water tank level is 1001 for 30 seconds", testAlarmWaterOverflowCritical); // PASSED
sbouber1 51:4a70184ff7dc 102 TESTCASE("Test if alarm is raised when water tank level is in range 0-100 ml for 5 minutes", testAlarmWaterLeakUndesired); // PASSED
sbouber1 51:4a70184ff7dc 103 TESTCASE("Test if alarm is raised when water tank level is < 0 for 30 seconds", testAlarmWaterLeakCritical); // PASSED
sbouber1 31:1c50d2d8c155 104
sbouber1 31:1c50d2d8c155 105 END_TESTS();
sbouber1 30:cf12566013a5 106
sbouber1 19:ee89eabe1fa2 107 return 0;
sbouber1 19:ee89eabe1fa2 108 }