diff options
| -rw-r--r-- | challenge-121/lance-wicks/perl/ch-1.pl | 19 | ||||
| -rw-r--r-- | challenge-121/lance-wicks/perl/lib/Invert.pm | 21 | ||||
| -rw-r--r-- | challenge-121/lance-wicks/perl/t/01-invert-accept.t | 20 |
3 files changed, 60 insertions, 0 deletions
diff --git a/challenge-121/lance-wicks/perl/ch-1.pl b/challenge-121/lance-wicks/perl/ch-1.pl new file mode 100644 index 0000000000..050be84ea8 --- /dev/null +++ b/challenge-121/lance-wicks/perl/ch-1.pl @@ -0,0 +1,19 @@ +use strict; +use warnings; + +__PACKAGE__->run() unless caller; + +use lib './lib'; +use Invert; + +sub run { + my $m = $ARGV[0] || shift; + my $n = $ARGV[1] || shift; + + my $invert = Invert->new; + my $inverted = $invert->bit( m => $m, n => $n ); + print "Input: \$m = $m, \$n = $n\nOutput: $inverted\n"; +} + +1; + diff --git a/challenge-121/lance-wicks/perl/lib/Invert.pm b/challenge-121/lance-wicks/perl/lib/Invert.pm new file mode 100644 index 0000000000..f17f9e9a0a --- /dev/null +++ b/challenge-121/lance-wicks/perl/lib/Invert.pm @@ -0,0 +1,21 @@ +package Invert; + +use Moo; + +sub bit { + my ($self, %args) = @_; + + my $m = $args{m}; + my $n = $args{n}; + + my $bin_m = sprintf("%08b",$m); + + my $bit = substr $bin_m, -($n), 1; + + substr $bin_m, -($n), 1, $bit ? 0 : 1 ; + + return oct "0b$bin_m"; +} + + +1; diff --git a/challenge-121/lance-wicks/perl/t/01-invert-accept.t b/challenge-121/lance-wicks/perl/t/01-invert-accept.t new file mode 100644 index 0000000000..660dae1fb7 --- /dev/null +++ b/challenge-121/lance-wicks/perl/t/01-invert-accept.t @@ -0,0 +1,20 @@ +use Test2::V0 -target => 'Invert'; +use Test::Output; + +subtest 'Testing the script output' => sub { + require './ch-1.pl'; + + stdout_is { &run( 12, 3 ) } + "Input: \$m = 12, \$n = 3\nOutput: 8\n", 'Example 1'; + + stdout_is { &run( 18, 4 ) } + "Input: \$m = 18, \$n = 4\nOutput: 26\n", 'Example 2'; +}; + +subtest 'Invert::bit' => sub { + is $CLASS->bit( m => 12, n => 3 ), 8, 'Example one'; + + is $CLASS->bit( m => 18, n => 4 ), 26, 'Example two'; +}; + +done_testing; |
