From a49821ee7e41d0c94c5ffa5af647201fe4e1dd95 Mon Sep 17 00:00:00 2001 From: Lance Wicks Date: Mon, 12 Jul 2021 17:56:26 +0100 Subject: 121: Task 1, Perl --- challenge-121/lance-wicks/perl/ch-1.pl | 19 +++++++++++++++++++ challenge-121/lance-wicks/perl/lib/Invert.pm | 21 +++++++++++++++++++++ challenge-121/lance-wicks/perl/t/01-invert-accept.t | 20 ++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 challenge-121/lance-wicks/perl/ch-1.pl create mode 100644 challenge-121/lance-wicks/perl/lib/Invert.pm create mode 100644 challenge-121/lance-wicks/perl/t/01-invert-accept.t 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; -- cgit