tracks/perl6/exercises/allergies/allergies.t in trackler-2.0.8.28 vs tracks/perl6/exercises/allergies/allergies.t in trackler-2.0.8.29
- old
+ new
@@ -1,155 +1,205 @@
#!/usr/bin/env perl6
-
+use v6;
use Test;
+use lib my $dir = $?FILE.IO.dirname;
use JSON::Tiny;
-use lib $?FILE.IO.dirname;
+my $exercise = 'Allergies';
+my $version = v1;
+my $module = %*ENV<EXERCISM> ?? 'Example' !! $exercise;
+plan 5;
-my $module = %*ENV<EXERCISM> ?? 'Example' !! 'Allergies';
-require ::($module) <&allergic-to &list-allergies>;
+use-ok $module or bail-out;
+require ::($module);
+if ::($exercise).^ver !~~ $version {
+ warn "\nExercise version mismatch. Further tests may fail!"
+ ~ "\n$exercise is $(::($exercise).^ver.gist). "
+ ~ "Test is $($version.gist).\n";
+ bail-out 'Example version must match test version.' if %*ENV<EXERCISM>;
+}
-plan 2;
+my @subs;
+BEGIN { @subs = <&allergic-to &list-allergies> };
+subtest 'Subroutine(s)', {
+ plan 2;
+ eval-lives-ok "use $module; ::('$_').defined or die '$_ is not defined.'", $_ for @subs;
+} or bail-out 'All subroutines must be defined and exported.';
+require ::($module) @subs.eager;
-my %cases;
-subtest 'allergic-to' => {
- my @cases = |%cases{'allergic_to'}{'cases'};
-
- plan +@cases;
-
- for |@cases -> %case {
- subtest %case.<description> => {
- plan +|%case.<expected>;
- for |%case.<expected> -> %expected {
- is allergic-to(%case.<score>,%expected.<substance>), %expected.<result>
- or diag %expected;
- }
- }
+for @(my $c-data.<cases>) -> %cases {
+ subtest 'allergic-to' => {
+ plan 7;
+ my @cases = |%cases<cases>;
+ for @cases -> %case {
+ is allergic-to(%case<score>, .<substance>), .<result>, %case<description> for @(%case<expected>);
}
-};
+ } if %cases<description> ~~ 'allergicTo';
-subtest 'list' => {
- my @cases = |%cases{'list'}{'cases'};
-
- plan +@cases;
-
- for |@cases {
- is list-allergies(.<score>), .<expected>, .<description>
- or diag $_;
+ subtest 'list-allergies' => {
+ plan 9;
+ my @cases = |%cases<cases>;
+ for @cases {
+ is list-allergies(.<score>), |.<expected description>;
}
-};
+ } if %cases<description> ~~ 'list';
+}
+if %*ENV<EXERCISM> && (my $c-data-file = "$dir/../../x-common/exercises/{$dir.IO.basename}/canonical-data.json".IO.resolve) ~~ :f {
+ is-deeply $c-data, from-json($c-data-file.slurp), 'canonical-data'
+} else { skip }
+
done-testing;
INIT {
- %cases := from-json 「
+ $c-data := from-json 「
{
- "allergic_to": {
- "description": [
- "Given a number and a substance, indicate whether Tom is allergic ",
- "to that substance.",
- "Test cases for this method involve more than one assertion.",
- "Each case in 'expected' specifies what the method should return for",
- "the given substance."
- ],
- "cases": [
- {
- "description": "no allergies means not allergic",
- "score": 0,
- "expected": [
- {
- "substance": "peanuts",
- "result": false
- },
- {
- "substance": "cats",
- "result": false
- },
- {
- "substance": "strawberries",
- "result": false
- }
- ]
- },
- {
- "description": "is allergic to eggs",
- "score": 1,
- "expected": [
- {
- "substance": "eggs",
- "result": true
- }
- ]
- },
- {
- "description": "allergic to eggs in addition to other stuff",
- "score": 5,
- "expected": [
- {
- "substance": "eggs",
- "result": true
- },
- {
- "substance": "shellfish",
- "result": true
- },
- {
- "substance": "strawberries",
- "result": false
- }
- ]
- }
- ]
- },
- "list": {
- "description": ["Given a number, list all things Tom is allergic to"],
- "cases": [
- {
- "description": "no allergies at all",
- "score": 0,
- "expected": []
- },
- {
- "description": "allergic to just eggs",
- "score": 1,
- "expected": ["eggs"]
- },
- {
- "description": "allergic to just peanuts",
- "score": 2,
- "expected": ["peanuts"]
- },
- {
- "description": "allergic to just strawberries",
- "score": 8,
- "expected": ["strawberries"]
- },
- {
- "description": "allergic to eggs and peanuts",
- "score": 3,
- "expected": ["eggs", "peanuts"]
- },
- {
- "description": "allergic to more than eggs but not peanuts",
- "score": 5,
- "expected": ["eggs", "shellfish"]
- },
- {
- "description": "allergic to lots of stuff",
- "score": 248,
- "expected": ["strawberries", "tomatoes", "chocolate", "pollen", "cats"]
- },
- {
- "description": "allergic to everything",
- "score": 255,
- "expected": ["eggs", "peanuts", "shellfish", "strawberries", "tomatoes", "chocolate", "pollen", "cats"]
- },
- {
- "description": "ignore non allergen score parts",
- "score": 509,
- "expected": ["eggs", "shellfish", "strawberries", "tomatoes", "chocolate", "pollen", "cats"]
- }
- ]
- }
+ "exercise": "allergies",
+ "version": "1.0.0",
+ "cases": [
+ {
+ "description": "allergicTo",
+ "comments": [
+ "Given a number and a substance, indicate whether Tom is allergic ",
+ "to that substance.",
+ "Test cases for this method involve more than one assertion.",
+ "Each case in 'expected' specifies what the method should return for",
+ "the given substance."
+ ],
+ "cases": [
+ {
+ "description": "no allergies means not allergic",
+ "property": "allergicTo",
+ "score": 0,
+ "expected": [
+ {
+ "substance": "peanuts",
+ "result": false
+ },
+ {
+ "substance": "cats",
+ "result": false
+ },
+ {
+ "substance": "strawberries",
+ "result": false
+ }
+ ]
+ },
+ {
+ "description": "is allergic to eggs",
+ "property": "allergicTo",
+ "score": 1,
+ "expected": [
+ {
+ "substance": "eggs",
+ "result": true
+ }
+ ]
+ },
+ {
+ "description": "allergic to eggs in addition to other stuff",
+ "property": "allergicTo",
+ "score": 5,
+ "expected": [
+ {
+ "substance": "eggs",
+ "result": true
+ },
+ {
+ "substance": "shellfish",
+ "result": true
+ },
+ {
+ "substance": "strawberries",
+ "result": false
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "description": "list",
+ "comments": [
+ "Given a number, list all things Tom is allergic to"
+ ],
+ "cases": [
+ {
+ "description": "no allergies at all",
+ "property": "list",
+ "score": 0,
+ "expected": []
+ },
+ {
+ "description": "allergic to just eggs",
+ "property": "list",
+ "score": 1,
+ "expected": ["eggs"]
+ },
+ {
+ "description": "allergic to just peanuts",
+ "property": "list",
+ "score": 2,
+ "expected": ["peanuts"]
+ },
+ {
+ "description": "allergic to just strawberries",
+ "property": "list",
+ "score": 8,
+ "expected": ["strawberries"]
+ },
+ {
+ "description": "allergic to eggs and peanuts",
+ "property": "list",
+ "score": 3,
+ "expected": ["eggs", "peanuts"]
+ },
+ {
+ "description": "allergic to more than eggs but not peanuts",
+ "property": "list",
+ "score": 5,
+ "expected": ["eggs", "shellfish"]
+ },
+ {
+ "description": "allergic to lots of stuff",
+ "property": "list",
+ "score": 248,
+ "expected": [ "strawberries",
+ "tomatoes",
+ "chocolate",
+ "pollen",
+ "cats"
+ ]
+ },
+ {
+ "description": "allergic to everything",
+ "property": "list",
+ "score": 255,
+ "expected": [ "eggs",
+ "peanuts",
+ "shellfish",
+ "strawberries",
+ "tomatoes",
+ "chocolate",
+ "pollen",
+ "cats"
+ ]
+ },
+ {
+ "description": "ignore non allergen score parts",
+ "property": "list",
+ "score": 509,
+ "expected": [ "eggs",
+ "shellfish",
+ "strawberries",
+ "tomatoes",
+ "chocolate",
+ "pollen",
+ "cats"
+ ]
+ }
+ ]
+ }
+ ]
}
」
}