#include "test_utils.h" UnittestTestResult_t* test_and_true_true(void) { UNITTEST_BEGIN_TEST("TestShortCircuit", "test_and_true_true"); RAVA_TEST_RUN(_unittest_result, "public class Test {\n" " public static int main() {\n" " if (true && true) { return 1; }\n" " return 0;\n" " }\n" "}\n", "Test", "main", 1, "AND true && true should return 1"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_and_true_false(void) { UNITTEST_BEGIN_TEST("TestShortCircuit", "test_and_true_false"); RAVA_TEST_RUN(_unittest_result, "public class Test {\n" " public static int main() {\n" " if (true && false) { return 1; }\n" " return 0;\n" " }\n" "}\n", "Test", "main", 0, "AND true && false should return 0"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_and_false_true(void) { UNITTEST_BEGIN_TEST("TestShortCircuit", "test_and_false_true"); RAVA_TEST_RUN(_unittest_result, "public class Test {\n" " public static int main() {\n" " if (false && true) { return 1; }\n" " return 0;\n" " }\n" "}\n", "Test", "main", 0, "AND false && true should return 0"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_or_false_true(void) { UNITTEST_BEGIN_TEST("TestShortCircuit", "test_or_false_true"); RAVA_TEST_RUN(_unittest_result, "public class Test {\n" " public static int main() {\n" " if (false || true) { return 1; }\n" " return 0;\n" " }\n" "}\n", "Test", "main", 1, "OR false || true should return 1"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_or_true_false(void) { UNITTEST_BEGIN_TEST("TestShortCircuit", "test_or_true_false"); RAVA_TEST_RUN(_unittest_result, "public class Test {\n" " public static int main() {\n" " if (true || false) { return 1; }\n" " return 0;\n" " }\n" "}\n", "Test", "main", 1, "OR true || false should return 1"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_or_false_false(void) { UNITTEST_BEGIN_TEST("TestShortCircuit", "test_or_false_false"); RAVA_TEST_RUN(_unittest_result, "public class Test {\n" " public static int main() {\n" " if (false || false) { return 1; }\n" " return 0;\n" " }\n" "}\n", "Test", "main", 0, "OR false || false should return 0"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_shortcircuit_and_skips_second(void) { UNITTEST_BEGIN_TEST("TestShortCircuit", "test_shortcircuit_and_skips_second"); RAVA_TEST_RUN(_unittest_result, "public class Test {\n" " public static int main() {\n" " int x = 5;\n" " boolean b = false;\n" " if (b && (x > 10)) {\n" " return 1;\n" " }\n" " return 0;\n" " }\n" "}\n", "Test", "main", 0, "short-circuit AND with false should skip second operand"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_shortcircuit_or_skips_second(void) { UNITTEST_BEGIN_TEST("TestShortCircuit", "test_shortcircuit_or_skips_second"); RAVA_TEST_RUN(_unittest_result, "public class Test {\n" " public static int main() {\n" " int x = 5;\n" " boolean b = true;\n" " if (b || (x < 0)) {\n" " return 1;\n" " }\n" " return 0;\n" " }\n" "}\n", "Test", "main", 1, "short-circuit OR with true should skip second operand"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_and_with_comparison(void) { UNITTEST_BEGIN_TEST("TestShortCircuit", "test_and_with_comparison"); RAVA_TEST_RUN(_unittest_result, "public class Test {\n" " public static int main() {\n" " int x = 5;\n" " if (x > 0 && x < 10) { return 1; }\n" " return 0;\n" " }\n" "}\n", "Test", "main", 1, "AND with comparison should return 1"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_or_with_comparison(void) { UNITTEST_BEGIN_TEST("TestShortCircuit", "test_or_with_comparison"); RAVA_TEST_RUN(_unittest_result, "public class Test {\n" " public static int main() {\n" " int x = 15;\n" " if (x < 0 || x > 10) { return 1; }\n" " return 0;\n" " }\n" "}\n", "Test", "main", 1, "OR with comparison should return 1"); UNITTEST_END_TEST(); } int main(int argc, char **argv) { UnittestConfig_t *config = unittest_config_create(); config->verbosity = 2; if (argc > 1 && strcmp(argv[1], "--json") == 0) { config->output_format = UNITTEST_FORMAT_JSON; config->use_colors = false; } UnittestTestSuite_t *suite = unittest_test_suite_create("Short-Circuit Evaluation Tests"); UnittestTestCase_t *tc = unittest_test_case_create("TestShortCircuit"); unittest_test_case_add_result(tc, test_and_true_true()); unittest_test_case_add_result(tc, test_and_true_false()); unittest_test_case_add_result(tc, test_and_false_true()); unittest_test_case_add_result(tc, test_or_false_true()); unittest_test_case_add_result(tc, test_or_true_false()); unittest_test_case_add_result(tc, test_or_false_false()); unittest_test_case_add_result(tc, test_shortcircuit_and_skips_second()); unittest_test_case_add_result(tc, test_shortcircuit_or_skips_second()); unittest_test_case_add_result(tc, test_and_with_comparison()); unittest_test_case_add_result(tc, test_or_with_comparison()); unittest_test_suite_add_test_case(suite, tc); unittest_generate_report(suite, config); int failures = suite->total_failed + suite->total_errors; unittest_test_suite_destroy(suite); unittest_config_destroy(config); return failures > 0 ? 1 : 0; }