Sha256: 49fdafe99951727d8c36a78bf82214d6cedab612577bd4a6ca9cd8df49eef46d
Contents?: true
Size: 1.38 KB
Versions: 82
Compression:
Stored size: 1.38 KB
Contents
exercise: Robot version: 1 methods: name reset-name plan: 8 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; }
Version data entries
82 entries across 82 versions & 1 rubygems