tracks/perl6/exercises/robot-name/example.yaml in trackler-2.1.0.33 vs tracks/perl6/exercises/robot-name/example.yaml in trackler-2.1.0.34
- old
+ new
@@ -5,21 +5,45 @@
tests: |
srand 1;
my $robot = ::($exercise).?new;
my Str $name = $robot.?name;
like $name, /^^<[A..Z]>**2 <[0..9]>**3$$/, 'Name matches schema';
+
srand 2;
is $robot.?name, $name, 'Name is persistent';
srand 1;
isnt ::($exercise).new.?name, $name, 'New Robot cannot claim previous Robot name';
+
srand 1;
$robot.?reset-name;
$robot.?reset_name; # Allows next test to still pass for older solutions
+
isnt $robot.?name, $name, "'reset-name' cannot use previous Robot name";
+
diag "\nCreating 100 robots...";
push my @names, ::($exercise).new.name for 1..100;
is @names, @names.unique, 'All names are unique';
subtest 'Randomness', {
plan 2;
isnt @names, @names.sort, 'Names not ordered';
isnt @names, @names.sort.reverse, 'Names not reverse ordered';
+ }
+
+unit: class
+example: |
+ subset Name of Str where * ~~ /^<[A..Z]>**2 <[0..9]>**3$/;
+ has Name $.name = self.reset-name;
+
+ method reset-name {
+ state Promise:D $promise = start ('AA000'..'ZZ999').pick: *;
+ state Bool:D %record{Name:D};
+ state Int:D $i = 0;
+
+ if $promise.status ~~ 'Kept' {
+ ($!name = $promise.result[$i++]) or die 'All names used.';
+ } else {
+ $!name = ('A'..'Z').roll(2).join ~ (^10).roll(3).join;
+ }
+ self.reset-name if %record{$!name}:exists;
+ %record{$!name} = True;
+ return $!name;
}