Skip to content

Commit 6e3d2d4

Browse files
committed
[satellite] Add a Jinja test template
1 parent 8d1ed39 commit 6e3d2d4

3 files changed

Lines changed: 91 additions & 20 deletions

File tree

exercises/practice/satellite/.meta/example.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ validate() {
4545

4646
for elem in "${_preorder[@]}"; do
4747
if [[ ${seen["$elem"]} ]]; then
48-
die "Traversals must contain unique elements"
48+
die "Traversals must contain unique items"
4949
fi
5050
seen["$elem"]=1
5151
if (( $(indexOf "$elem" "${_inorder[@]}") == -1 )); then
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{{ header }}
2+
{% for idx, case in cases %}
3+
@test "{{ case["description"] }}" {
4+
{% if idx == 0 %}# {% endif %}[[ $BATS_RUN_SKIPPED == "true" ]] || skip
5+
run bash {{ solution }} "{{ case["input"]["preorder"] | join(" ") }}" "{{ case["input"]["inorder"] | join(" ") }}"
6+
{%- if case["expect_error"] %}
7+
assert_failure
8+
shopt -s nocasematch
9+
assert_output "{{ case["expect_error_msg"] }}"
10+
{%- else %}
11+
assert_success
12+
expectedJson=$(cat << END_JSON
13+
{{ case["expected"] | tojson(separators=None, indent=4) | indent(4, first=True) }}
14+
END_JSON
15+
)
16+
# compare without spaces
17+
[[ "${output//[[:space:]]/}" == "${expectedJson//[[:space:]]/}" ]]
18+
{%- endif %}
19+
}
20+
{% endfor %}

exercises/practice/satellite/satellite.bats

Lines changed: 70 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,61 @@
11
#!/usr/bin/env bats
22
load bats-extra
33

4+
# generated on 2026-06-28T23:19:01+00:00
45
# local version: 2.0.0.0
56

67
@test "Empty tree" {
7-
#[[ $BATS_RUN_SKIPPED == "true" ]] || skip
8+
# [[ $BATS_RUN_SKIPPED == "true" ]] || skip
89
run bash satellite.sh "" ""
910
assert_success
10-
[[ $output = "{}" ]]
11+
expectedJson=$(cat << END_JSON
12+
{}
13+
END_JSON
14+
)
15+
# compare without spaces
16+
[[ "${output//[[:space:]]/}" == "${expectedJson//[[:space:]]/}" ]]
1117
}
1218

1319
@test "Tree with one item" {
1420
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
1521
run bash satellite.sh "a" "a"
1622
assert_success
17-
expected='{"v": "a", "l": {}, "r": {}}'
18-
assert_output "$expected"
23+
expectedJson=$(cat << END_JSON
24+
{
25+
"v": "a",
26+
"l": {},
27+
"r": {}
28+
}
29+
END_JSON
30+
)
31+
# compare without spaces
32+
[[ "${output//[[:space:]]/}" == "${expectedJson//[[:space:]]/}" ]]
1933
}
2034

2135
@test "Tree with many items" {
2236
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
2337
run bash satellite.sh "a i x f r" "i a f x r"
2438
assert_success
25-
2639
expectedJson=$(cat << END_JSON
27-
{"v": "a",
28-
"l": {"v": "i", "l": {}, "r": {}},
29-
"r": {"v": "x",
30-
"l": {"v": "f", "l": {}, "r": {}},
31-
"r": {"v": "r", "l": {}, "r": {}}
40+
{
41+
"v": "a",
42+
"l": {
43+
"v": "i",
44+
"l": {},
45+
"r": {}
46+
},
47+
"r": {
48+
"v": "x",
49+
"l": {
50+
"v": "f",
51+
"l": {},
52+
"r": {}
53+
},
54+
"r": {
55+
"v": "r",
56+
"l": {},
57+
"r": {}
58+
}
3259
}
3360
}
3461
END_JSON
@@ -47,18 +74,18 @@ END_JSON
4774

4875
@test "Reject inconsistent traversals of same length" {
4976
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
50-
run bash satellite.sh "a b c" "x y z"
77+
run bash satellite.sh "x y z" "a b c"
5178
assert_failure
5279
shopt -s nocasematch
5380
assert_output "traversals must have the same elements"
5481
}
5582

56-
@test "Reject traversals with repeated elements" {
83+
@test "Reject traversals with repeated items" {
5784
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
5885
run bash satellite.sh "a b a" "b a a"
5986
assert_failure
6087
shopt -s nocasematch
61-
assert_output "traversals must contain unique elements"
88+
assert_output "traversals must contain unique items"
6289
}
6390

6491
@test "A degenerate binary tree" {
@@ -72,7 +99,11 @@ END_JSON
7299
"v": "b",
73100
"l": {
74101
"v": "c",
75-
"l": { "v": "d", "l": {}, "r": {} },
102+
"l": {
103+
"v": "d",
104+
"l": {},
105+
"r": {}
106+
},
76107
"r": {}
77108
},
78109
"r": {}
@@ -99,7 +130,11 @@ END_JSON
99130
"r": {
100131
"v": "c",
101132
"l": {},
102-
"r": { "v": "d", "l": {}, "r": {} }
133+
"r": {
134+
"v": "d",
135+
"l": {},
136+
"r": {}
137+
}
103138
}
104139
}
105140
}
@@ -120,17 +155,33 @@ END_JSON
120155
"v": "b",
121156
"l": {
122157
"v": "d",
123-
"l": { "v": "g", "l": {}, "r": {} },
124-
"r": { "v": "h", "l": {}, "r": {} }
158+
"l": {
159+
"v": "g",
160+
"l": {},
161+
"r": {}
162+
},
163+
"r": {
164+
"v": "h",
165+
"l": {},
166+
"r": {}
167+
}
125168
},
126169
"r": {}
127170
},
128171
"r": {
129172
"v": "c",
130-
"l": { "v": "e", "l": {}, "r": {} },
173+
"l": {
174+
"v": "e",
175+
"l": {},
176+
"r": {}
177+
},
131178
"r": {
132179
"v": "f",
133-
"l": { "v": "i", "l": {}, "r": {} },
180+
"l": {
181+
"v": "i",
182+
"l": {},
183+
"r": {}
184+
},
134185
"r": {}
135186
}
136187
}

0 commit comments

Comments
 (0)