From 83c621f812194c817d0ec982f0681c79742934f6 Mon Sep 17 00:00:00 2001 From: bymyself Date: Fri, 27 Sep 2024 17:24:32 -0700 Subject: [PATCH] Large assignment 01 Triangle Functions and Tests (#3) * Fix cache reading in test runner * Add test script for LA 1 * Triangle functions for LA01 --- README.md | 5 +- install | 5 +- .../large_assignment_01.sml | 44 +++++++++ src/large_assignment_01/spec.pdf | Bin 0 -> 86391 bytes test-la-01.sh | 3 + test.py | 42 +++++++-- .../test_triangle.sml | 87 ++++++++++++++++++ .../test_triangleR.sml | 32 +++++++ tests/utils.sml | 42 +++++++++ 9 files changed, 246 insertions(+), 14 deletions(-) create mode 100644 src/large_assignment_01/large_assignment_01.sml create mode 100644 src/large_assignment_01/spec.pdf create mode 100755 test-la-01.sh create mode 100644 tests/tests-large_assignment_01/test_triangle.sml create mode 100644 tests/tests-large_assignment_01/test_triangleR.sml diff --git a/README.md b/README.md index 96d28d4..1b942ef 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ chmod +x ./test ## Options ```sh -usage: test.py [-h] [-x] [--cache-path CACHE_PATH] [--cache-show [CACHE_SHOW]] [--cache-clear] [-k EXPRESSION] +usage: ./test [-h] [-x] [--cache-path CACHE_PATH] [--cache-show [CACHE_SHOW]] [--cache-clear] [-k EXPRESSION] [--lf] [--ff] [--nf] [--sw-skip] [--maxfail MAXFAIL] [--collect-only] [--ignore IGNORE] [--ignore-glob IGNORE_GLOB] [--rootdir ROOTDIR] [--log-file LOG_FILE] [--log-file-level {NOTSET,DEBUG,INFO,WARNING,ERROR,CRITICAL}] @@ -105,7 +105,6 @@ runTestCasesIntInt(testCasesFactorial); Builds local SML wiki site and opens it in the browser. ```sh -chmod +x ./start-wiki ./start-wiki ``` @@ -119,7 +118,6 @@ Set credentials in `.env` file ([`.env.example`](./.env.example)) ##### Connect Lectura ```sh -chmod +x ./connect-lectura ./connect-lectura ``` @@ -128,7 +126,6 @@ Press `Ctrl+V` ##### Submit Lectura ```sh -chmod +x ./submit-lectura ./submit-lectura ``` diff --git a/install b/install index 608a597..ff57b4e 100755 --- a/install +++ b/install @@ -6,6 +6,9 @@ sudo apt install smlnj # Set permissions chmod +x ./test chmod +x ./test-compile +chmod +x ./connect-lectura +chmod +x ./submit-lectura +chmod +x ./start-wiki # Get python path PYTHON_PATH=$(which python3) @@ -13,5 +16,5 @@ PYTHON_PATH=$(which python3) # Install python dependencies $PYTHON_PATH -m pip install -r requirements.txt -echo "Set lectura credentials in .env file" +echo -e "Set lectura credentials in .env file\nSee .env.example for reference" echo -e "\nInstallation complete" diff --git a/src/large_assignment_01/large_assignment_01.sml b/src/large_assignment_01/large_assignment_01.sml new file mode 100644 index 0000000..670995b --- /dev/null +++ b/src/large_assignment_01/large_assignment_01.sml @@ -0,0 +1,44 @@ +(* + * Author: Christian Byrne + * Date: 9/27/24 + * Large Assignment #1 + * Description: Practice functions in SML, + * focusing on pattern matching + * and recursion. + *) + + +(* + * `triangle` + * + * Type: `int * int * int -> bool` + * Description: The triangle inequality theorem states that the sum of any + * two sides of a triangle must be greater than or equal to the + * third side. This function should return true if the three + * integers can make a triangle and false otherwise. + *) +fun triangle(0, _, _) = false + | triangle(_, 0, _) = false + | triangle(_, _, 0) = false + | triangle(a, b, c) = a + b >= c andalso a + c >= b andalso b + c >= a; + + +(* + * `triangleR` + * + * Type: `real * real * real -> bool` + * Description: The triangle inequality theorem states that the sum + * of any two sides of a triangle must be greater than + * or equal to the third side. This function should + * return true if the three real numbers can make a + * triangle and false otherwise. + *) +fun triangleR(a, b, c) = + let + val epsilon = 1.0E~10 + fun is_zero(x) = abs(x) < epsilon + fun sum_geq_to(a, b, to) = a + b >= to + in + not(is_zero(a)) andalso not(is_zero(b)) andalso not(is_zero(c)) andalso + sum_geq_to(a, b, c) andalso sum_geq_to(a, c, b) andalso sum_geq_to(b, c, a) + end; diff --git a/src/large_assignment_01/spec.pdf b/src/large_assignment_01/spec.pdf new file mode 100644 index 0000000000000000000000000000000000000000..009e476c8f14f3dcd122dd865c09b20908807758 GIT binary patch literal 86391 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 J3dsn={4cz!DT)99 literal 0 HcmV?d00001 diff --git a/test-la-01.sh b/test-la-01.sh new file mode 100755 index 0000000..9178abc --- /dev/null +++ b/test-la-01.sh @@ -0,0 +1,3 @@ +#!/bin/bash +# +./test --ignore-glob "tests-ica05/*" --failed-first --log-cli-level WARNING diff --git a/test.py b/test.py index fd87982..bbe39cc 100644 --- a/test.py +++ b/test.py @@ -191,33 +191,57 @@ def clear_cache(): logging.debug(f"Collecting tests from {tests_path}") try: + all_seen_tests = set() + last_failed_tests = set() with open(args.cache_path, "r") as cache_file: + cache_ = json.load(cache_file) + logging.debug(f"Cache file on start: {cache_}") + logging.debug(f"all_seen_tests in cache: {cache_.get('all_seen_tests')}") + logging.debug(f"failed_tests in cache: {cache_.get('failed_tests')}") all_seen_tests = set( - Path(test) for test in json.load(cache_file).get("all_seen_tests", []) + Path(test) for test in cache_.get("all_seen_tests", []) ) last_failed_tests = set( - Path(test) for test in json.load(cache_file).get("failed_tests", []) + Path(test) for test in cache_.get("failed_tests", []) ) -except: - pass +except Exception as e: + logging.error(f"Error reading cache file: {e}") + + # Fall back to empty sets + if not all_seen_tests: + all_seen_tests = set() + if not last_failed_tests: + last_failed_tests = set() for test in tests_path.rglob(args.expression): if not test.is_file(): continue + + skip_test = False # Ignore glob if args.ignore_glob: + logging.debug(f"Checking ignore glob {args.ignore_glob} for test {test}") for ignore_glob in args.ignore_glob: if test.match(ignore_glob): logging.info( f"Ignoring test {test} because of ignore glob {ignore_glob}" ) - continue + skip_test = True + break + if skip_test: + continue + + # Ignore if args.ignore: + logging.debug(f"Checking ignore {args.ignore} for test {test}") for ignore in args.ignore: if test == Path(ignore): logging.info(f"Ignoring test {test} because of ignore {ignore}") - continue - + skip_test = True + break + if skip_test: + continue + # If --last-failed is set, only include the tests that are in the 'failed_tests' cache if args.lf and test not in last_failed_tests: continue @@ -304,12 +328,12 @@ def run_test(test_path: Path): output, error = process.communicate() if output: formatted_output = output.replace("\n", "\n\t\t") - if LogLevel[args.log_cli_level].value <= LogLevel.INFO.value: + if LogLevel[args.log_cli_level].value <= LogLevel.ERROR.value: print(f"Output: {formatted_output}") if check_for_compile_error(output): compile_error_tests.add(test_path) logging.critical(f"Compile error in test {test_path}") - if check_for_runtime_error(output): + elif check_for_runtime_error(output): runtime_error_tests.add(test_path) logging.error(f"Runtime error in test {test_path}") elif "Test failed" in output: diff --git a/tests/tests-large_assignment_01/test_triangle.sml b/tests/tests-large_assignment_01/test_triangle.sml new file mode 100644 index 0000000..58cd2ee --- /dev/null +++ b/tests/tests-large_assignment_01/test_triangle.sml @@ -0,0 +1,87 @@ +(* Large Assignment 01 Tests *) + +use "src/large_assignment_01/large_assignment_01.sml"; +use "tests/utils.sml"; + +val testTriangle = [ + (* Test Cases That Should Fail (Return false) *) + + (* 1. One side is too long *) + (triangle, 1, 2, 4, false), (* 1 + 2 < 4, should fail *) + + (* 2. All sides are zero *) + (triangle, 0, 0, 0, false), (* No valid triangle can have zero-length sides *) + + (* 3. One side is zero *) + (triangle, 0, 5, 7, false), (* One side being zero makes it an invalid triangle *) + + (* 4. Extremely large sides that violate inequality *) + (triangle, 1000000, 1, 1, false), (* 1000000 + 1 < 1, should fail *) + + (* 5. Two equal sides but still invalid *) + (triangle, 10, 10, 25, false), (* 10 + 10 < 25, should fail *) + + (* 6. All negative sides *) + (triangle, ~1, ~1, ~1, false), (* Negative values cannot form a triangle *) + + (* 7. One negative side *) + (triangle, ~3, 4, 5, false), (* Negative sides make it invalid *) + + (* 8. One side is larger than the sum of the other two *) + (triangle, 1, 1, 3, false), (* 1 + 1 < 3, should fail *) + + (* 9. Middle arg is zero *) + (triangle, 2, 0, 2, false), (* You cannot make a triangle with a zero-length side *) + + (* 10. Last arg is zero *) + (triangle, 2, 2, 0, false), (* You cannot make a triangle with a zero-length side *) + + (* 11. Two sides are zero *) + (triangle, 0, 2, 0, false), (* You cannot make a triangle with a zero-length side *) + + (* 12. Two sides are zero *) + (triangle, 2, 0, 0, false), (* You cannot make a triangle with a zero-length side *) + + (* 13. Two sides are zero *) + (triangle, 0, 0, 2, false), (* You cannot make a triangle with a zero-length side *) + + (* Test Cases That Should Pass (Return true) *) + + (* 1. Simple valid triangle *) + (triangle, 3, 4, 5, true), (* Classic 3-4-5 triangle, should pass *) + + (* 2. Equilateral triangle *) + (triangle, 5, 5, 5, true), (* All sides equal, valid triangle *) + + (* 3. Isosceles triangle *) + (triangle, 5, 5, 8, true), (* Two sides equal, valid triangle *) + + (* 4. All sides equal but larger values *) + (triangle, 100, 100, 100, true), (* All sides equal, valid triangle *) + + (* 5. Large valid triangle *) + (triangle, 1000000, 1000000, 1000000, true), (* Large triangle, all sides equal *) + + (* 6. Right triangle *) + (triangle, 6, 8, 10, true), (* Pythagorean triple, valid triangle *) + + (* 7. One small side, two large sides *) + (triangle, 1, 1000, 1001, true), (* 1 + 1000 > 1001, should pass *) + + (* 8. Two equal sides, third side small but valid *) + (triangle, 10, 10, 15, true), (* 10 + 10 > 15, valid triangle *) + + (* 9. Minimal valid triangle *) + (triangle, 1, 1, 1, true), (* Smallest valid triangle, all sides 1 *) + + (* 10. Very large triangle with different sides *) + (triangle, 500000, 600000, 700000, true), (* Large triangle with different sides *) + + (* 11. Two sides equal the third *) + (triangle, 2, 2, 4, true), (* 2 + 2 = 4, but no strict inequality, so shuld pass *) + + (* 12. Two large sides, one very small side *) + (triangle, 9999, 9999, 1, true) (* 9999 + 1 > 9999, should pass always *) +]; + +runTestCasesIntIntIntBool(testTriangle); diff --git a/tests/tests-large_assignment_01/test_triangleR.sml b/tests/tests-large_assignment_01/test_triangleR.sml new file mode 100644 index 0000000..611b382 --- /dev/null +++ b/tests/tests-large_assignment_01/test_triangleR.sml @@ -0,0 +1,32 @@ +(* Large Assignment 01 Tests *) + +use "src/large_assignment_01/large_assignment_01.sml"; +use "tests/utils.sml"; + +val testTriangleR = [ + (* Test Cases That Should Fail (Return false) *) + (triangleR, 1.0, 2.0, 4.0, false), + (triangleR, 0.0, 0.0, 0.0, false), + (triangleR, 0.0, 5.0, 7.0, false), + (triangleR, 1000000.0, 1.0, 1.0, false), + (triangleR, 10.0, 10.0, 25.0, false), + (triangleR, ~1.0, ~1.0, ~1.0, false), + (triangleR, ~3.0, 4.0, 5.0, false), + (triangleR, 1.0, 1.0, 3.0, false), + (triangleR, 2.0, 0.0, 2.0, false), + (triangleR, 2.0, 2.0, 0.0, false), + + (* Test Cases That Should Pass (Return true) *) + (triangleR, 3.0, 4.0, 5.0, true), + (triangleR, 5.0, 5.0, 5.0, true), + (triangleR, 5.0, 5.0, 8.0, true), + (triangleR, 100.0, 100.0, 100.0, true), + (triangleR, 1000000.0, 1000000.0, 1000000.0, true), + (triangleR, 6.0, 8.0, 10.0, true), + (triangleR, 1.0, 1000.0, 1001.0, true), + (triangleR, 10.0, 10.0, 15.0, true), + (triangleR, 1.0, 1.0, 1.0, true), + (triangleR, 500000.0, 600000.0, 700000.0, true) +]; + +runTestCasesRealRealRealBool(testTriangleR); diff --git a/tests/utils.sml b/tests/utils.sml index 61b1545..9b47368 100644 --- a/tests/utils.sml +++ b/tests/utils.sml @@ -13,6 +13,48 @@ fun valueToStringIntList([]) = "[]" fun red(s) = "\027[31m" ^ s ^ "\027[0m" fun green(s) = "\027[32m" ^ s ^ "\027[0m"; +(* Generic test runner for int * int * int -> bool functions *) +fun runTestCasesIntIntIntBool([]) = () + | runTestCasesIntIntIntBool(testCaseList) = + let + val (f, param1, param2, param3, expected) = hd(testCaseList); + val result = f(param1, param2, param3); + val testMessage = + if result <> expected then + red("Test failed\n") ^ + "Arguments: " ^ valueToStringInt(param1) ^ ", " ^ valueToStringInt(param2) ^ ", " ^ valueToStringInt(param3) ^ "\n" ^ + "Expected: " ^ valueToStringBool(expected) ^ "\n" ^ + "Actual: " ^ valueToStringBool(result) ^ "\n\n" + else + green("Test passed\n"); + in + print(testMessage); + (* Error code so GH actions can detect if a test failed *) + if result <> expected then raise Fail("Test failed") else runTestCasesIntIntIntBool(tl(testCaseList)) + end; + +(* Generic test runner for real * real * real -> bool functions *) +fun runTestCasesRealRealRealBool([]) = () + | runTestCasesRealRealRealBool(testCaseList) = + let + val (f, param1, param2, param3, expected) = hd(testCaseList); + val result = f(param1, param2, param3); + val testMessage = + if result <> expected then + red("Test failed\n") ^ + "Arguments: " ^ Real.toString(param1) ^ ", " ^ Real.toString(param2) ^ ", " ^ Real.toString(param3) ^ "\n" ^ + "Expected: " ^ valueToStringBool(expected) ^ "\n" ^ + "Actual: " ^ valueToStringBool(result) ^ "\n\n" + else + green("Test passed\n"); + in + print(testMessage); + (* Error code so GH actions can detect if a test failed *) + if result <> expected then raise Fail("Test failed") else runTestCasesRealRealRealBool(tl(testCaseList)) + end; + +(* Generic test runner for int * int -> bool functions *) + (* Generic test runner for int -> int functions *) fun runTestCasesIntInt([]) = () | runTestCasesIntInt(testCaseList) =