Skip to content

Commit f65d6c0

Browse files
authored
[pythagorean-triplet] Add a Jinja test template (#856)
[no important files changed]
1 parent 8d1ed39 commit f65d6c0

3 files changed

Lines changed: 71 additions & 31 deletions

File tree

bin/validate_one_exercise

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,12 @@ solution=$(jq -r '.files.example[0]' "$config")
2828
# Ensure each exercise has the expected number of commented-out skip lines
2929
case ${exercise} in
3030
hello-world) expected=0 ;;
31-
pythagorean-triplet) expected=2 ;;
3231
*) expected=1 ;;
3332
esac
3433
# a PCRE: the `\Q...\E` defines a literal segment
3534
skip_re='^\s*#+\s*\Q[[ $BATS_RUN_SKIPPED == "true" ]] || skip\E$'
3635
num_skip_comments=$(grep -cP "${skip_re}" "${tests}") || true
37-
(( num_skip_comments == expected )) || die "There should be exactly $expected commented skip directive in ${tests}"
36+
(( num_skip_comments == expected )) || die "There should be exactly $expected commented skip directive(s) in ${tests}"
3837

3938
echo "Processing $exercise"
4039

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{{ header }}
2+
{% for idx, case in cases %}
3+
@test "{{ case["description"] }}" {
4+
{% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip
5+
{%- if case["input"]["n"] > 10000 %}
6+
7+
# This test is very time-consuming for a brute force solution.
8+
# Remove the skip and run only for extra credit (or punishment).
9+
[[ $RUN_HARD_TEST == "true" ]] || skip
10+
11+
{%- endif %}
12+
run bash {{ solution }} {{ case["input"]["n"] }}
13+
assert_success
14+
actual=$( sort -t, -n -k1,1 <<< "$output" )
15+
expected=$(cat <<'END_EXPECTED'
16+
{{ case["expected"] | map("join", ",") | join("\n") }}
17+
END_EXPECTED
18+
)
19+
assert_equal "$actual" "$expected"
20+
}
21+
{% endfor %}
Lines changed: 49 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
#!/usr/bin/env bats
22
load bats-extra
33

4-
# local version: 1.0.0.0
5-
6-
# Output your triplets, comma-separated, one per line.
7-
4+
# generated on 2026-06-29T06:52:43+00:00
5+
# local version: 2.0.0.0
86

97
@test "triplets whose sum is 12" {
10-
#[[ $BATS_RUN_SKIPPED == "true" ]] || skip
8+
# [[ $BATS_RUN_SKIPPED == "true" ]] || skip
119
run bash pythagorean_triplet.sh 12
1210
assert_success
1311
actual=$( sort -t, -n -k1,1 <<< "$output" )
14-
expected="3,4,5"
12+
expected=$(cat <<'END_EXPECTED'
13+
3,4,5
14+
END_EXPECTED
15+
)
1516
assert_equal "$actual" "$expected"
1617
}
1718

@@ -20,7 +21,10 @@ load bats-extra
2021
run bash pythagorean_triplet.sh 108
2122
assert_success
2223
actual=$( sort -t, -n -k1,1 <<< "$output" )
23-
expected="27,36,45"
24+
expected=$(cat <<'END_EXPECTED'
25+
27,36,45
26+
END_EXPECTED
27+
)
2428
assert_equal "$actual" "$expected"
2529
}
2630

@@ -29,26 +33,35 @@ load bats-extra
2933
run bash pythagorean_triplet.sh 1000
3034
assert_success
3135
actual=$( sort -t, -n -k1,1 <<< "$output" )
32-
expected="200,375,425"
36+
expected=$(cat <<'END_EXPECTED'
37+
200,375,425
38+
END_EXPECTED
39+
)
3340
assert_equal "$actual" "$expected"
3441
}
3542

3643
@test "no matching triplets for 1001" {
3744
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
3845
run bash pythagorean_triplet.sh 1001
3946
assert_success
40-
refute_output
41-
}
47+
actual=$( sort -t, -n -k1,1 <<< "$output" )
48+
expected=$(cat <<'END_EXPECTED'
4249
43-
# Note: using ANSI-C Quoting here
44-
# see https://www.gnu.org/software/bash/manual/bash.html#ANSI_002dC-Quoting
50+
END_EXPECTED
51+
)
52+
assert_equal "$actual" "$expected"
53+
}
4554

4655
@test "returns all matching triplets" {
4756
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
4857
run bash pythagorean_triplet.sh 90
4958
assert_success
5059
actual=$( sort -t, -n -k1,1 <<< "$output" )
51-
expected=$'9,40,41\n15,36,39'
60+
expected=$(cat <<'END_EXPECTED'
61+
9,40,41
62+
15,36,39
63+
END_EXPECTED
64+
)
5265
assert_equal "$actual" "$expected"
5366
}
5467

@@ -57,29 +70,36 @@ load bats-extra
5770
run bash pythagorean_triplet.sh 840
5871
assert_success
5972
actual=$( sort -t, -n -k1,1 <<< "$output" )
60-
expected="40,399,401
73+
expected=$(cat <<'END_EXPECTED'
74+
40,399,401
6175
56,390,394
6276
105,360,375
6377
120,350,370
6478
140,336,364
6579
168,315,357
6680
210,280,350
67-
240,252,348"
81+
240,252,348
82+
END_EXPECTED
83+
)
6884
assert_equal "$actual" "$expected"
6985
}
7086

71-
# This test is very time-consuming for a brute force solution.
72-
# Uncomment and run only for extra credit (or punishment).
87+
@test "triplets for large number" {
88+
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
7389

74-
#@test "triplets for large number" {
75-
# [[ $BATS_RUN_SKIPPED == "true" ]] || skip
76-
# run bash pythagorean_triplet.sh 30000
77-
# assert_success
78-
# actual=$( sort -t, -n -k1,1 <<< "$output" )
79-
# expected="1200,14375,14425
80-
#1875,14000,14125
81-
#5000,12000,13000
82-
#6000,11250,12750
83-
#7500,10000,12500"
84-
# assert_equal "$actual" "$expected"
85-
#}
90+
# This test is very time-consuming for a brute force solution.
91+
# Remove the skip and run only for extra credit (or punishment).
92+
[[ $RUN_HARD_TEST == "true" ]] || skip
93+
run bash pythagorean_triplet.sh 30000
94+
assert_success
95+
actual=$( sort -t, -n -k1,1 <<< "$output" )
96+
expected=$(cat <<'END_EXPECTED'
97+
1200,14375,14425
98+
1875,14000,14125
99+
5000,12000,13000
100+
6000,11250,12750
101+
7500,10000,12500
102+
END_EXPECTED
103+
)
104+
assert_equal "$actual" "$expected"
105+
}

0 commit comments

Comments
 (0)