From 134e9ccd0c076cdf5bce9f49b23f6389542f66c5 Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Wed, 19 Aug 2026 19:31:58 -0700 Subject: [PATCH] Add test generators for `matching-brackets matrix meetup nucleotide-count ocr-numbers` This marks the nucleotide-count error handling case as excluded. --- .../matching-brackets/.meta/template.data.j2 | 3 ++ exercises/practice/matching-brackets/data.csv | 40 +++++++-------- .../.meta/template.create_test_table.j2 | 47 ++++++++++++++++++ .../practice/matrix/.meta/template.data.j2 | 3 ++ exercises/practice/matrix/data.csv | 16 +++--- .../practice/meetup/.meta/template.data.j2 | 3 ++ .../nucleotide-count/.meta/template.data.j2 | 3 ++ .../nucleotide-count/.meta/tests.toml | 1 + .../.meta/template.create_test_table.j2 | 49 +++++++++++++++++++ .../ocr-numbers/.meta/template.data.j2 | 3 ++ exercises/practice/ocr-numbers/data.csv | 34 ++++++------- 11 files changed, 157 insertions(+), 45 deletions(-) create mode 100644 exercises/practice/matching-brackets/.meta/template.data.j2 create mode 100644 exercises/practice/matrix/.meta/template.create_test_table.j2 create mode 100644 exercises/practice/matrix/.meta/template.data.j2 create mode 100644 exercises/practice/meetup/.meta/template.data.j2 create mode 100644 exercises/practice/nucleotide-count/.meta/template.data.j2 create mode 100644 exercises/practice/ocr-numbers/.meta/template.create_test_table.j2 create mode 100644 exercises/practice/ocr-numbers/.meta/template.data.j2 diff --git a/exercises/practice/matching-brackets/.meta/template.data.j2 b/exercises/practice/matching-brackets/.meta/template.data.j2 new file mode 100644 index 00000000..272f6744 --- /dev/null +++ b/exercises/practice/matching-brackets/.meta/template.data.j2 @@ -0,0 +1,3 @@ +{%- for case in cases -%} +{{ [case["input"]["value"]] | tocsv }},"" +{% endfor %} diff --git a/exercises/practice/matching-brackets/data.csv b/exercises/practice/matching-brackets/data.csv index dcd51248..186c9e8b 100644 --- a/exercises/practice/matching-brackets/data.csv +++ b/exercises/practice/matching-brackets/data.csv @@ -1,20 +1,20 @@ -"[]", -"", -"[[", -"}{", -"{]", -"{ }", -"{[])", -"{[]}", -"{}[]", -"([{}({}[])])", -"{[)][]}", -"([{])", -"[({]})", -"[({}])", -"{}[", -"[]]", -")()", -"{)()", -"(((185 + 223.85) * 15) - 543)/2", -"\left(\begin{array}{cc} \frac{1}{3} & x\\ \mathrm{e}^{x} &... x^2 \end{array}\right)", +"[]","" +"","" +"[[","" +"}{","" +"{]","" +"{ }","" +"{[])","" +"{[]}","" +"{}[]","" +"([{}({}[])])","" +"{[)][]}","" +"([{])","" +"[({]})","" +"[({}])","" +"{}[","" +"[]]","" +")()","" +"{)()","" +"(((185 + 223.85) * 15) - 543)/2","" +"\left(\begin{array}{cc} \frac{1}{3} & x\\ \mathrm{e}^{x} &... x^2 \end{array}\right)","" diff --git a/exercises/practice/matrix/.meta/template.create_test_table.j2 b/exercises/practice/matrix/.meta/template.create_test_table.j2 new file mode 100644 index 00000000..55b07031 --- /dev/null +++ b/exercises/practice/matrix/.meta/template.create_test_table.j2 @@ -0,0 +1,47 @@ +DROP TABLE IF EXISTS tests; + +CREATE TABLE IF NOT EXISTS tests ( + -- uuid and description are taken from the test.toml file + uuid TEXT PRIMARY KEY, + description TEXT NOT NULL, + -- The following section is needed by the online test-runner + status TEXT DEFAULT 'fail', + message TEXT, + output TEXT, + test_code TEXT, + task_id INTEGER DEFAULT NULL, + -- Here are columns for the actual tests + property TEXT NOT NULL, + string TEXT NOT NULL, + "index" INTEGER NOT NULL, + expected TEXT NOT NULL -- json array of integers +); + +INSERT INTO + tests ( + uuid, + description, + property, + string, + "index", + expected + ) +VALUES +{%- for case in cases %} + ( + '{{ case["uuid"] }}', + '{{ case["description"] }}', + '{{ case["property"] }}', + '{{ case["input"]["string"] | replace("\n", "\\n") }}', + {{ case["input"]["index"] }}, + '{{ case["expected"] | tojson }}' +{%- if loop.last %} + ); +{%- else %} + ), +{%- endif %} +{%- endfor %} + +UPDATE tests +SET + string = REPLACE(string, '\n', CHAR(10)); diff --git a/exercises/practice/matrix/.meta/template.data.j2 b/exercises/practice/matrix/.meta/template.data.j2 new file mode 100644 index 00000000..48933f38 --- /dev/null +++ b/exercises/practice/matrix/.meta/template.data.j2 @@ -0,0 +1,3 @@ +{%- for case in cases -%} +{{ [case["property"], case["input"]["string"] | replace("\n", "\\n"), case["input"]["index"]] | tocsv }},"" +{% endfor %} diff --git a/exercises/practice/matrix/data.csv b/exercises/practice/matrix/data.csv index 4e22e78a..073a62f1 100644 --- a/exercises/practice/matrix/data.csv +++ b/exercises/practice/matrix/data.csv @@ -1,8 +1,8 @@ -"row","1",1, -"row","1 2\n3 4",2, -"row","1 2\n10 20",2, -"row","1 2 3\n4 5 6\n7 8 9\n8 7 6",4, -"column","1",1, -"column","1 2 3\n4 5 6\n7 8 9",3, -"column","1 2 3 4\n5 6 7 8\n9 8 7 6",4, -"column","89 1903 3\n18 3 1\n9 4 800",2, +"row","1",1,"" +"row","1 2\n3 4",2,"" +"row","1 2\n10 20",2,"" +"row","1 2 3\n4 5 6\n7 8 9\n8 7 6",4,"" +"column","1",1,"" +"column","1 2 3\n4 5 6\n7 8 9",3,"" +"column","1 2 3 4\n5 6 7 8\n9 8 7 6",4,"" +"column","89 1903 3\n18 3 1\n9 4 800",2,"" diff --git a/exercises/practice/meetup/.meta/template.data.j2 b/exercises/practice/meetup/.meta/template.data.j2 new file mode 100644 index 00000000..0dd490bb --- /dev/null +++ b/exercises/practice/meetup/.meta/template.data.j2 @@ -0,0 +1,3 @@ +{%- for case in cases -%} +{{ [case["input"]["year"], case["input"]["month"], case["input"]["week"], case["input"]["dayofweek"]] | tocsv }},"" +{% endfor %} diff --git a/exercises/practice/nucleotide-count/.meta/template.data.j2 b/exercises/practice/nucleotide-count/.meta/template.data.j2 new file mode 100644 index 00000000..3d6769d7 --- /dev/null +++ b/exercises/practice/nucleotide-count/.meta/template.data.j2 @@ -0,0 +1,3 @@ +{%- for case in cases -%} +"{{ case["input"]["strand"] }}","" +{% endfor %} diff --git a/exercises/practice/nucleotide-count/.meta/tests.toml b/exercises/practice/nucleotide-count/.meta/tests.toml index 7c55e53f..502021d8 100644 --- a/exercises/practice/nucleotide-count/.meta/tests.toml +++ b/exercises/practice/nucleotide-count/.meta/tests.toml @@ -23,3 +23,4 @@ description = "strand with multiple nucleotides" [b4c47851-ee9e-4b0a-be70-a86e343bd851] description = "strand with invalid nucleotides" +include = false diff --git a/exercises/practice/ocr-numbers/.meta/template.create_test_table.j2 b/exercises/practice/ocr-numbers/.meta/template.create_test_table.j2 new file mode 100644 index 00000000..b5798c44 --- /dev/null +++ b/exercises/practice/ocr-numbers/.meta/template.create_test_table.j2 @@ -0,0 +1,49 @@ +DROP TABLE IF EXISTS tests; + +CREATE TABLE IF NOT EXISTS tests ( + -- uuid and description are taken from the test.toml file + uuid TEXT PRIMARY KEY, + description TEXT NOT NULL, + -- The following section is needed by the online test-runner + status TEXT DEFAULT 'fail', + message TEXT, + output TEXT, + test_code TEXT, + task_id INTEGER DEFAULT NULL, + -- Here are columns for the actual tests + input TEXT NOT NULL, + expected_result TEXT, + expected_error TEXT +); + +INSERT INTO + tests ( + uuid, + description, + input, + expected_result, + expected_error + ) +VALUES +{%- for case in cases %} + ( + '{{ case["uuid"] }}', + '{{ case["description"] }}', + '{{ case["input"]["rows"] | join("\\n") }}', +{%- if not case["expect_error"] %} + '{{ case["expected"] }}', + NULL +{%- else %} + NULL, + '{{ case["expect_error_msg"] }}' +{%- endif %} +{%- if loop.last %} + ); +{%- else %} + ), +{%- endif %} +{%- endfor %} + +UPDATE tests +SET + input = REPLACE(input, '\n', CHAR(10)); diff --git a/exercises/practice/ocr-numbers/.meta/template.data.j2 b/exercises/practice/ocr-numbers/.meta/template.data.j2 new file mode 100644 index 00000000..9ae175c5 --- /dev/null +++ b/exercises/practice/ocr-numbers/.meta/template.data.j2 @@ -0,0 +1,3 @@ +{%- for case in cases -%} +"{{ case["input"]["rows"] | join("\\n") }}","","" +{% endfor %} diff --git a/exercises/practice/ocr-numbers/data.csv b/exercises/practice/ocr-numbers/data.csv index 4a71b4ab..e23ff824 100644 --- a/exercises/practice/ocr-numbers/data.csv +++ b/exercises/practice/ocr-numbers/data.csv @@ -1,17 +1,17 @@ -" _ \n| |\n|_|\n ",, -" \n |\n |\n ",, -" \n _\n |\n ",, -" _ \n| |\n ",, -" \n |\n |\n ",, -" _ _ _ _ \n | || | || | | || || |\n | ||_| ||_| | ||_||_|\n ",, -" _ _ _ \n | || | || | || || |\n | | _| ||_| | ||_||_|\n ",, -" _ \n _|\n|_ \n ",, -" _ \n _|\n _|\n ",, -" \n|_|\n |\n ",, -" _ \n|_ \n _|\n ",, -" _ \n|_ \n|_|\n ",, -" _ \n |\n |\n ",, -" _ \n|_|\n|_|\n ",, -" _ \n|_|\n _|\n ",, -" _ _ _ _ _ _ _ _ \n | _| _||_||_ |_ ||_||_|| |\n ||_ _| | _||_| ||_| _||_|\n ",, -" _ _ \n | _| _|\n ||_ _|\n \n _ _ \n|_||_ |_ \n | _||_|\n \n _ _ _ \n ||_||_|\n ||_| _|\n ",, +" _ \n| |\n|_|\n ","","" +" \n |\n |\n ","","" +" \n _\n |\n ","","" +" _ \n| |\n ","","" +" \n |\n |\n ","","" +" _ _ _ _ \n | || | || | | || || |\n | ||_| ||_| | ||_||_|\n ","","" +" _ _ _ \n | || | || | || || |\n | | _| ||_| | ||_||_|\n ","","" +" _ \n _|\n|_ \n ","","" +" _ \n _|\n _|\n ","","" +" \n|_|\n |\n ","","" +" _ \n|_ \n _|\n ","","" +" _ \n|_ \n|_|\n ","","" +" _ \n |\n |\n ","","" +" _ \n|_|\n|_|\n ","","" +" _ \n|_|\n _|\n ","","" +" _ _ _ _ _ _ _ _ \n | _| _||_||_ |_ ||_||_|| |\n ||_ _| | _||_| ||_| _||_|\n ","","" +" _ _ \n | _| _|\n ||_ _|\n \n _ _ \n|_||_ |_ \n | _||_|\n \n _ _ _ \n ||_||_|\n ||_| _|\n ","",""