From e4dbd341f5c1f89e4e498c099904f6f65a169ac1 Mon Sep 17 00:00:00 2001 From: Glenn Jackman Date: Tue, 24 Mar 2026 12:12:43 -0400 Subject: [PATCH] add `is_empty` to generator exported functions --- bin/generate-spec | 6 ++++-- exercises/practice/matching-brackets/.meta/example.moon | 4 ++-- exercises/practice/proverb/.meta/spec_generator.moon | 2 +- exercises/test_helpers.md | 9 +++++++++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/bin/generate-spec b/bin/generate-spec index 83afdbf..2656bee 100755 --- a/bin/generate-spec +++ b/bin/generate-spec @@ -48,7 +48,7 @@ included_tests_from_toml = (path) -> -- ---------------------------------------------------------- -- functions marked as global so spec_generators can see them -export indent, quote, is_json_null +export indent, quote, is_json_null, is_empty indent = (text, level) -> string.rep(' ', level) .. text @@ -58,8 +58,10 @@ quote = (str) -> else "'#{str}'" +is_empty = (t) -> not next t + -- the dkjson `json.null` value is an empty table -is_json_null = (value) -> type(value) == 'table' and #value == 0 +is_json_null = (value) -> type(value) == 'table' and is_empty(value) -- ---------------------------------------------------------- diff --git a/exercises/practice/matching-brackets/.meta/example.moon b/exercises/practice/matching-brackets/.meta/example.moon index 23aa3f0..49e58fb 100644 --- a/exercises/practice/matching-brackets/.meta/example.moon +++ b/exercises/practice/matching-brackets/.meta/example.moon @@ -1,8 +1,8 @@ push = table.insert pop = table.remove -is_empty = (s) -> #s == 0 +is_empty = (t) -> not next t -opener = { [']']: '[', ['}']: '{', [')']: '(' } +opener = ']':'[', '}':'{', ')':'(' { diff --git a/exercises/practice/proverb/.meta/spec_generator.moon b/exercises/practice/proverb/.meta/spec_generator.moon index cf4d812..8946ed7 100644 --- a/exercises/practice/proverb/.meta/spec_generator.moon +++ b/exercises/practice/proverb/.meta/spec_generator.moon @@ -4,7 +4,7 @@ generate_test: (case, level) -> input = table.concat [quote word for word in *case.input.strings], ', ' local expected - if #case.expected == 0 + if is_empty case.expected expected = "''" else expected = "[[\n#{table.concat case.expected, '\n'}\n]]" diff --git a/exercises/test_helpers.md b/exercises/test_helpers.md index 3a6c6cc..9e2121a 100644 --- a/exercises/test_helpers.md +++ b/exercises/test_helpers.md @@ -1,5 +1,14 @@ # Reusable stuff for spec generators +## Functions in generate-spec script + +These functions are exported from generate-spec for use in spec_generator modules + +- `indent(text, level)` -- provide leading whitespace to the appropriate level. +- `quote(str)` -- add quotation marks to the string, single or double as appropriate. +- `is_empty(tbl)` -- predicate: is the table empty +- `is_json_null(value)` -- predicate: is the value `json.null` from dkjson + ## Helper functions Useful for generating pretty tables mostly.