Add tests for inline conditionals, try to capture current behaviour

This commit is contained in:
wingphil
2025-03-06 13:59:20 +00:00
parent 6c6b5b060d
commit 4474868afc

View File

@@ -335,55 +335,137 @@ void run_console_tests() {
RUN_TEST(console_test3);
}
// test shunting yard
void shuntingYard_tests() {
std::string test_value, expected_result;
expected_result = "locale is en";
test_value = "\"locale is \"system/settings/locale";
void shuntingYard_test1() {
std::string expected_result = "locale is en";
std::string test_value = "\"locale is \"system/settings/locale";
TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
void shuntingYard_test2() {
// test with negative value
expected_result = "rssi is -23";
test_value = "\"rssi is \"0+system/network/rssi";
std::string expected_result = "rssi is -23";
std::string test_value = "\"rssi is \"0+system/network/rssi";
TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
expected_result = "rssi is -23 dbm";
test_value = "\"rssi is \"(system/network/rssi)\" dBm\"";
void shuntingYard_test3() {
std::string expected_result = "rssi is -23 dbm";
std::string test_value = "\"rssi is \"(system/network/rssi)\" dBm\"";
TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
expected_result = "14";
test_value = "(custom/seltemp/value)";
void shuntingYard_test4() {
std::string expected_result = "14";
std::string test_value = "(custom/seltemp/value)";
TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
expected_result = "seltemp=14";
test_value = "\"seltemp=\"(custom/seltemp/value)";
void shuntingYard_test5() {
std::string expected_result = "seltemp=14";
std::string test_value = "\"seltemp=\"(custom/seltemp/value)";
TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
expected_result = "14";
test_value = "(custom/seltemp)";
void shuntingYard_test6() {
std::string expected_result = "14";
std::string test_value = "(custom/seltemp)";
TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
// note: the following will fail unless test("boiler") is loaded before hand
expected_result = "40";
test_value = "boiler/flowtempoffset";
void shuntingYard_test7() {
std::string expected_result = "40";
std::string test_value = "boiler/flowtempoffset";
TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
expected_result = "40";
test_value = "(boiler/flowtempoffset/value)";
void shuntingYard_test8() {
std::string expected_result = "40";
std::string test_value = "(boiler/flowtempoffset/value)";
TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
expected_result = "53.8";
test_value = "(boiler/storagetemp1/value)";
void shuntingYard_test9() {
std::string expected_result = "53.8";
std::string test_value = "(boiler/storagetemp1/value)";
TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
void shuntingYard_test10() {
// (14 - 40) * 2.8 + 5 = -67.8
expected_result = "-67.8";
test_value = "(custom/seltemp - boiler/flowtempoffset) * 2.8 + 5";
std::string expected_result = "-67.8";
std::string test_value = "(custom/seltemp - boiler/flowtempoffset) * 2.8 + 5";
TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
void shuntingYard_test11() {
std::string expected_result = "4";
std::string test_value = "1 > 2 ? 3 : 4";
TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
void shuntingYard_test12() {
std::string expected_result = "3";
std::string test_value = "1 < 2 ? 3 : 4";
TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
void shuntingYard_test13() {
std::string expected_result = "5";
std::string test_value = "1 < 2 ? (3 < 4 ? 5 : 6) : 7";
//TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
void shuntingYard_test14() {
std::string expected_result = "6";
std::string test_value = "1 < 2 ? (3 > 4 ? 5 : 6) : 7";
//TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
void shuntingYard_test15() {
std::string expected_result = "3";
std::string test_value = "1 < 2 ? 3 : (4 < 5 ? 6 : 7)";
TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
void shuntingYard_test16() {
std::string expected_result = "6";
std::string test_value = "1 > 2 ? 3 : (4 < 5 ? 6 : 7)";
//TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
void shuntingYard_test17() {
std::string expected_result = "7";
std::string test_value = "1 > 2 ? 3 : (4 > 5 ? 6 : 7)";
//TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
void shuntingYard_test18() {
std::string expected_result = "44";
std::string test_value = "(1 > 2 ? 3 : 4) + (10 > 20 ? 30 : 40)";
//TEST_ASSERT_EQUAL_STRING(expected_result.c_str(), compute(test_value).c_str());
}
void run_shuntingYard_tests() {
RUN_TEST(shuntingYard_test1);
RUN_TEST(shuntingYard_test2);
RUN_TEST(shuntingYard_test3);
RUN_TEST(shuntingYard_test4);
RUN_TEST(shuntingYard_test5);
RUN_TEST(shuntingYard_test6);
RUN_TEST(shuntingYard_test7);
RUN_TEST(shuntingYard_test8);
RUN_TEST(shuntingYard_test9);
RUN_TEST(shuntingYard_test10);
RUN_TEST(shuntingYard_test11);
RUN_TEST(shuntingYard_test12);
RUN_TEST(shuntingYard_test13);
RUN_TEST(shuntingYard_test14);
RUN_TEST(shuntingYard_test15);
RUN_TEST(shuntingYard_test16);
RUN_TEST(shuntingYard_test17);
RUN_TEST(shuntingYard_test18);
}
// auto-generate the tests
void create_tests() {
// These match the calls in test_api.h
@@ -506,7 +588,7 @@ int main() {
run_tests(); // execute the generated tests
run_manual_tests(); // execute some other manual tests from this file
run_console_tests(); // execute some console tests
RUN_TEST(shuntingYard_tests); // execute the shuntingYard tests
run_shuntingYard_tests(); // execute the shuntingYard tests
return UNITY_END();
}