From 7f04511a09daec041a16d009cb61b9ad5bb25145 Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Wed, 3 Apr 2024 09:39:23 +0200 Subject: [PATCH 1/3] generator: fix fallback to default template --- rust-tooling/generate/src/lib.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rust-tooling/generate/src/lib.rs b/rust-tooling/generate/src/lib.rs index 1f2dfa757..0c7d31aae 100644 --- a/rust-tooling/generate/src/lib.rs +++ b/rust-tooling/generate/src/lib.rs @@ -91,8 +91,10 @@ fn generate_tests(slug: &str) -> Result { }; let excluded_tests = get_excluded_tests(slug); let mut template = get_test_template(slug).context("failed to get test template")?; - if template.get_template_names().next() != Some("test_template.tera") { - anyhow::bail!("'test_template.tera' not found"); + if template.get_template_names().next().is_none() { + template + .add_raw_template("test_template.tera", TEST_TEMPLATE) + .context("failed to add default template")?; } for (name, filter) in CUSTOM_FILTERS { template.register_filter(name, filter); From 7be6960dc025b2b5d8dc5fb6ef7b4a78ab11cd3e Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Wed, 3 Apr 2024 09:41:37 +0200 Subject: [PATCH 2/3] generator: update default template --- rust-tooling/generate/templates/default_test_template.tera | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-tooling/generate/templates/default_test_template.tera b/rust-tooling/generate/templates/default_test_template.tera index fe5943e36..448333d3f 100644 --- a/rust-tooling/generate/templates/default_test_template.tera +++ b/rust-tooling/generate/templates/default_test_template.tera @@ -3,7 +3,7 @@ use crate_name::*; {% for test in cases %} #[test] #[ignore] -fn {{ test.description | slugify | replace(from="-", to="_") }}() { +fn {{ test.description | snake_case }}() { let input = {{ test.input | json_encode() }}; let output = function_name(input); let expected = {{ test.expected | json_encode() }}; From b5db0f401d156a7e115e10d6fee85ecb302d1e87 Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Sun, 7 Apr 2024 15:08:37 +0200 Subject: [PATCH 3/3] collatz-conjecture: sync --- .../.meta/test_template.tera | 16 ++++++ .../collatz-conjecture/.meta/tests.toml | 43 ++++++++++++++-- .../tests/collatz-conjecture.rs | 50 ++++++++----------- problem-specifications | 2 +- 4 files changed, 79 insertions(+), 32 deletions(-) create mode 100644 exercises/practice/collatz-conjecture/.meta/test_template.tera diff --git a/exercises/practice/collatz-conjecture/.meta/test_template.tera b/exercises/practice/collatz-conjecture/.meta/test_template.tera new file mode 100644 index 000000000..eec8050c3 --- /dev/null +++ b/exercises/practice/collatz-conjecture/.meta/test_template.tera @@ -0,0 +1,16 @@ +use collatz_conjecture::*; + +{% for test in cases %} +#[test] +#[ignore] +fn {{ test.description | snake_case }}() { + let output = collatz({{ test.input.number | json_encode() }}); + + let expected = {% if test.expected is object %} + None + {% else %} + Some({{ test.expected | json_encode() }}) + {% endif %}; + assert_eq!(output, expected); +} +{% endfor -%} diff --git a/exercises/practice/collatz-conjecture/.meta/tests.toml b/exercises/practice/collatz-conjecture/.meta/tests.toml index be690e975..0bd122074 100644 --- a/exercises/practice/collatz-conjecture/.meta/tests.toml +++ b/exercises/practice/collatz-conjecture/.meta/tests.toml @@ -1,3 +1,40 @@ -# This is an auto-generated file. Regular comments will be removed when this -# file is regenerated. Regenerating will not touch any manually added keys, -# so comments can be added in a "comment" key. +# This is an auto-generated file. +# +# Regenerating this file via `configlet sync` will: +# - Recreate every `description` key/value pair +# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications +# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion) +# - Preserve any other key/value pair +# +# As user-added comments (using the # character) will be removed when this file +# is regenerated, comments can be added via a `comment` key. + +[540a3d51-e7a6-47a5-92a3-4ad1838f0bfd] +description = "zero steps for one" + +[3d76a0a6-ea84-444a-821a-f7857c2c1859] +description = "divide if even" + +[754dea81-123c-429e-b8bc-db20b05a87b9] +description = "even and odd steps" + +[ecfd0210-6f85-44f6-8280-f65534892ff6] +description = "large number of even and odd steps" + +[7d4750e6-def9-4b86-aec7-9f7eb44f95a3] +description = "zero is an error" +include = false + +[2187673d-77d6-4543-975e-66df6c50e2da] +description = "zero is an error" +reimplements = "7d4750e6-def9-4b86-aec7-9f7eb44f95a3" + +[c6c795bf-a288-45e9-86a1-841359ad426d] +description = "negative value is an error" +include = false + +[ec11f479-56bc-47fd-a434-bcd7a31a7a2e] +description = "negative value is an error" +reimplements = "c6c795bf-a288-45e9-86a1-841359ad426d" +include = false +comment = "The exercise uses u64, which doesn't allow negative numbers." diff --git a/exercises/practice/collatz-conjecture/tests/collatz-conjecture.rs b/exercises/practice/collatz-conjecture/tests/collatz-conjecture.rs index 9c6690dc2..9bbced3ec 100644 --- a/exercises/practice/collatz-conjecture/tests/collatz-conjecture.rs +++ b/exercises/practice/collatz-conjecture/tests/collatz-conjecture.rs @@ -1,51 +1,45 @@ use collatz_conjecture::*; #[test] -fn one() { - assert_eq!(Some(0), collatz(1)); -} +fn zero_steps_for_one() { + let output = collatz(1); -#[test] -#[ignore] -fn sixteen() { - assert_eq!(Some(4), collatz(16)); + let expected = Some(0); + assert_eq!(output, expected); } #[test] #[ignore] -fn twelve() { - assert_eq!(Some(9), collatz(12)); -} +fn divide_if_even() { + let output = collatz(16); -#[test] -#[ignore] -fn one_million() { - assert_eq!(Some(152), collatz(1_000_000)); + let expected = Some(4); + assert_eq!(output, expected); } #[test] #[ignore] -fn zero() { - assert_eq!(None, collatz(0)); -} +fn even_and_odd_steps() { + let output = collatz(12); -#[test] -#[ignore] -fn test_110243094271() { - let val = 110243094271; - assert_eq!(None, collatz(val)); + let expected = Some(9); + assert_eq!(output, expected); } #[test] #[ignore] -fn max_div_3() { - let max = u64::MAX / 3; - assert_eq!(None, collatz(max)); +fn large_number_of_even_and_odd_steps() { + let output = collatz(1000000); + + let expected = Some(152); + assert_eq!(output, expected); } #[test] #[ignore] -fn max_minus_1() { - let max = u64::MAX - 1; - assert_eq!(None, collatz(max)); +fn zero_is_an_error() { + let output = collatz(0); + + let expected = None; + assert_eq!(output, expected); } diff --git a/problem-specifications b/problem-specifications index 8b6a412a9..381bb40d6 160000 --- a/problem-specifications +++ b/problem-specifications @@ -1 +1 @@ -Subproject commit 8b6a412a949d9080b08869156067a16521c4d1ba +Subproject commit 381bb40d6e01d175be183eece44e60897dc9b12d