From 7ce3f82025efaab6455851cce6016db3a9386be3 Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Thu, 13 Aug 2026 10:29:41 -0700 Subject: [PATCH 1/2] Remove the index from the test case loop; simplify the cases object MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summarized changes: ``` ยป g diff | grep '^[+-][^+-]' | sort | uniq -c 1 + "cases": cases, 1 - "cases": list(enumerate(cases)), 90 +{% for case in cases %} 90 -{% for idx, case in cases %} 1 -{%- if idx == 0 %} 60 - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip 28 - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip 1 +{%- if loop.first %} 60 + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip 28 + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip ``` --- bin/generate_tests | 2 +- exercises/practice/acronym/.meta/template.j2 | 4 ++-- exercises/practice/affine-cipher/.meta/template.j2 | 4 ++-- exercises/practice/all-your-base/.meta/template.j2 | 4 ++-- exercises/practice/allergies/.meta/template.j2 | 4 ++-- exercises/practice/anagram/.meta/template.j2 | 4 ++-- exercises/practice/armstrong-numbers/.meta/template.j2 | 4 ++-- exercises/practice/atbash-cipher/.meta/template.j2 | 4 ++-- exercises/practice/binary-search/.meta/template.j2 | 4 ++-- exercises/practice/bob/.meta/template.j2 | 4 ++-- exercises/practice/bottle-song/.meta/template.j2 | 4 ++-- exercises/practice/bowling/.meta/template.j2 | 4 ++-- exercises/practice/change/.meta/template.j2 | 4 ++-- exercises/practice/clock/.meta/template.j2 | 4 ++-- exercises/practice/collatz-conjecture/.meta/template.j2 | 4 ++-- exercises/practice/crypto-square/.meta/template.j2 | 4 ++-- exercises/practice/darts/.meta/template.j2 | 4 ++-- exercises/practice/diamond/.meta/template.j2 | 4 ++-- exercises/practice/difference-of-squares/.meta/template.j2 | 4 ++-- exercises/practice/dnd-character/.meta/template.j2 | 4 ++-- exercises/practice/eliuds-eggs/.meta/template.j2 | 4 ++-- exercises/practice/flower-field/.meta/template.j2 | 4 ++-- exercises/practice/food-chain/.meta/template.j2 | 4 ++-- exercises/practice/forth/.meta/template.j2 | 4 ++-- exercises/practice/game-of-life/.meta/template.j2 | 4 ++-- exercises/practice/gigasecond/.meta/template.j2 | 4 ++-- exercises/practice/grains/.meta/template.j2 | 4 ++-- exercises/practice/hamming/.meta/template.j2 | 4 ++-- exercises/practice/hello-world/.meta/template.j2 | 2 +- exercises/practice/house/.meta/template.j2 | 4 ++-- .../practice/intergalactic-transmission/.meta/template.j2 | 4 ++-- exercises/practice/isbn-verifier/.meta/template.j2 | 4 ++-- exercises/practice/isogram/.meta/template.j2 | 4 ++-- exercises/practice/kindergarten-garden/.meta/template.j2 | 4 ++-- exercises/practice/knapsack/.meta/template.j2 | 4 ++-- exercises/practice/largest-series-product/.meta/template.j2 | 4 ++-- exercises/practice/leap/.meta/template.j2 | 4 ++-- exercises/practice/line-up/.meta/template.j2 | 4 ++-- exercises/practice/list-ops/.meta/template.j2 | 4 ++-- exercises/practice/luhn/.meta/template.j2 | 4 ++-- exercises/practice/markdown/.meta/template.j2 | 4 ++-- exercises/practice/matching-brackets/.meta/template.j2 | 4 ++-- exercises/practice/meetup/.meta/template.j2 | 4 ++-- exercises/practice/nth-prime/.meta/template.j2 | 4 ++-- exercises/practice/nucleotide-count/.meta/template.j2 | 4 ++-- exercises/practice/ocr-numbers/.meta/template.j2 | 4 ++-- exercises/practice/palindrome-products/.meta/template.j2 | 4 ++-- exercises/practice/pangram/.meta/template.j2 | 4 ++-- exercises/practice/pascals-triangle/.meta/template.j2 | 4 ++-- exercises/practice/perfect-numbers/.meta/template.j2 | 4 ++-- exercises/practice/phone-number/.meta/template.j2 | 4 ++-- exercises/practice/pig-latin/.meta/template.j2 | 4 ++-- exercises/practice/poker/.meta/template.j2 | 4 ++-- exercises/practice/prime-factors/.meta/template.j2 | 4 ++-- exercises/practice/protein-translation/.meta/template.j2 | 4 ++-- exercises/practice/proverb/.meta/template.j2 | 4 ++-- exercises/practice/pythagorean-triplet/.meta/template.j2 | 4 ++-- exercises/practice/rail-fence-cipher/.meta/template.j2 | 4 ++-- exercises/practice/raindrops/.meta/template.j2 | 4 ++-- exercises/practice/rational-numbers/.meta/template.j2 | 4 ++-- exercises/practice/rectangles/.meta/template.j2 | 4 ++-- exercises/practice/resistor-color-duo/.meta/template.j2 | 4 ++-- exercises/practice/resistor-color-trio/.meta/template.j2 | 4 ++-- exercises/practice/resistor-color/.meta/template.j2 | 4 ++-- exercises/practice/reverse-string/.meta/template.j2 | 4 ++-- exercises/practice/rna-transcription/.meta/template.j2 | 4 ++-- exercises/practice/roman-numerals/.meta/template.j2 | 4 ++-- exercises/practice/rotational-cipher/.meta/template.j2 | 4 ++-- exercises/practice/run-length-encoding/.meta/template.j2 | 4 ++-- exercises/practice/satellite/.meta/template.j2 | 4 ++-- exercises/practice/say/.meta/template.j2 | 4 ++-- exercises/practice/scrabble-score/.meta/template.j2 | 4 ++-- exercises/practice/secret-handshake/.meta/template.j2 | 4 ++-- exercises/practice/series/.meta/template.j2 | 4 ++-- exercises/practice/sieve/.meta/template.j2 | 4 ++-- exercises/practice/space-age/.meta/template.j2 | 4 ++-- exercises/practice/spiral-matrix/.meta/template.j2 | 4 ++-- exercises/practice/square-root/.meta/template.j2 | 4 ++-- exercises/practice/sublist/.meta/template.j2 | 4 ++-- exercises/practice/sum-of-multiples/.meta/template.j2 | 4 ++-- exercises/practice/swift-scheduling/.meta/template.j2 | 4 ++-- exercises/practice/tournament/.meta/template.j2 | 4 ++-- exercises/practice/transpose/.meta/template.j2 | 4 ++-- exercises/practice/triangle/.meta/template.j2 | 4 ++-- exercises/practice/twelve-days/.meta/template.j2 | 4 ++-- exercises/practice/two-bucket/.meta/template.j2 | 4 ++-- exercises/practice/two-fer/.meta/template.j2 | 4 ++-- exercises/practice/variable-length-quantity/.meta/template.j2 | 4 ++-- exercises/practice/word-count/.meta/template.j2 | 4 ++-- exercises/practice/wordy/.meta/template.j2 | 4 ++-- exercises/practice/yacht/.meta/template.j2 | 4 ++-- 91 files changed, 180 insertions(+), 180 deletions(-) diff --git a/bin/generate_tests b/bin/generate_tests index 319a06b3..b3059fa9 100755 --- a/bin/generate_tests +++ b/bin/generate_tests @@ -119,7 +119,7 @@ def generate(specs: pathlib.Path, exercise: pathlib.Path) -> None: """ ).strip() data = { - "cases": list(enumerate(cases)), + "cases": cases, "header": header, "solution": json.loads((exercise / ".meta/config.json").read_text())["files"]["solution"][0] } diff --git a/exercises/practice/acronym/.meta/template.j2 b/exercises/practice/acronym/.meta/template.j2 index be5ccabc..f0541652 100644 --- a/exercises/practice/acronym/.meta/template.j2 +++ b/exercises/practice/acronym/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} "{{ case["input"]["phrase"] }}" assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/affine-cipher/.meta/template.j2 b/exercises/practice/affine-cipher/.meta/template.j2 index 5f8a98c9..bd49c498 100644 --- a/exercises/practice/affine-cipher/.meta/template.j2 +++ b/exercises/practice/affine-cipher/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["property"] }} {{ case["input"]["key"]["a"] }} {{ case["input"]["key"]["b"] }} "{{ case["input"]["phrase"] }}" {%- if case["expect_error"] %} assert_failure diff --git a/exercises/practice/all-your-base/.meta/template.j2 b/exercises/practice/all-your-base/.meta/template.j2 index 53f1a60c..b4018235 100644 --- a/exercises/practice/all-your-base/.meta/template.j2 +++ b/exercises/practice/all-your-base/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test '{{ case["description"] }}' { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["inputBase"] }} "{{ case["input"]["digits"] | join(" ") }}" {{ case["input"]["outputBase"] }} {%- if case["expect_error"] %} assert_failure diff --git a/exercises/practice/allergies/.meta/template.j2 b/exercises/practice/allergies/.meta/template.j2 index 7cb97b52..37500b68 100644 --- a/exercises/practice/allergies/.meta/template.j2 +++ b/exercises/practice/allergies/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test {{ case["descriptions"] | join(":") | quote }} { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip {%- if case["property"] == "allergicTo" %} run bash {{ solution }} {{ case["input"]["score"] }} allergic_to {{ case["input"]["item"] }} diff --git a/exercises/practice/anagram/.meta/template.j2 b/exercises/practice/anagram/.meta/template.j2 index 7108c639..871104ad 100644 --- a/exercises/practice/anagram/.meta/template.j2 +++ b/exercises/practice/anagram/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} "{{ case["input"]["subject"] }}" "{{ case["input"]["candidates"] | join(" ") }}" assert_success {%- if case["expected"] | length == 0 %} diff --git a/exercises/practice/armstrong-numbers/.meta/template.j2 b/exercises/practice/armstrong-numbers/.meta/template.j2 index e72d8732..4398346b 100644 --- a/exercises/practice/armstrong-numbers/.meta/template.j2 +++ b/exercises/practice/armstrong-numbers/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test '{{ case["description"] }}' { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["number"] }} assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/atbash-cipher/.meta/template.j2 b/exercises/practice/atbash-cipher/.meta/template.j2 index bd7f4581..d4da9fb2 100644 --- a/exercises/practice/atbash-cipher/.meta/template.j2 +++ b/exercises/practice/atbash-cipher/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["property"] }} "{{ case["input"]["phrase"] }}" assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/binary-search/.meta/template.j2 b/exercises/practice/binary-search/.meta/template.j2 index 52731784..eb4af535 100644 --- a/exercises/practice/binary-search/.meta/template.j2 +++ b/exercises/practice/binary-search/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip {%- if case["expect_error"] %} expected="-1" {%- else %} diff --git a/exercises/practice/bob/.meta/template.j2 b/exercises/practice/bob/.meta/template.j2 index 71e0e18e..3572f2ba 100644 --- a/exercises/practice/bob/.meta/template.j2 +++ b/exercises/practice/bob/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} ${{ case["input"]["heyBob"] | repr }} assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/bottle-song/.meta/template.j2 b/exercises/practice/bottle-song/.meta/template.j2 index 08f917d4..7c02326b 100644 --- a/exercises/practice/bottle-song/.meta/template.j2 +++ b/exercises/practice/bottle-song/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test '{{ case["description"] }}' { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip expected="\ {{ case["expected"] | join("\n") }}" run bash {{ solution }} {{ case["input"]["startBottles"] }} {{ case["input"]["takeDown"] }} diff --git a/exercises/practice/bowling/.meta/template.j2 b/exercises/practice/bowling/.meta/template.j2 index d88d8e1a..88ea3d67 100644 --- a/exercises/practice/bowling/.meta/template.j2 +++ b/exercises/practice/bowling/.meta/template.j2 @@ -4,9 +4,9 @@ # shell script. We'll just pass in all the individual rolls # and expect the score (or error) as output. -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip {%- set args = [solution] + case["input"]["previousRolls"] %} {%- if case["property"] == "roll" %}{%- set args = args + [case["input"]["roll"]] %}{%- endif %} run bash {{ args | join(" ") }} diff --git a/exercises/practice/change/.meta/template.j2 b/exercises/practice/change/.meta/template.j2 index a2378a88..fb09661d 100644 --- a/exercises/practice/change/.meta/template.j2 +++ b/exercises/practice/change/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip {%- if case["expect_error"] %} expected="{{ case["expect_error_msg"] }}" {%- else %} diff --git a/exercises/practice/clock/.meta/template.j2 b/exercises/practice/clock/.meta/template.j2 index 955d19b7..80128a4c 100644 --- a/exercises/practice/clock/.meta/template.j2 +++ b/exercises/practice/clock/.meta/template.j2 @@ -16,9 +16,9 @@ # # The clock script will output the clock value in %H:%M format -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip {%- if case["property"] == "create" %} run bash {{ solution }} {{ case["input"]["hour"] }} {{ case["input"]["minute"] }} {%- elif case["property"] == "add" %} diff --git a/exercises/practice/collatz-conjecture/.meta/template.j2 b/exercises/practice/collatz-conjecture/.meta/template.j2 index eafc8927..917d0de8 100644 --- a/exercises/practice/collatz-conjecture/.meta/template.j2 +++ b/exercises/practice/collatz-conjecture/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["number"] }} {%- if case["expect_error"] %} assert_failure diff --git a/exercises/practice/crypto-square/.meta/template.j2 b/exercises/practice/crypto-square/.meta/template.j2 index f48630c7..1ad43703 100644 --- a/exercises/practice/crypto-square/.meta/template.j2 +++ b/exercises/practice/crypto-square/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} "{{ case["input"]["plaintext"] }}" assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/darts/.meta/template.j2 b/exercises/practice/darts/.meta/template.j2 index a15642f3..3d96d0c6 100644 --- a/exercises/practice/darts/.meta/template.j2 +++ b/exercises/practice/darts/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["x"] }} {{ case["input"]["y"] }} assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/diamond/.meta/template.j2 b/exercises/practice/diamond/.meta/template.j2 index 4213d18c..2101981a 100644 --- a/exercises/practice/diamond/.meta/template.j2 +++ b/exercises/practice/diamond/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip expected="$(cat << EOT {{ case["expected"] | join("\n") }} EOT diff --git a/exercises/practice/difference-of-squares/.meta/template.j2 b/exercises/practice/difference-of-squares/.meta/template.j2 index ee916d68..dda4eadd 100644 --- a/exercises/practice/difference-of-squares/.meta/template.j2 +++ b/exercises/practice/difference-of-squares/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["property"] | camel_to_snake | replace("difference_of_squares", "difference") }} {{ case["input"]["number"] }} diff --git a/exercises/practice/dnd-character/.meta/template.j2 b/exercises/practice/dnd-character/.meta/template.j2 index 47a83719..600f3b31 100644 --- a/exercises/practice/dnd-character/.meta/template.j2 +++ b/exercises/practice/dnd-character/.meta/template.j2 @@ -8,10 +8,10 @@ # ability modifier -{% for idx, case in cases %} +{% for case in cases %} {%- if case["property"] == "modifier" %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["property"] }} {{ case["input"]["score"] }} assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/eliuds-eggs/.meta/template.j2 b/exercises/practice/eliuds-eggs/.meta/template.j2 index 4d70ea51..ce67a49d 100644 --- a/exercises/practice/eliuds-eggs/.meta/template.j2 +++ b/exercises/practice/eliuds-eggs/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["number"] }} assert_success assert_output {{ case["expected"] }} diff --git a/exercises/practice/flower-field/.meta/template.j2 b/exercises/practice/flower-field/.meta/template.j2 index 0458cfff..c9df8f7f 100644 --- a/exercises/practice/flower-field/.meta/template.j2 +++ b/exercises/practice/flower-field/.meta/template.j2 @@ -4,9 +4,9 @@ join() { local IFS=$'\n' echo "$*" } -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip input=({% for line in case["input"]["garden"] %} "{{ line }}" {%- endfor %} diff --git a/exercises/practice/food-chain/.meta/template.j2 b/exercises/practice/food-chain/.meta/template.j2 index 004c6134..9b8bb600 100644 --- a/exercises/practice/food-chain/.meta/template.j2 +++ b/exercises/practice/food-chain/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test '{{ case["description"] }}' { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip expected="{{ case["expected"] | join("\n") }}" run bash {{ solution }} {{ case["input"]["startVerse"] }} {{ case["input"]["endVerse"] }} assert_success diff --git a/exercises/practice/forth/.meta/template.j2 b/exercises/practice/forth/.meta/template.j2 index 0361a269..93522106 100644 --- a/exercises/practice/forth/.meta/template.j2 +++ b/exercises/practice/forth/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["descriptions"] | join(": ") }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} < "$MD_FILE" {{ case["input"]["markdown"] }} END diff --git a/exercises/practice/matching-brackets/.meta/template.j2 b/exercises/practice/matching-brackets/.meta/template.j2 index a9cd1c52..097e3ea8 100644 --- a/exercises/practice/matching-brackets/.meta/template.j2 +++ b/exercises/practice/matching-brackets/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} "{{ case["input"]["value"] }}" assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/meetup/.meta/template.j2 b/exercises/practice/meetup/.meta/template.j2 index 5d378440..907249e2 100644 --- a/exercises/practice/meetup/.meta/template.j2 +++ b/exercises/practice/meetup/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["year"] }} {{ case["input"]["month"] }} {{ case["input"]["week"] }} {{ case["input"]["dayofweek"] }} assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/nth-prime/.meta/template.j2 b/exercises/practice/nth-prime/.meta/template.j2 index 40601bb1..7dfee487 100644 --- a/exercises/practice/nth-prime/.meta/template.j2 +++ b/exercises/practice/nth-prime/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["number"] }} {%- if case["expect_error"] %} assert_failure diff --git a/exercises/practice/nucleotide-count/.meta/template.j2 b/exercises/practice/nucleotide-count/.meta/template.j2 index c3b6322e..a67a2324 100644 --- a/exercises/practice/nucleotide-count/.meta/template.j2 +++ b/exercises/practice/nucleotide-count/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} "{{ case["input"]["strand"] }}" {%- if case["expect_error"] %} assert_failure diff --git a/exercises/practice/ocr-numbers/.meta/template.j2 b/exercises/practice/ocr-numbers/.meta/template.j2 index 4f63dc7e..80879387 100644 --- a/exercises/practice/ocr-numbers/.meta/template.j2 +++ b/exercises/practice/ocr-numbers/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} << INPUT {{ case["input"]["rows"] | join("\n") }} INPUT diff --git a/exercises/practice/palindrome-products/.meta/template.j2 b/exercises/practice/palindrome-products/.meta/template.j2 index d42b0d70..2a9988ef 100644 --- a/exercises/practice/palindrome-products/.meta/template.j2 +++ b/exercises/practice/palindrome-products/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["property"] }} {{ case["input"]["min"] }} {{ case["input"]["max"] }} {%- if case["expect_error"] %} assert_failure diff --git a/exercises/practice/pangram/.meta/template.j2 b/exercises/practice/pangram/.meta/template.j2 index 6a39f981..b0d9e98c 100644 --- a/exercises/practice/pangram/.meta/template.j2 +++ b/exercises/practice/pangram/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} '{{ case["input"]["sentence"] }}' assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/pascals-triangle/.meta/template.j2 b/exercises/practice/pascals-triangle/.meta/template.j2 index b7808902..20d3c6ca 100644 --- a/exercises/practice/pascals-triangle/.meta/template.j2 +++ b/exercises/practice/pascals-triangle/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip expected=$(cat < 10000 %} # This test is very time-consuming for a brute force solution. diff --git a/exercises/practice/rail-fence-cipher/.meta/template.j2 b/exercises/practice/rail-fence-cipher/.meta/template.j2 index e4c28337..80cdbad1 100644 --- a/exercises/practice/rail-fence-cipher/.meta/template.j2 +++ b/exercises/practice/rail-fence-cipher/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip {%- if case["property"] == "encode" %} run bash {{ solution }} -e {{ case["input"]["rails"] }} "{{ case["input"]["msg"] }}" {%- else %} diff --git a/exercises/practice/raindrops/.meta/template.j2 b/exercises/practice/raindrops/.meta/template.j2 index 634b62c9..03ed4d44 100644 --- a/exercises/practice/raindrops/.meta/template.j2 +++ b/exercises/practice/raindrops/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["number"] }} assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/rational-numbers/.meta/template.j2 b/exercises/practice/rational-numbers/.meta/template.j2 index 70a3c206..21d0c146 100644 --- a/exercises/practice/rational-numbers/.meta/template.j2 +++ b/exercises/practice/rational-numbers/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip {%- if case["property"] in ["add", "sub", "mul", "div"] %} {%- set op = {"add": "+", "sub": "-", "mul": "*", "div": "/"}[case["property"]] %} {%- set args = [op, case["input"]["r1"] | join("/"), case["input"]["r2"] | join("/")] %} diff --git a/exercises/practice/rectangles/.meta/template.j2 b/exercises/practice/rectangles/.meta/template.j2 index 8448e383..27db296b 100644 --- a/exercises/practice/rectangles/.meta/template.j2 +++ b/exercises/practice/rectangles/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip {%- if case["description"] == "no rows" %} run bash {{ solution }} {%- elif case["description"] == "no columns" %} diff --git a/exercises/practice/resistor-color-duo/.meta/template.j2 b/exercises/practice/resistor-color-duo/.meta/template.j2 index 401be911..5de1c131 100644 --- a/exercises/practice/resistor-color-duo/.meta/template.j2 +++ b/exercises/practice/resistor-color-duo/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["colors"] | join(" ") }} {%- if case["expect_error"] %} {#- The error message from the canonical data is not used. #} diff --git a/exercises/practice/resistor-color-trio/.meta/template.j2 b/exercises/practice/resistor-color-trio/.meta/template.j2 index 13c353e3..657d4046 100644 --- a/exercises/practice/resistor-color-trio/.meta/template.j2 +++ b/exercises/practice/resistor-color-trio/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} "{{ case["input"]["colors"] | join('" "') }}" assert_success assert_output "{{ case["expected"]["value"] }} {{ case["expected"]["unit"] }}" diff --git a/exercises/practice/resistor-color/.meta/template.j2 b/exercises/practice/resistor-color/.meta/template.j2 index 4f67c6aa..b31655c1 100644 --- a/exercises/practice/resistor-color/.meta/template.j2 +++ b/exercises/practice/resistor-color/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["descriptions"] | join(" -> ") }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip {%- if case["property"] == "colorCode" %} run bash {{ solution }} code {{ case["input"]["color"] }} assert_success diff --git a/exercises/practice/reverse-string/.meta/template.j2 b/exercises/practice/reverse-string/.meta/template.j2 index 293f925d..fa8e9905 100644 --- a/exercises/practice/reverse-string/.meta/template.j2 +++ b/exercises/practice/reverse-string/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} "{{ case["input"]["value"] }}" assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/rna-transcription/.meta/template.j2 b/exercises/practice/rna-transcription/.meta/template.j2 index 37b96b6b..8c092b9e 100644 --- a/exercises/practice/rna-transcription/.meta/template.j2 +++ b/exercises/practice/rna-transcription/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} "{{ case["input"]["dna"] }}" assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/roman-numerals/.meta/template.j2 b/exercises/practice/roman-numerals/.meta/template.j2 index 634b62c9..03ed4d44 100644 --- a/exercises/practice/roman-numerals/.meta/template.j2 +++ b/exercises/practice/roman-numerals/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["number"] }} assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/rotational-cipher/.meta/template.j2 b/exercises/practice/rotational-cipher/.meta/template.j2 index f4b9b042..438de560 100644 --- a/exercises/practice/rotational-cipher/.meta/template.j2 +++ b/exercises/practice/rotational-cipher/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip expected="{{ case["expected"] }}" run bash {{ solution }} "{{ case["input"]["text"] }}" {{ case["input"]["shiftKey"] }} assert_success diff --git a/exercises/practice/run-length-encoding/.meta/template.j2 b/exercises/practice/run-length-encoding/.meta/template.j2 index 92e56d97..4f3e2bdc 100644 --- a/exercises/practice/run-length-encoding/.meta/template.j2 +++ b/exercises/practice/run-length-encoding/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["descriptions"] | join(": ") }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip expected="{{ case["expected"] }}" {%- if case["property"] == "consistency" %} run bash run_length_encoding.sh encode "{{ case["input"]["string"] }}" diff --git a/exercises/practice/satellite/.meta/template.j2 b/exercises/practice/satellite/.meta/template.j2 index bb8f90ab..d022d57c 100644 --- a/exercises/practice/satellite/.meta/template.j2 +++ b/exercises/practice/satellite/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} "{{ case["input"]["preorder"] | join(" ") }}" "{{ case["input"]["inorder"] | join(" ") }}" {%- if case["expect_error"] %} assert_failure diff --git a/exercises/practice/say/.meta/template.j2 b/exercises/practice/say/.meta/template.j2 index ececdb7e..f73ab09c 100644 --- a/exercises/practice/say/.meta/template.j2 +++ b/exercises/practice/say/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["number"] }} {%- if case["expect_error"] %} assert_failure diff --git a/exercises/practice/scrabble-score/.meta/template.j2 b/exercises/practice/scrabble-score/.meta/template.j2 index 9ddf6326..43e0e6f3 100644 --- a/exercises/practice/scrabble-score/.meta/template.j2 +++ b/exercises/practice/scrabble-score/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test '{{ case["description"] }}' { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} '{{ case["input"]["word"] }}' assert_success diff --git a/exercises/practice/secret-handshake/.meta/template.j2 b/exercises/practice/secret-handshake/.meta/template.j2 index 6f23946e..75d9ad2c 100644 --- a/exercises/practice/secret-handshake/.meta/template.j2 +++ b/exercises/practice/secret-handshake/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["number"] }} assert_success assert_output "{{ case["expected"] | join(",") }}" diff --git a/exercises/practice/series/.meta/template.j2 b/exercises/practice/series/.meta/template.j2 index 5a9c107e..44ef8cf4 100644 --- a/exercises/practice/series/.meta/template.j2 +++ b/exercises/practice/series/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip {%- if case["expect_error"] %} expected="{{ case["expect_error_msg"] }}" run bash {{ solution }} "{{ case["input"]["series"] }}" {{ case["input"]["sliceLength"] }} diff --git a/exercises/practice/sieve/.meta/template.j2 b/exercises/practice/sieve/.meta/template.j2 index b5a75996..5be7a90a 100644 --- a/exercises/practice/sieve/.meta/template.j2 +++ b/exercises/practice/sieve/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip expected="{{ case["expected"] | join(" ") }}" run bash {{ solution }} {{ case["input"]["limit"] }} assert_success diff --git a/exercises/practice/space-age/.meta/template.j2 b/exercises/practice/space-age/.meta/template.j2 index e07ccb93..bb9253a4 100644 --- a/exercises/practice/space-age/.meta/template.j2 +++ b/exercises/practice/space-age/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} "{{ case["input"]["planet"] }}" {{ case["input"]["seconds"] }} {%- if case["expect_error"] %} assert_failure diff --git a/exercises/practice/spiral-matrix/.meta/template.j2 b/exercises/practice/spiral-matrix/.meta/template.j2 index 60d20532..e353b912 100644 --- a/exercises/practice/spiral-matrix/.meta/template.j2 +++ b/exercises/practice/spiral-matrix/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["size"] }} expected="{{ case["expected"] | map("join", " ") | join("\n") }}" assert_success diff --git a/exercises/practice/square-root/.meta/template.j2 b/exercises/practice/square-root/.meta/template.j2 index 0008335c..ad5718df 100644 --- a/exercises/practice/square-root/.meta/template.j2 +++ b/exercises/practice/square-root/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} "{{ case["input"]["radicand"] }}" assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/sublist/.meta/template.j2 b/exercises/practice/sublist/.meta/template.j2 index 626127a6..a50b5766 100644 --- a/exercises/practice/sublist/.meta/template.j2 +++ b/exercises/practice/sublist/.meta/template.j2 @@ -2,9 +2,9 @@ # Lists are ordered and sequential: do not sort or reorder them. # Lists are given in JSON format. -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} "{{ case["input"]["listOne"] }}" "{{ case["input"]["listTwo"] }}" assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/sum-of-multiples/.meta/template.j2 b/exercises/practice/sum-of-multiples/.meta/template.j2 index 4dfd60c7..359a23cf 100644 --- a/exercises/practice/sum-of-multiples/.meta/template.j2 +++ b/exercises/practice/sum-of-multiples/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} {{ case["input"]["limit"] }} {{ case["input"]["factors"] | join(" ") }} assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/swift-scheduling/.meta/template.j2 b/exercises/practice/swift-scheduling/.meta/template.j2 index 8c43bfc5..5e3766a4 100644 --- a/exercises/practice/swift-scheduling/.meta/template.j2 +++ b/exercises/practice/swift-scheduling/.meta/template.j2 @@ -1,7 +1,7 @@ {{ header }} -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip run bash {{ solution }} "{{ case["input"]["description"] }}" "{{ case["input"]["meetingStart"] }}" assert_success assert_output "{{ case["expected"] }}" diff --git a/exercises/practice/tournament/.meta/template.j2 b/exercises/practice/tournament/.meta/template.j2 index 79f08c66..bd701caa 100644 --- a/exercises/practice/tournament/.meta/template.j2 +++ b/exercises/practice/tournament/.meta/template.j2 @@ -11,9 +11,9 @@ setup() { [[ -t 0 ]] && HAS_TTY=1 || HAS_TTY=0 } teardown() { rm -f "$INPUT_FILE"; } -{% for idx, case in cases %} +{% for case in cases %} @test "{{ case["description"] }}" { - {% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip + {% if loop.first %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip input=$( cat < Date: Thu, 13 Aug 2026 10:31:05 -0700 Subject: [PATCH 2/2] Run the generator --- exercises/practice/dnd-character/dnd_character.bats | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/exercises/practice/dnd-character/dnd_character.bats b/exercises/practice/dnd-character/dnd_character.bats index 1ea243f5..12e3d035 100644 --- a/exercises/practice/dnd-character/dnd_character.bats +++ b/exercises/practice/dnd-character/dnd_character.bats @@ -1,8 +1,7 @@ #!/usr/bin/env bats load bats-extra -# generated on 2026-06-29T18:26:21+00:00 -# local version: 2.0.0.0 +# generated on 2026-08-13T17:30:08+00:00 # usage: dnd_character.sh modifier n # -> output expected modifier