File Coverage

blib/lib/App/Math/Tutor/Cmd/Natural/Cmd/Add.pm
Criterion Covered Total %
statement 18 45 40.0
branch 0 6 0.0
condition 0 3 0.0
subroutine 6 8 75.0
pod n/a
total 24 62 38.7


line stmt bran cond sub pod time code
1             package App::Math::Tutor::Cmd::Natural::Cmd::Add;
2              
3 1     1   3437 use warnings;
  1         2  
  1         33  
4 1     1   3 use strict;
  1         2  
  1         28  
5              
6 1     1   3 use vars qw(@ISA $VERSION);
  1         1  
  1         63  
7              
8             =head1 NAME
9              
10             App::Math::Tutor::Cmd::Natural::Cmd::Add - Plugin for addition and subtraction of natural numbers
11              
12             =cut
13              
14             our $VERSION = '0.005';
15              
16 1     1   4 use Moo;
  1         1  
  1         5  
17 1     1   253 use MooX::Cmd;
  1         2  
  1         6  
18 1     1   1396 use MooX::Options;
  1         2  
  1         6  
19              
20             has template_filename => (
21             is => "ro",
22             default => "twocols"
23             );
24              
25             with "App::Math::Tutor::Role::NaturalExercise";
26              
27 0     0     sub _build_command_names { qw(add sub); }
28              
29             sub _build_exercises
30             {
31 0     0     my ($self) = @_;
32              
33 0           my (@tasks);
34 0           foreach my $i ( 1 .. $self->quantity )
35             {
36 0           my @line;
37 0           foreach my $j ( 0 .. 1 )
38             {
39 0           my ( $a, $b ) = $self->get_natural_number(2);
40 0           push @line, [ $a, $b ];
41             }
42 0           push @tasks, \@line;
43             }
44              
45 0           my $exercises = {
46             section => "Natural number addition / subtraction",
47             caption => 'NaturalNums',
48             label => 'natural_number_addition',
49             header => [ [ 'Natural Number Addition', 'Natural Number Subtraction' ] ],
50             solutions => [],
51             challenges => [],
52             };
53              
54 0           foreach my $line (@tasks)
55             {
56 0           my ( @solution, @challenge );
57              
58 0           foreach my $i ( 0 .. 1 )
59             {
60 0           my ( $a, $b ) = @{ $line->[$i] };
  0            
61 0 0         my $op = $i ? '-' : '+';
62 0 0 0       $op eq '-' and $a < $b and ( $b, $a ) = ( $a, $b );
63 0           push @challenge, sprintf( '$ %s %s %s = $', $a, $op, $b );
64              
65 0           my @way; # remember Frank Sinatra :)
66 0           push @way, sprintf( '%s %s %s', $a, $op, $b );
67 0 0         push @way, $op eq "+" ? $a->_numify + $b->_numify : $a->_numify - $b->_numify;
68              
69 0           push( @solution, '$ ' . join( " = ", @way ) . ' $' );
70             }
71              
72 0           push( @{ $exercises->{solutions} }, \@solution );
  0            
73 0           push( @{ $exercises->{challenges} }, \@challenge );
  0            
74             }
75              
76 0           $exercises;
77             }
78              
79             =head1 LICENSE AND COPYRIGHT
80              
81             Copyright 2010-2014 Jens Rehsack.
82              
83             This program is free software; you can redistribute it and/or modify it
84             under the terms of either: the GNU General Public License as published
85             by the Free Software Foundation; or the Artistic License.
86              
87             See http://dev.perl.org/licenses/ for more information.
88              
89             =cut
90              
91             1;