function result = unit_test(test_title, expect_pass, actual_result) ## Function unittest compares the ACTUAL_RESULT of running ## a test (either 0 for failure, or 1 for success) with the ## expected outcome of the test EXPECT_PASS (either 0 for expecting ## a failure, or 1 for expecting pass). TEST_TITLE is the name of ## the test. All test results will be accompanied by the test's ## title. ## ## The result of unit_test is on of the following: UNRESOLVED: The ## test did neither return 0 nor 1. PASS: expected pass, got pass. ## FAIL: expected pass, got fail. UPASS: expected fail, got pass. ## XFAIL: expected fail, got fail. ## ## A call to unit_test typically looks like this: ## ## unit_test("scalar integer addition", 1, eval("1 + 1 == 2;")); global unittest_results; ## Sanity check input parameters if ( nargin < 3 || nargin > 4 ) error("Function run_rest expects 3 or 4 parameters."); endif if (!ischar(test_title)) error("Expecting TEST_TITLE (arg 1) to be a string."); endif if (expect_pass != 0 && expect_pass != 1) error("Expecting EXPECT_PASS (arg 2) to be 0 or 1."); endif unittest_results.total++; ## Take actions depending on what test result we expect ## (expect_pass), and what we actually got (actual_result). if (actual_result != 0 && actual_result != 1) result = "UNRESOLVED"; unittest_results.unresolved++; if (actual_result == 2) printf("SYNTAX ERROR: %s\n", test_title); endif return; endif if (expect_pass == 1 && actual_result == 1) result = "PASS"; if (unittest_results.verbose != 0) printf("PASS: %s\n", test_title); else printf('.'); endif unittest_results.pass++; elseif (expect_pass == 1 && actual_result == 0) result = "FAIL"; printf("FAIL: %s\n\n", test_title); unittest_results.fail++; elseif (expect_pass == 0 && actual_result == 0) result = "XFAIL"; printf("XFAIL: %s\n", test_title); unittest_results.xfail++; elseif (expect_pass == 0 && actual_result == 1) result = "UPASS"; printf("UPASS: %s\n", test_title); unittest_results.upass++; endif endfunction