From 41533855c02e104adc6d008b90c4bee9752df063 Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Mon, 2 Nov 2026 13:38:08 -0800 Subject: [PATCH] [all-your-base allergies alphametics anagram atbash-cipher] Use a custom error message on failed tests --- .../practice/all-your-base/.meta/template.j2 | 6 +- .../all-your-base/all_your_base_test.gd | 126 ++++++++-- .../practice/allergies/.meta/template.j2 | 11 +- .../practice/allergies/allergies_test.gd | 230 +++++++++++++----- .../practice/alphametics/.meta/template.j2 | 6 +- .../practice/alphametics/alphametics_test.gd | 48 +++- exercises/practice/anagram/.meta/template.j2 | 6 +- exercises/practice/anagram/anagram_test.gd | 72 +++--- .../practice/atbash-cipher/.meta/template.j2 | 4 +- .../atbash-cipher/atbash_cipher_test.gd | 28 +-- 10 files changed, 388 insertions(+), 149 deletions(-) diff --git a/exercises/practice/all-your-base/.meta/template.j2 b/exercises/practice/all-your-base/.meta/template.j2 index 11de0490..4bafe489 100644 --- a/exercises/practice/all-your-base/.meta/template.j2 +++ b/exercises/practice/all-your-base/.meta/template.j2 @@ -6,7 +6,11 @@ func test_{{ case.func_name }}(solution_script): {%- else %} var want = null {%- endif %} - return [got, want] + return [ + got, + want, + '{{ case.property | camel_to_snake }}({{ case.input.inputBase | quote }}, {{ case.input.digits | quote }}, {{ case.input.outputBase | quote }}) = %s, but want %s' % [got, want] + ] {% endfor %} diff --git a/exercises/practice/all-your-base/all_your_base_test.gd b/exercises/practice/all-your-base/all_your_base_test.gd index a75e2cf1..dfec8d37 100644 --- a/exercises/practice/all-your-base/all_your_base_test.gd +++ b/exercises/practice/all-your-base/all_your_base_test.gd @@ -1,124 +1,208 @@ func test_single_bit_one_to_decimal(solution_script): var got = solution_script.rebase(2, [1], 10) var want = [1] - return [got, want] + return [ + got, + want, + 'rebase(2, [1], 10) = %s, but want %s' % [got, want] + ] func test_binary_to_single_decimal(solution_script): var got = solution_script.rebase(2, [1, 0, 1], 10) var want = [5] - return [got, want] + return [ + got, + want, + 'rebase(2, [1, 0, 1], 10) = %s, but want %s' % [got, want] + ] func test_single_decimal_to_binary(solution_script): var got = solution_script.rebase(10, [5], 2) var want = [1, 0, 1] - return [got, want] + return [ + got, + want, + 'rebase(10, [5], 2) = %s, but want %s' % [got, want] + ] func test_binary_to_multiple_decimal(solution_script): var got = solution_script.rebase(2, [1, 0, 1, 0, 1, 0], 10) var want = [4, 2] - return [got, want] + return [ + got, + want, + 'rebase(2, [1, 0, 1, 0, 1, 0], 10) = %s, but want %s' % [got, want] + ] func test_decimal_to_binary(solution_script): var got = solution_script.rebase(10, [4, 2], 2) var want = [1, 0, 1, 0, 1, 0] - return [got, want] + return [ + got, + want, + 'rebase(10, [4, 2], 2) = %s, but want %s' % [got, want] + ] func test_trinary_to_hexadecimal(solution_script): var got = solution_script.rebase(3, [1, 1, 2, 0], 16) var want = [2, 10] - return [got, want] + return [ + got, + want, + 'rebase(3, [1, 1, 2, 0], 16) = %s, but want %s' % [got, want] + ] func test_hexadecimal_to_trinary(solution_script): var got = solution_script.rebase(16, [2, 10], 3) var want = [1, 1, 2, 0] - return [got, want] + return [ + got, + want, + 'rebase(16, [2, 10], 3) = %s, but want %s' % [got, want] + ] func test_15_bit_integer(solution_script): var got = solution_script.rebase(97, [3, 46, 60], 73) var want = [6, 10, 45] - return [got, want] + return [ + got, + want, + 'rebase(97, [3, 46, 60], 73) = %s, but want %s' % [got, want] + ] func test_empty_list(solution_script): var got = solution_script.rebase(2, [], 10) var want = [0] - return [got, want] + return [ + got, + want, + 'rebase(2, [], 10) = %s, but want %s' % [got, want] + ] func test_single_zero(solution_script): var got = solution_script.rebase(10, [0], 2) var want = [0] - return [got, want] + return [ + got, + want, + 'rebase(10, [0], 2) = %s, but want %s' % [got, want] + ] func test_multiple_zeros(solution_script): var got = solution_script.rebase(10, [0, 0, 0], 2) var want = [0] - return [got, want] + return [ + got, + want, + 'rebase(10, [0, 0, 0], 2) = %s, but want %s' % [got, want] + ] func test_leading_zeros(solution_script): var got = solution_script.rebase(7, [0, 6, 0], 10) var want = [4, 2] - return [got, want] + return [ + got, + want, + 'rebase(7, [0, 6, 0], 10) = %s, but want %s' % [got, want] + ] func test_input_base_is_one(solution_script): var got = solution_script.rebase(1, [0], 10) var want = null - return [got, want] + return [ + got, + want, + 'rebase(1, [0], 10) = %s, but want %s' % [got, want] + ] func test_input_base_is_zero(solution_script): var got = solution_script.rebase(0, [], 10) var want = null - return [got, want] + return [ + got, + want, + 'rebase(0, [], 10) = %s, but want %s' % [got, want] + ] func test_input_base_is_negative(solution_script): var got = solution_script.rebase(-2, [1], 10) var want = null - return [got, want] + return [ + got, + want, + 'rebase(-2, [1], 10) = %s, but want %s' % [got, want] + ] func test_negative_digit(solution_script): var got = solution_script.rebase(2, [1, -1, 1, 0, 1, 0], 10) var want = null - return [got, want] + return [ + got, + want, + 'rebase(2, [1, -1, 1, 0, 1, 0], 10) = %s, but want %s' % [got, want] + ] func test_invalid_positive_digit(solution_script): var got = solution_script.rebase(2, [1, 2, 1, 0, 1, 0], 10) var want = null - return [got, want] + return [ + got, + want, + 'rebase(2, [1, 2, 1, 0, 1, 0], 10) = %s, but want %s' % [got, want] + ] func test_output_base_is_one(solution_script): var got = solution_script.rebase(2, [1, 0, 1, 0, 1, 0], 1) var want = null - return [got, want] + return [ + got, + want, + 'rebase(2, [1, 0, 1, 0, 1, 0], 1) = %s, but want %s' % [got, want] + ] func test_output_base_is_zero(solution_script): var got = solution_script.rebase(10, [7], 0) var want = null - return [got, want] + return [ + got, + want, + 'rebase(10, [7], 0) = %s, but want %s' % [got, want] + ] func test_output_base_is_negative(solution_script): var got = solution_script.rebase(2, [1], -7) var want = null - return [got, want] + return [ + got, + want, + 'rebase(2, [1], -7) = %s, but want %s' % [got, want] + ] func test_both_bases_are_negative(solution_script): var got = solution_script.rebase(-2, [1], -7) var want = null - return [got, want] + return [ + got, + want, + 'rebase(-2, [1], -7) = %s, but want %s' % [got, want] + ] diff --git a/exercises/practice/allergies/.meta/template.j2 b/exercises/practice/allergies/.meta/template.j2 index 8e3004fd..eca055b2 100644 --- a/exercises/practice/allergies/.meta/template.j2 +++ b/exercises/practice/allergies/.meta/template.j2 @@ -9,14 +9,19 @@ func _sorted(array): func test_{{ case.input.item }}_{{ case.func_name }}(allergies): allergies.score = {{ case.input.score }} - return [allergies.allergic_to("{{ case.input.item }}"), {{ case.expected | quote }}] + var got = allergies.allergic_to("{{ case.input.item }}") + var want = {{ case.expected | quote }} + return [got, want, "with score={{ case.input.score }}, allergic_to() == %s, but want %s" % [got, want]] {%- else %} func test_list_when_{{ case.func_name }}(allergies): allergies.score = {{ case.input.score }} + var got =_sorted(allergies.lst) + var want = _sorted({{ case.expected }}) return [ - _sorted(allergies.lst), - _sorted({{ case.expected }}) + got, + want, + "with score={{ case.input.score }}, lst\n got: %s\n want %s" % [got, want] ] {%- endif %} {% endfor %} diff --git a/exercises/practice/allergies/allergies_test.gd b/exercises/practice/allergies/allergies_test.gd index 46cd5abf..b5ec75eb 100644 --- a/exercises/practice/allergies/allergies_test.gd +++ b/exercises/practice/allergies/allergies_test.gd @@ -8,279 +8,389 @@ func _sorted(array): func test_eggs_not_allergic_to_anything(allergies): allergies.score = 0 - return [allergies.allergic_to("eggs"), false] + var got = allergies.allergic_to("eggs") + var want = false + return [got, want, "with score=0, allergic_to() == %s, but want %s" % [got, want]] func test_eggs_allergic_only_to_eggs(allergies): allergies.score = 1 - return [allergies.allergic_to("eggs"), true] + var got = allergies.allergic_to("eggs") + var want = true + return [got, want, "with score=1, allergic_to() == %s, but want %s" % [got, want]] func test_eggs_allergic_to_eggs_and_something_else(allergies): allergies.score = 3 - return [allergies.allergic_to("eggs"), true] + var got = allergies.allergic_to("eggs") + var want = true + return [got, want, "with score=3, allergic_to() == %s, but want %s" % [got, want]] func test_eggs_allergic_to_something_but_not_eggs(allergies): allergies.score = 2 - return [allergies.allergic_to("eggs"), false] + var got = allergies.allergic_to("eggs") + var want = false + return [got, want, "with score=2, allergic_to() == %s, but want %s" % [got, want]] func test_eggs_allergic_to_everything(allergies): allergies.score = 255 - return [allergies.allergic_to("eggs"), true] + var got = allergies.allergic_to("eggs") + var want = true + return [got, want, "with score=255, allergic_to() == %s, but want %s" % [got, want]] func test_peanuts_not_allergic_to_anything(allergies): allergies.score = 0 - return [allergies.allergic_to("peanuts"), false] + var got = allergies.allergic_to("peanuts") + var want = false + return [got, want, "with score=0, allergic_to() == %s, but want %s" % [got, want]] func test_peanuts_allergic_only_to_peanuts(allergies): allergies.score = 2 - return [allergies.allergic_to("peanuts"), true] + var got = allergies.allergic_to("peanuts") + var want = true + return [got, want, "with score=2, allergic_to() == %s, but want %s" % [got, want]] func test_peanuts_allergic_to_peanuts_and_something_else(allergies): allergies.score = 7 - return [allergies.allergic_to("peanuts"), true] + var got = allergies.allergic_to("peanuts") + var want = true + return [got, want, "with score=7, allergic_to() == %s, but want %s" % [got, want]] func test_peanuts_allergic_to_something_but_not_peanuts(allergies): allergies.score = 5 - return [allergies.allergic_to("peanuts"), false] + var got = allergies.allergic_to("peanuts") + var want = false + return [got, want, "with score=5, allergic_to() == %s, but want %s" % [got, want]] func test_peanuts_allergic_to_everything(allergies): allergies.score = 255 - return [allergies.allergic_to("peanuts"), true] + var got = allergies.allergic_to("peanuts") + var want = true + return [got, want, "with score=255, allergic_to() == %s, but want %s" % [got, want]] func test_shellfish_not_allergic_to_anything(allergies): allergies.score = 0 - return [allergies.allergic_to("shellfish"), false] + var got = allergies.allergic_to("shellfish") + var want = false + return [got, want, "with score=0, allergic_to() == %s, but want %s" % [got, want]] func test_shellfish_allergic_only_to_shellfish(allergies): allergies.score = 4 - return [allergies.allergic_to("shellfish"), true] + var got = allergies.allergic_to("shellfish") + var want = true + return [got, want, "with score=4, allergic_to() == %s, but want %s" % [got, want]] func test_shellfish_allergic_to_shellfish_and_something_else(allergies): allergies.score = 14 - return [allergies.allergic_to("shellfish"), true] + var got = allergies.allergic_to("shellfish") + var want = true + return [got, want, "with score=14, allergic_to() == %s, but want %s" % [got, want]] func test_shellfish_allergic_to_something_but_not_shellfish(allergies): allergies.score = 10 - return [allergies.allergic_to("shellfish"), false] + var got = allergies.allergic_to("shellfish") + var want = false + return [got, want, "with score=10, allergic_to() == %s, but want %s" % [got, want]] func test_shellfish_allergic_to_everything(allergies): allergies.score = 255 - return [allergies.allergic_to("shellfish"), true] + var got = allergies.allergic_to("shellfish") + var want = true + return [got, want, "with score=255, allergic_to() == %s, but want %s" % [got, want]] func test_strawberries_not_allergic_to_anything(allergies): allergies.score = 0 - return [allergies.allergic_to("strawberries"), false] + var got = allergies.allergic_to("strawberries") + var want = false + return [got, want, "with score=0, allergic_to() == %s, but want %s" % [got, want]] func test_strawberries_allergic_only_to_strawberries(allergies): allergies.score = 8 - return [allergies.allergic_to("strawberries"), true] + var got = allergies.allergic_to("strawberries") + var want = true + return [got, want, "with score=8, allergic_to() == %s, but want %s" % [got, want]] func test_strawberries_allergic_to_strawberries_and_something_else(allergies): allergies.score = 28 - return [allergies.allergic_to("strawberries"), true] + var got = allergies.allergic_to("strawberries") + var want = true + return [got, want, "with score=28, allergic_to() == %s, but want %s" % [got, want]] func test_strawberries_allergic_to_something_but_not_strawberries(allergies): allergies.score = 20 - return [allergies.allergic_to("strawberries"), false] + var got = allergies.allergic_to("strawberries") + var want = false + return [got, want, "with score=20, allergic_to() == %s, but want %s" % [got, want]] func test_strawberries_allergic_to_everything(allergies): allergies.score = 255 - return [allergies.allergic_to("strawberries"), true] + var got = allergies.allergic_to("strawberries") + var want = true + return [got, want, "with score=255, allergic_to() == %s, but want %s" % [got, want]] func test_tomatoes_not_allergic_to_anything(allergies): allergies.score = 0 - return [allergies.allergic_to("tomatoes"), false] + var got = allergies.allergic_to("tomatoes") + var want = false + return [got, want, "with score=0, allergic_to() == %s, but want %s" % [got, want]] func test_tomatoes_allergic_only_to_tomatoes(allergies): allergies.score = 16 - return [allergies.allergic_to("tomatoes"), true] + var got = allergies.allergic_to("tomatoes") + var want = true + return [got, want, "with score=16, allergic_to() == %s, but want %s" % [got, want]] func test_tomatoes_allergic_to_tomatoes_and_something_else(allergies): allergies.score = 56 - return [allergies.allergic_to("tomatoes"), true] + var got = allergies.allergic_to("tomatoes") + var want = true + return [got, want, "with score=56, allergic_to() == %s, but want %s" % [got, want]] func test_tomatoes_allergic_to_something_but_not_tomatoes(allergies): allergies.score = 40 - return [allergies.allergic_to("tomatoes"), false] + var got = allergies.allergic_to("tomatoes") + var want = false + return [got, want, "with score=40, allergic_to() == %s, but want %s" % [got, want]] func test_tomatoes_allergic_to_everything(allergies): allergies.score = 255 - return [allergies.allergic_to("tomatoes"), true] + var got = allergies.allergic_to("tomatoes") + var want = true + return [got, want, "with score=255, allergic_to() == %s, but want %s" % [got, want]] func test_chocolate_not_allergic_to_anything(allergies): allergies.score = 0 - return [allergies.allergic_to("chocolate"), false] + var got = allergies.allergic_to("chocolate") + var want = false + return [got, want, "with score=0, allergic_to() == %s, but want %s" % [got, want]] func test_chocolate_allergic_only_to_chocolate(allergies): allergies.score = 32 - return [allergies.allergic_to("chocolate"), true] + var got = allergies.allergic_to("chocolate") + var want = true + return [got, want, "with score=32, allergic_to() == %s, but want %s" % [got, want]] func test_chocolate_allergic_to_chocolate_and_something_else(allergies): allergies.score = 112 - return [allergies.allergic_to("chocolate"), true] + var got = allergies.allergic_to("chocolate") + var want = true + return [got, want, "with score=112, allergic_to() == %s, but want %s" % [got, want]] func test_chocolate_allergic_to_something_but_not_chocolate(allergies): allergies.score = 80 - return [allergies.allergic_to("chocolate"), false] + var got = allergies.allergic_to("chocolate") + var want = false + return [got, want, "with score=80, allergic_to() == %s, but want %s" % [got, want]] func test_chocolate_allergic_to_everything(allergies): allergies.score = 255 - return [allergies.allergic_to("chocolate"), true] + var got = allergies.allergic_to("chocolate") + var want = true + return [got, want, "with score=255, allergic_to() == %s, but want %s" % [got, want]] func test_pollen_not_allergic_to_anything(allergies): allergies.score = 0 - return [allergies.allergic_to("pollen"), false] + var got = allergies.allergic_to("pollen") + var want = false + return [got, want, "with score=0, allergic_to() == %s, but want %s" % [got, want]] func test_pollen_allergic_only_to_pollen(allergies): allergies.score = 64 - return [allergies.allergic_to("pollen"), true] + var got = allergies.allergic_to("pollen") + var want = true + return [got, want, "with score=64, allergic_to() == %s, but want %s" % [got, want]] func test_pollen_allergic_to_pollen_and_something_else(allergies): allergies.score = 224 - return [allergies.allergic_to("pollen"), true] + var got = allergies.allergic_to("pollen") + var want = true + return [got, want, "with score=224, allergic_to() == %s, but want %s" % [got, want]] func test_pollen_allergic_to_something_but_not_pollen(allergies): allergies.score = 160 - return [allergies.allergic_to("pollen"), false] + var got = allergies.allergic_to("pollen") + var want = false + return [got, want, "with score=160, allergic_to() == %s, but want %s" % [got, want]] func test_pollen_allergic_to_everything(allergies): allergies.score = 255 - return [allergies.allergic_to("pollen"), true] + var got = allergies.allergic_to("pollen") + var want = true + return [got, want, "with score=255, allergic_to() == %s, but want %s" % [got, want]] func test_cats_not_allergic_to_anything(allergies): allergies.score = 0 - return [allergies.allergic_to("cats"), false] + var got = allergies.allergic_to("cats") + var want = false + return [got, want, "with score=0, allergic_to() == %s, but want %s" % [got, want]] func test_cats_allergic_only_to_cats(allergies): allergies.score = 128 - return [allergies.allergic_to("cats"), true] + var got = allergies.allergic_to("cats") + var want = true + return [got, want, "with score=128, allergic_to() == %s, but want %s" % [got, want]] func test_cats_allergic_to_cats_and_something_else(allergies): allergies.score = 192 - return [allergies.allergic_to("cats"), true] + var got = allergies.allergic_to("cats") + var want = true + return [got, want, "with score=192, allergic_to() == %s, but want %s" % [got, want]] func test_cats_allergic_to_something_but_not_cats(allergies): allergies.score = 64 - return [allergies.allergic_to("cats"), false] + var got = allergies.allergic_to("cats") + var want = false + return [got, want, "with score=64, allergic_to() == %s, but want %s" % [got, want]] func test_cats_allergic_to_everything(allergies): allergies.score = 255 - return [allergies.allergic_to("cats"), true] + var got = allergies.allergic_to("cats") + var want = true + return [got, want, "with score=255, allergic_to() == %s, but want %s" % [got, want]] func test_list_when_no_allergies(allergies): allergies.score = 0 + var got =_sorted(allergies.lst) + var want = _sorted([]) return [ - _sorted(allergies.lst), - _sorted([]) + got, + want, + "with score=0, lst\n got: %s\n want %s" % [got, want] ] func test_list_when_just_eggs(allergies): allergies.score = 1 + var got =_sorted(allergies.lst) + var want = _sorted(['eggs']) return [ - _sorted(allergies.lst), - _sorted(['eggs']) + got, + want, + "with score=1, lst\n got: %s\n want %s" % [got, want] ] func test_list_when_just_peanuts(allergies): allergies.score = 2 + var got =_sorted(allergies.lst) + var want = _sorted(['peanuts']) return [ - _sorted(allergies.lst), - _sorted(['peanuts']) + got, + want, + "with score=2, lst\n got: %s\n want %s" % [got, want] ] func test_list_when_just_strawberries(allergies): allergies.score = 8 + var got =_sorted(allergies.lst) + var want = _sorted(['strawberries']) return [ - _sorted(allergies.lst), - _sorted(['strawberries']) + got, + want, + "with score=8, lst\n got: %s\n want %s" % [got, want] ] func test_list_when_eggs_and_peanuts(allergies): allergies.score = 3 + var got =_sorted(allergies.lst) + var want = _sorted(['eggs', 'peanuts']) return [ - _sorted(allergies.lst), - _sorted(['eggs', 'peanuts']) + got, + want, + "with score=3, lst\n got: %s\n want %s" % [got, want] ] func test_list_when_more_than_eggs_but_not_peanuts(allergies): allergies.score = 5 + var got =_sorted(allergies.lst) + var want = _sorted(['eggs', 'shellfish']) return [ - _sorted(allergies.lst), - _sorted(['eggs', 'shellfish']) + got, + want, + "with score=5, lst\n got: %s\n want %s" % [got, want] ] func test_list_when_lots_of_stuff(allergies): allergies.score = 248 + var got =_sorted(allergies.lst) + var want = _sorted(['strawberries', 'tomatoes', 'chocolate', 'pollen', 'cats']) return [ - _sorted(allergies.lst), - _sorted(['strawberries', 'tomatoes', 'chocolate', 'pollen', 'cats']) + got, + want, + "with score=248, lst\n got: %s\n want %s" % [got, want] ] func test_list_when_everything(allergies): allergies.score = 255 + var got =_sorted(allergies.lst) + var want = _sorted(['eggs', 'peanuts', 'shellfish', 'strawberries', 'tomatoes', 'chocolate', 'pollen', 'cats']) return [ - _sorted(allergies.lst), - _sorted(['eggs', 'peanuts', 'shellfish', 'strawberries', 'tomatoes', 'chocolate', 'pollen', 'cats']) + got, + want, + "with score=255, lst\n got: %s\n want %s" % [got, want] ] func test_list_when_no_allergen_score_parts(allergies): allergies.score = 509 + var got =_sorted(allergies.lst) + var want = _sorted(['eggs', 'shellfish', 'strawberries', 'tomatoes', 'chocolate', 'pollen', 'cats']) return [ - _sorted(allergies.lst), - _sorted(['eggs', 'shellfish', 'strawberries', 'tomatoes', 'chocolate', 'pollen', 'cats']) + got, + want, + "with score=509, lst\n got: %s\n want %s" % [got, want] ] func test_list_when_no_allergen_score_parts_without_highest_valid_score(allergies): allergies.score = 257 + var got =_sorted(allergies.lst) + var want = _sorted(['eggs']) return [ - _sorted(allergies.lst), - _sorted(['eggs']) + got, + want, + "with score=257, lst\n got: %s\n want %s" % [got, want] ] diff --git a/exercises/practice/alphametics/.meta/template.j2 b/exercises/practice/alphametics/.meta/template.j2 index 94cd437c..6acdbffd 100644 --- a/exercises/practice/alphametics/.meta/template.j2 +++ b/exercises/practice/alphametics/.meta/template.j2 @@ -2,7 +2,11 @@ func test_{{ case.func_name }}(solution_script): var got = solution_script.{{ case.property | camel_to_snake }}({{ case.given | quote }}) var want = {{ case.expected | quote }} - return [got, want] + return [ + got, + want, + '{{ case.property | camel_to_snake }}({{ case.given | quote }}) = %s, but want %s' % [got, want], + ] {% endfor %} diff --git a/exercises/practice/alphametics/alphametics_test.gd b/exercises/practice/alphametics/alphametics_test.gd index 2bd83c30..1944a609 100644 --- a/exercises/practice/alphametics/alphametics_test.gd +++ b/exercises/practice/alphametics/alphametics_test.gd @@ -1,46 +1,78 @@ func test_puzzle_with_three_letters(solution_script): var got = solution_script.solve("I + BB == ILL") var want = {"I": 1, "B": 9, "L": 0} - return [got, want] + return [ + got, + want, + 'solve("I + BB == ILL") = %s, but want %s' % [got, want], + ] func test_solution_must_have_unique_value_for_each_letter(solution_script): var got = solution_script.solve("A == B") var want = null - return [got, want] + return [ + got, + want, + 'solve("A == B") = %s, but want %s' % [got, want], + ] func test_leading_zero_solution_is_invalid(solution_script): var got = solution_script.solve("ACA + DD == BD") var want = null - return [got, want] + return [ + got, + want, + 'solve("ACA + DD == BD") = %s, but want %s' % [got, want], + ] func test_puzzle_with_two_digits_final_carry(solution_script): var got = solution_script.solve("A + A + A + A + A + A + A + A + A + A + A + B == BCC") var want = {"A": 9, "B": 1, "C": 0} - return [got, want] + return [ + got, + want, + 'solve("A + A + A + A + A + A + A + A + A + A + A + B == BCC") = %s, but want %s' % [got, want], + ] func test_puzzle_with_four_letters(solution_script): var got = solution_script.solve("AS + A == MOM") var want = {"A": 9, "S": 2, "M": 1, "O": 0} - return [got, want] + return [ + got, + want, + 'solve("AS + A == MOM") = %s, but want %s' % [got, want], + ] func test_puzzle_with_six_letters(solution_script): var got = solution_script.solve("NO + NO + TOO == LATE") var want = {"N": 7, "O": 4, "T": 9, "L": 1, "A": 0, "E": 2} - return [got, want] + return [ + got, + want, + 'solve("NO + NO + TOO == LATE") = %s, but want %s' % [got, want], + ] func test_puzzle_with_seven_letters(solution_script): var got = solution_script.solve("HE + SEES + THE == LIGHT") var want = {"E": 4, "G": 2, "H": 5, "I": 0, "L": 1, "S": 9, "T": 7} - return [got, want] + return [ + got, + want, + 'solve("HE + SEES + THE == LIGHT") = %s, but want %s' % [got, want], + ] func test_puzzle_with_eight_letters(solution_script): var got = solution_script.solve("SEND + MORE == MONEY") var want = {"S": 9, "E": 5, "N": 6, "D": 7, "M": 1, "O": 0, "R": 8, "Y": 2} - return [got, want] + return [ + got, + want, + 'solve("SEND + MORE == MONEY") = %s, but want %s' % [got, want], + ] diff --git a/exercises/practice/anagram/.meta/template.j2 b/exercises/practice/anagram/.meta/template.j2 index b3e7f4fc..4d82cf68 100644 --- a/exercises/practice/anagram/.meta/template.j2 +++ b/exercises/practice/anagram/.meta/template.j2 @@ -1,9 +1,9 @@ {% for case in cases %} func test_{{ case.func_name }}(solution_script): - var subject = "{{ case.input.subject }}" - var candidates = {{ case.input.candidates }} + var subject = {{ case.input.subject | quote }} + var candidates = {{ case.input.candidates | quote }} var want = {{ case.expected }} var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram({{ case.input.subject | quote }}, {{ case.input.candidates | quote }} = %s, but want %s' % [got, want]] {% endfor %} diff --git a/exercises/practice/anagram/anagram_test.gd b/exercises/practice/anagram/anagram_test.gd index b94f976c..89faf491 100644 --- a/exercises/practice/anagram/anagram_test.gd +++ b/exercises/practice/anagram/anagram_test.gd @@ -1,142 +1,142 @@ func test_no_matches(solution_script): var subject = "diaper" - var candidates = ['hello', 'world', 'zombies', 'pants'] + var candidates = ["hello", "world", "zombies", "pants"] var want = [] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("diaper", ["hello", "world", "zombies", "pants"] = %s, but want %s' % [got, want]] func test_detects_two_anagrams(solution_script): var subject = "solemn" - var candidates = ['lemons', 'cherry', 'melons'] + var candidates = ["lemons", "cherry", "melons"] var want = ['lemons', 'melons'] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("solemn", ["lemons", "cherry", "melons"] = %s, but want %s' % [got, want]] func test_does_not_detect_anagram_subsets(solution_script): var subject = "good" - var candidates = ['dog', 'goody'] + var candidates = ["dog", "goody"] var want = [] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("good", ["dog", "goody"] = %s, but want %s' % [got, want]] func test_detects_anagram(solution_script): var subject = "listen" - var candidates = ['enlists', 'google', 'inlets', 'banana'] + var candidates = ["enlists", "google", "inlets", "banana"] var want = ['inlets'] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("listen", ["enlists", "google", "inlets", "banana"] = %s, but want %s' % [got, want]] func test_detects_three_anagrams(solution_script): var subject = "allergy" - var candidates = ['gallery', 'ballerina', 'regally', 'clergy', 'largely', 'leading'] + var candidates = ["gallery", "ballerina", "regally", "clergy", "largely", "leading"] var want = ['gallery', 'regally', 'largely'] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("allergy", ["gallery", "ballerina", "regally", "clergy", "largely", "leading"] = %s, but want %s' % [got, want]] func test_detects_multiple_anagrams_with_different_case(solution_script): var subject = "nose" - var candidates = ['Eons', 'ONES'] + var candidates = ["Eons", "ONES"] var want = ['Eons', 'ONES'] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("nose", ["Eons", "ONES"] = %s, but want %s' % [got, want]] func test_does_not_detect_non_anagrams_with_identical_checksum(solution_script): var subject = "mass" - var candidates = ['last'] + var candidates = ["last"] var want = [] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("mass", ["last"] = %s, but want %s' % [got, want]] func test_detects_anagrams_case_insensitively(solution_script): var subject = "Orchestra" - var candidates = ['cashregister', 'Carthorse', 'radishes'] + var candidates = ["cashregister", "Carthorse", "radishes"] var want = ['Carthorse'] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("Orchestra", ["cashregister", "Carthorse", "radishes"] = %s, but want %s' % [got, want]] func test_detects_anagrams_using_case_insensitive_subject(solution_script): var subject = "Orchestra" - var candidates = ['cashregister', 'carthorse', 'radishes'] + var candidates = ["cashregister", "carthorse", "radishes"] var want = ['carthorse'] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("Orchestra", ["cashregister", "carthorse", "radishes"] = %s, but want %s' % [got, want]] func test_detects_anagrams_using_case_insensitive_possible_matches(solution_script): var subject = "orchestra" - var candidates = ['cashregister', 'Carthorse', 'radishes'] + var candidates = ["cashregister", "Carthorse", "radishes"] var want = ['Carthorse'] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("orchestra", ["cashregister", "Carthorse", "radishes"] = %s, but want %s' % [got, want]] func test_does_not_detect_an_anagram_if_the_original_word_is_repeated(solution_script): var subject = "go" - var candidates = ['goGoGO'] + var candidates = ["goGoGO"] var want = [] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("go", ["goGoGO"] = %s, but want %s' % [got, want]] func test_anagrams_must_use_all_letters_exactly_once(solution_script): var subject = "tapper" - var candidates = ['patter'] + var candidates = ["patter"] var want = [] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("tapper", ["patter"] = %s, but want %s' % [got, want]] func test_words_are_not_anagrams_of_themselves(solution_script): var subject = "BANANA" - var candidates = ['BANANA'] + var candidates = ["BANANA"] var want = [] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("BANANA", ["BANANA"] = %s, but want %s' % [got, want]] func test_words_are_not_anagrams_of_themselves_even_if_letter_case_is_partially_different(solution_script): var subject = "BANANA" - var candidates = ['Banana'] + var candidates = ["Banana"] var want = [] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("BANANA", ["Banana"] = %s, but want %s' % [got, want]] func test_words_are_not_anagrams_of_themselves_even_if_letter_case_is_completely_different(solution_script): var subject = "BANANA" - var candidates = ['banana'] + var candidates = ["banana"] var want = [] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("BANANA", ["banana"] = %s, but want %s' % [got, want]] func test_words_other_than_themselves_can_be_anagrams(solution_script): var subject = "LISTEN" - var candidates = ['LISTEN', 'Silent'] + var candidates = ["LISTEN", "Silent"] var want = ['Silent'] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("LISTEN", ["LISTEN", "Silent"] = %s, but want %s' % [got, want]] func test_handles_case_of_greek_letters(solution_script): var subject = "ΑΒΓ" - var candidates = ['ΒΓΑ', 'ΒΓΔ', 'γβα', 'αβγ'] + var candidates = ["ΒΓΑ", "ΒΓΔ", "γβα", "αβγ"] var want = ['ΒΓΑ', 'γβα'] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("ΑΒΓ", ["ΒΓΑ", "ΒΓΔ", "γβα", "αβγ"] = %s, but want %s' % [got, want]] func test_different_characters_may_have_the_same_bytes(solution_script): var subject = "a⬂" - var candidates = ['€a'] + var candidates = ["€a"] var want = [] var got = solution_script.find_anagram(subject, candidates) - return [got, want] + return [got, want, 'find_anagram("a⬂", ["€a"] = %s, but want %s' % [got, want]] diff --git a/exercises/practice/atbash-cipher/.meta/template.j2 b/exercises/practice/atbash-cipher/.meta/template.j2 index 9a2152ff..e3230843 100644 --- a/exercises/practice/atbash-cipher/.meta/template.j2 +++ b/exercises/practice/atbash-cipher/.meta/template.j2 @@ -1,7 +1,7 @@ {% for case in cases %} func test_{{ case.func_name }}(solution_script): - var got = solution_script.{{ case.property }}("{{ case.given }}") + var got = solution_script.{{ case.property }}({{ case.given | quote }}) var want = "{{ case.expected }}" - return [got, want] + return [got, want, '{{ case.property }}({{ case.given | quote }}) = %s, but want %s' % [got, want]] {% endfor %} diff --git a/exercises/practice/atbash-cipher/atbash_cipher_test.gd b/exercises/practice/atbash-cipher/atbash_cipher_test.gd index 539b3937..04181b01 100644 --- a/exercises/practice/atbash-cipher/atbash_cipher_test.gd +++ b/exercises/practice/atbash-cipher/atbash_cipher_test.gd @@ -1,82 +1,82 @@ func test_encode_yes(solution_script): var got = solution_script.encode("yes") var want = "bvh" - return [got, want] + return [got, want, 'encode("yes") = %s, but want %s' % [got, want]] func test_encode_no(solution_script): var got = solution_script.encode("no") var want = "ml" - return [got, want] + return [got, want, 'encode("no") = %s, but want %s' % [got, want]] func test_encode_omg(solution_script): var got = solution_script.encode("OMG") var want = "lnt" - return [got, want] + return [got, want, 'encode("OMG") = %s, but want %s' % [got, want]] func test_encode_spaces(solution_script): var got = solution_script.encode("O M G") var want = "lnt" - return [got, want] + return [got, want, 'encode("O M G") = %s, but want %s' % [got, want]] func test_encode_mindblowingly(solution_script): var got = solution_script.encode("mindblowingly") var want = "nrmwy oldrm tob" - return [got, want] + return [got, want, 'encode("mindblowingly") = %s, but want %s' % [got, want]] func test_encode_numbers(solution_script): var got = solution_script.encode("Testing,1 2 3, testing.") var want = "gvhgr mt123 gvhgr mt" - return [got, want] + return [got, want, 'encode("Testing,1 2 3, testing.") = %s, but want %s' % [got, want]] func test_encode_deep_thought(solution_script): var got = solution_script.encode("Truth is fiction.") var want = "gifgs rhurx grlm" - return [got, want] + return [got, want, 'encode("Truth is fiction.") = %s, but want %s' % [got, want]] func test_encode_all_the_letters(solution_script): var got = solution_script.encode("The quick brown fox jumps over the lazy dog.") var want = "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt" - return [got, want] + return [got, want, 'encode("The quick brown fox jumps over the lazy dog.") = %s, but want %s' % [got, want]] func test_decode_exercism(solution_script): var got = solution_script.decode("vcvix rhn") var want = "exercism" - return [got, want] + return [got, want, 'decode("vcvix rhn") = %s, but want %s' % [got, want]] func test_decode_a_sentence(solution_script): var got = solution_script.decode("zmlyh gzxov rhlug vmzhg vkkrm thglm v") var want = "anobstacleisoftenasteppingstone" - return [got, want] + return [got, want, 'decode("zmlyh gzxov rhlug vmzhg vkkrm thglm v") = %s, but want %s' % [got, want]] func test_decode_numbers(solution_script): var got = solution_script.decode("gvhgr mt123 gvhgr mt") var want = "testing123testing" - return [got, want] + return [got, want, 'decode("gvhgr mt123 gvhgr mt") = %s, but want %s' % [got, want]] func test_decode_all_the_letters(solution_script): var got = solution_script.decode("gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt") var want = "thequickbrownfoxjumpsoverthelazydog" - return [got, want] + return [got, want, 'decode("gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt") = %s, but want %s' % [got, want]] func test_decode_with_too_many_spaces(solution_script): var got = solution_script.decode("vc vix r hn") var want = "exercism" - return [got, want] + return [got, want, 'decode("vc vix r hn") = %s, but want %s' % [got, want]] func test_decode_with_no_spaces(solution_script): var got = solution_script.decode("zmlyhgzxovrhlugvmzhgvkkrmthglmv") var want = "anobstacleisoftenasteppingstone" - return [got, want] + return [got, want, 'decode("zmlyhgzxovrhlugvmzhgvkkrmthglmv") = %s, but want %s' % [got, want]]