Skip to content

Commit

Permalink
etl: Sync tests and generate them with Tera
Browse files Browse the repository at this point in the history
Also changed the tests to use BTreeMap::from instead of the custom
functions for better clarity.

[no important files changed]
  • Loading branch information
ellnix committed Feb 13, 2025
1 parent e99b295 commit 25bde87
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 23 deletions.
29 changes: 29 additions & 0 deletions exercises/practice/etl/.meta/test_template.tera
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
use std::collections::BTreeMap;

{% for test in cases %}
#[test]
#[ignore]
fn {{ test.description | make_ident }}() {
let input = BTreeMap::from(
[
{% for value, letters in test.input.legacy %}
({{value}}, vec![
{% for letter in letters %}
'{{letter}}',
{% endfor %}
]),
{% endfor %}
]
);

let expected = BTreeMap::from(
[
{% for letter, value in test.expected %}
('{{letter}}', {{ value }}),
{% endfor %}
]
);

assert_eq!(expected, etl::transform(&input));
}
{% endfor %}
25 changes: 22 additions & 3 deletions exercises/practice/etl/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
# 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.

[78a7a9f9-4490-4a47-8ee9-5a38bb47d28f]
description = "single letter"

[60dbd000-451d-44c7-bdbb-97c73ac1f497]
description = "single score with multiple letters"

[f5c5de0c-301f-4fdd-a0e5-df97d4214f54]
description = "multiple scores with multiple letters"

[5db8ea89-ecb4-4dcd-902f-2b418cc87b9d]
description = "multiple scores with differing numbers of letters"
32 changes: 12 additions & 20 deletions exercises/practice/etl/tests/etl.rs
Original file line number Diff line number Diff line change
@@ -1,38 +1,38 @@
use std::collections::BTreeMap;

#[test]
fn transform_one_value() {
let input = input_from(&[(1, vec!['A'])]);
fn single_letter() {
let input = BTreeMap::from([(1, vec!['A'])]);

let expected = expected_from(&[('a', 1)]);
let expected = BTreeMap::from([('a', 1)]);

assert_eq!(expected, etl::transform(&input));
}

#[test]
#[ignore]
fn transform_more_values() {
let input = input_from(&[(1, vec!['A', 'E', 'I', 'O', 'U'])]);
fn single_score_with_multiple_letters() {
let input = BTreeMap::from([(1, vec!['A', 'E', 'I', 'O', 'U'])]);

let expected = expected_from(&[('a', 1), ('e', 1), ('i', 1), ('o', 1), ('u', 1)]);
let expected = BTreeMap::from([('a', 1), ('e', 1), ('i', 1), ('o', 1), ('u', 1)]);

assert_eq!(expected, etl::transform(&input));
}

#[test]
#[ignore]
fn more_keys() {
let input = input_from(&[(1, vec!['A', 'E']), (2, vec!['D', 'G'])]);
fn multiple_scores_with_multiple_letters() {
let input = BTreeMap::from([(1, vec!['A', 'E']), (2, vec!['D', 'G'])]);

let expected = expected_from(&[('a', 1), ('e', 1), ('d', 2), ('g', 2)]);
let expected = BTreeMap::from([('a', 1), ('d', 2), ('e', 1), ('g', 2)]);

assert_eq!(expected, etl::transform(&input));
}

#[test]
#[ignore]
fn full_dataset() {
let input = input_from(&[
fn multiple_scores_with_differing_numbers_of_letters() {
let input = BTreeMap::from([
(1, vec!['A', 'E', 'I', 'O', 'U', 'L', 'N', 'R', 'S', 'T']),
(2, vec!['D', 'G']),
(3, vec!['B', 'C', 'M', 'P']),
Expand All @@ -42,7 +42,7 @@ fn full_dataset() {
(10, vec!['Q', 'Z']),
]);

let expected = expected_from(&[
let expected = BTreeMap::from([
('a', 1),
('b', 3),
('c', 3),
Expand Down Expand Up @@ -73,11 +73,3 @@ fn full_dataset() {

assert_eq!(expected, etl::transform(&input));
}

fn input_from(v: &[(i32, Vec<char>)]) -> BTreeMap<i32, Vec<char>> {
v.iter().cloned().collect()
}

fn expected_from(v: &[(char, i32)]) -> BTreeMap<char, i32> {
v.iter().cloned().collect()
}

0 comments on commit 25bde87

Please sign in to comment.