Files

135 lines
4.1 KiB
C
Raw Permalink Normal View History

2025-06-01 19:54:25 +03:00
#ifndef TEST_UTILS_H
#define TEST_UTILS_H
2025-06-01 12:18:12 +03:00
2025-06-01 19:54:25 +03:00
#include "define_lite.h"
2025-06-01 12:18:12 +03:00
variable test_suite_errors := 0;
variable test_suite_verbose := false;
2025-06-01 12:22:33 +03:00
variable test_suite_assertions := 0;
2025-06-01 12:18:12 +03:00
2025-06-09 08:26:30 -07:00
procedure assertTrue(variable desc, variable a) begin
test_suite_assertions++;
if (not a) then begin
display_msg("Assertion failed \""+desc+"\": is not true");
test_suite_errors ++;
end else if (test_suite_verbose) then begin
display_msg("Assert \""+desc+"\" ok");
end
end
procedure assertFalse(variable desc, variable a) begin
test_suite_assertions++;
if (a) then begin
display_msg("Assertion failed \""+desc+"\": is not false");
test_suite_errors ++;
end else if (test_suite_verbose) then begin
display_msg("Assert \""+desc+"\" ok");
end
end
2025-06-01 12:18:12 +03:00
procedure assertEquals(variable desc, variable a, variable b) begin
2025-06-01 12:22:33 +03:00
test_suite_assertions++;
2025-06-01 12:18:12 +03:00
if (a != b or typeof(a) != typeof(b)) then begin
2025-06-07 19:06:48 +03:00
display_msg("FAIL \""+desc+"\": "+a+" != "+b);
2025-06-01 12:18:12 +03:00
test_suite_errors ++;
end else if (test_suite_verbose) then begin
2025-06-07 19:06:48 +03:00
display_msg("ok \""+desc+"\"");
2025-06-01 12:18:12 +03:00
end
end
procedure assertNotEquals(variable desc, variable a, variable b) begin
2025-06-01 12:22:33 +03:00
test_suite_assertions++;
2025-06-01 12:18:12 +03:00
if (a == b) then begin
2025-06-07 19:06:48 +03:00
display_msg("FAIL \""+desc+"\": "+a+" == "+b);
2025-06-01 12:18:12 +03:00
test_suite_errors ++;
end else if (test_suite_verbose) then begin
2025-06-07 19:06:48 +03:00
display_msg("ok \""+desc+"\"");
2025-06-01 12:18:12 +03:00
end
end
2025-06-02 18:31:40 +03:00
procedure assertFloat(variable desc, variable a, variable b, variable tolerance = 0.001) begin
test_suite_assertions++;
variable diff := abs(a - b);
if (diff > tolerance) then begin
2025-06-07 19:06:48 +03:00
display_msg("FAIL \""+desc+"\": "+a+" != "+b+" (diff: "+diff+")");
test_suite_errors ++;
end else if (test_suite_verbose) then begin
2025-06-07 19:06:48 +03:00
display_msg("ok \""+desc+"\"");
end
end
2025-06-02 18:31:40 +03:00
2025-06-01 12:18:12 +03:00
procedure report_test_results(variable desc) begin
2025-06-01 14:08:18 +03:00
display_msg("DONE " + desc + " " +
(test_suite_assertions-test_suite_errors) + "/" + test_suite_assertions + "");
display_msg("================");
2025-06-01 12:22:33 +03:00
2025-06-07 18:51:56 +03:00
#define GL_VAR_TESTING_INFO_ARRAY_ID "TestArra"
#define TEST_ARR_IDENTIFIER_KEY "__testing_info_array__"
variable arr_id = get_sfall_global_int(GL_VAR_TESTING_INFO_ARRAY_ID);
if arr_id != 0 then begin
// Let's check that it is actually our testing array
if array_key(arr_id, -1) == 0 then begin
// It is not even associative array, so it is not our testing array
arr_id = 0;
end else begin
if arr_id[TEST_ARR_IDENTIFIER_KEY] != 1 then begin
// It is associative array, but it is not our testing array
arr_id = 0;
end
end
end
if arr_id == 0 then begin
arr_id = create_array(-1, 0);
arr_id[TEST_ARR_IDENTIFIER_KEY] = 1;
set_sfall_global(GL_VAR_TESTING_INFO_ARRAY_ID, arr_id);
end
#define TEST_SUITES "Test suites"
#define TEST_ASSERTIONS_TOTAL "Tests assertings total"
#define TEST_ASSERTIONS_FAILED "Tests assertings failed"
if arr_id[TEST_SUITES] == 0 then begin
arr_id[TEST_SUITES] = create_array(-1, 0);
end
2025-06-02 18:31:40 +03:00
//set_sfall_global("test_suite_errors", test_suite_errors);
2025-06-07 18:51:56 +03:00
arr_id[TEST_ASSERTIONS_TOTAL] += test_suite_assertions;
arr_id[TEST_ASSERTIONS_FAILED] += test_suite_errors;
arr_id[TEST_SUITES][desc] += 1;
2025-06-02 18:31:40 +03:00
2025-06-07 18:51:56 +03:00
variable total_suites_names = "";
variable total_suites_count = 0;
variable key, item;
foreach (key: item in arr_id[TEST_SUITES]) begin
total_suites_count += item;
if (total_suites_names != "") then begin
total_suites_names += ", ";
end
total_suites_names += key;
end
2025-06-07 19:06:48 +03:00
variable assertions_stats_str = (arr_id[TEST_ASSERTIONS_TOTAL]-arr_id[TEST_ASSERTIONS_FAILED]) +
"/" + arr_id[TEST_ASSERTIONS_TOTAL];
2025-06-07 18:51:56 +03:00
if (arr_id[TEST_ASSERTIONS_FAILED] == 0) then begin
float_msg(dude_obj, "Tested " + total_suites_count + " cases: " + total_suites_names + ". " +
2025-06-07 19:06:48 +03:00
assertions_stats_str + " assertions passed!", FLOAT_MSG_GREEN);
2025-06-01 12:22:33 +03:00
end else begin
2025-06-07 18:51:56 +03:00
float_msg(dude_obj, "Tested " + total_suites_count + " cases: " + total_suites_names + ". " +
2025-06-07 19:06:48 +03:00
assertions_stats_str + " assertions passed", FLOAT_MSG_RED);
2025-06-01 12:22:33 +03:00
end
2025-06-01 12:18:12 +03:00
end
#endif