Saltware / Mbed 2 deprecated Water Play

Dependencies:   mbed DRV88255 TextLCD Ping mbed-rtos

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers testing.cpp Source File

testing.cpp

00001 #include "mbed.h"
00002 
00003 #include "MockSensorController.h"
00004 #include "SensorAlarmController.h"
00005 #include "PIDController.h"
00006 #include "testing.h"
00007 
00008 
00009 void TestCase::assert(bool b, const char *error) {
00010     if(!b) {
00011         printf("[%s] ASSERTION FAILED: %s\r\n", this->name, error);
00012         this->failed = true;
00013     }    
00014 }
00015 
00016 MOCK(temp_mock_steady, 35.0);
00017 MOCK(salt_mock_steady, 6.1);
00018 MOCK(prox_mock_steady, 500.0);
00019 
00020 
00021 MOCK(temp_mock1, 40.1+(t/1000.0));
00022 ALARM_TEST(testTempDangerousHighAlarm, temp_mock1, salt_mock_steady, prox_mock_steady, NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1);
00023 
00024 MOCK(temp_mock2, 29.9-(t/1000.0));
00025 ALARM_TEST(testTempDangerousLowAlarm, temp_mock2, salt_mock_steady, prox_mock_steady, NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1);
00026 
00027 MOCK(temp_mock3, 30+(t*0.000001));
00028 ALARM_TEST(testTempLowRangeAlarm, temp_mock3, salt_mock_steady, prox_mock_steady, NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1);
00029 
00030 MOCK(temp_mock4, 38+(t*0.000001));
00031 ALARM_TEST(testTempHighRangeAlarm, temp_mock4, salt_mock_steady, prox_mock_steady, NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1);
00032 
00033 MOCK(overflow_undesired_mock, 900+(t/4000.0));
00034 ALARM_TEST(testAlarmWaterOverflowUndesired, temp_mock_steady, salt_mock_steady, overflow_undesired_mock, NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1);
00035 
00036 MOCK(overflow_critical_mock, 1001+(t/4000.0));
00037 ALARM_TEST(testAlarmWaterOverflowCritical, temp_mock_steady, salt_mock_steady, overflow_critical_mock, NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1);
00038 
00039 MOCK(leak_undesired_mock, 1+(t/4000.0));
00040 ALARM_TEST(testAlarmWaterLeakUndesired, temp_mock_steady, salt_mock_steady, leak_undesired_mock, NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1);
00041 
00042 MOCK(leak_critical_mock, -1-(t/4000.0));
00043 ALARM_TEST(testAlarmWaterLeakCritical, temp_mock_steady, salt_mock_steady, leak_critical_mock, NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1);
00044 
00045 MOCK(salinity_mock1, 3.1+(t*0.000005));
00046 ALARM_TEST(testSalinityLowRangeAlarm, temp_mock_steady, salinity_mock1, prox_mock_steady, NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1);
00047 
00048 MOCK(salinity_mock2, 9.1+(t*0.000005));
00049 ALARM_TEST(testSalinityHighRangeAlarm, temp_mock_steady, salinity_mock2, prox_mock_steady, NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1);
00050 
00051 MOCK(salinity_mock3, 2.9-(t*0.000005));
00052 ALARM_TEST(testSalinityDangerousLowAlarm, temp_mock_steady, salinity_mock3, prox_mock_steady, NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1);
00053 
00054 MOCK(salinity_mock4, 12.1+(t*0.000005));
00055 ALARM_TEST(testSalinityDangerousHighAlarm, temp_mock_steady, salinity_mock4, prox_mock_steady, NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1);
00056 
00057 MOCK(temp_heating_mock, 29+(0.001*t));
00058 bool testTemperatureHeater(TestCase *tc) {
00059     DEF_MOCKS(temp_heating_mock, salt_mock_steady, prox_mock_steady);
00060     PIDController pidc(false,0,&temp,&salt,&prox);
00061     
00062     pidc.run();
00063     tc->assert(pidc.isHeating(), "PIDController should be heating at temp=29!");
00064     Thread::wait(1000);
00065     
00066     pidc.run();
00067     tc->assert(pidc.isHeating(), "PIDController should be heating at temp=30!");
00068     Thread::wait(1000);
00069     
00070     pidc.run();
00071     tc->assert(pidc.isHeating(), "PIDController should be heating at temp=31!");
00072     Thread::wait(2500);
00073     
00074     pidc.run();
00075     tc->assert(!pidc.isHeating(), "PIDController shouldn't be heating at temp=33.5!");
00076     
00077     return true;    
00078 }
00079 
00080 
00081 MOCK(salinity_mock5, 1.0f);
00082 MOCK(salinity_mock6, 2.0f);
00083 MOCK(salinity_mock7, 4.0f);
00084 MOCK(salinity_mock8, 7.0f);
00085 MOCK(salinity_mock10, 10.0f);
00086 MOCK(salinity_mock11, 14.0f);
00087 MOCK(vol_mock1, 600.0f);
00088 
00089 bool testPumps1(TestCase *tc) {
00090     
00091     Thread::wait(5000);
00092     
00093     DEF_MOCKS(temp_mock_steady, salinity_mock11, vol_mock1);
00094     PIDController pidc(false,0,&temp,&salt,&prox);
00095     
00096     temp.run();
00097     salt.run();
00098     prox.run();
00099     
00100     pidc.run();
00101     
00102     printf("Manually verify the amount of salty water pumped for 2.0f salt and 600ml volume\r\n");
00103     
00104     Thread::wait(5000);
00105     
00106     return true;
00107 }
00108 
00109 
00110 
00111 
00112 
00113 int testMain() {
00114     
00115     START_TESTS();
00116     
00117     /*TESTCASE("Test if alarm is raised when temp > 40 for 30 seconds", testTempDangerousHighAlarm);
00118     TESTCASE("Test if alarm is raised when temp < 30 for 30 seconds", testTempDangerousLowAlarm);
00119     TESTCASE("Test if alarm is raised when temp > 30 and < 32 for 5 minutes", testTempLowRangeAlarm);
00120     TESTCASE("Test if alarm is raised when temp > 38 and < 40 for 5 minutes", testTempHighRangeAlarm);
00121     
00122     TESTCASE("Test if alarm is raised when salinity > 3 and < 6 for 5 minutes", testSalinityLowRangeAlarm);
00123     TESTCASE("Test if alarm is raised when salinity > 9 and < 12 for 5 minutes", testSalinityHighRangeAlarm);
00124     TESTCASE("Test if alarm is raised when salinity < 3 for 30 seconds", testSalinityDangerousLowAlarm);
00125     TESTCASE("Test if alarm is raised when salinity > 12 for 30 seconds", testSalinityDangerousHighAlarm);
00126     
00127     TESTCASE("Test if heater gets enabled at < 32 and disabled at 33+", testTemperatureHeater);
00128     
00129     TESTCASE("Test if alarm is raised when water tank level in range 900-1000 ml for 5 minutes", testAlarmWaterOverflowUndesired);
00130     TESTCASE("Test if alarm is raised when water tank level is 1001 for 30 seconds", testAlarmWaterOverflowCritical);
00131     TESTCASE("Test if alarm is raised when water tank level is in range 0-100 ml for 5 minutes", testAlarmWaterLeakUndesired);
00132     TESTCASE("Test if alarm is raised when water tank level is < 0 for 30 seconds", testAlarmWaterLeakCritical);
00133     */
00134     TESTCASE("Test pump at 1.0f ppt salinity and 600ml volume", testPumps1);
00135     
00136     END_TESTS();
00137     
00138     return 0;
00139 }