File Coverage

blib/lib/Math/FractionDemo.pm
Criterion Covered Total %
statement 111 136 81.6
branch 16 30 53.3
condition 2 5 40.0
subroutine 7 8 87.5
pod 2 6 33.3
total 138 185 74.5


line stmt bran cond sub pod time code
1             package Math::FractionDemo;
2              
3             # Math::Fraction v.53b (2 Feb 1998) Test Script
4              
5 1     1   1212 use Math::Fraction qw(:DEFAULT :STR_NUM);
  1         3  
  1         173  
6              
7             require Exporter;
8 1     1   5 use vars qw($VERSION);
  1         1  
  1         1223  
9             $VERSION = ".53";
10             @ISA = qw(Exporter);
11             @EXPORT = qw(frac_calc frac_demo);
12              
13             sub frac_calc {
14 0     0 1 0 local $^W = 0;
15             sub pevel;
16              
17 0         0 local $f1 = Math::Fraction->new(1,2);
18 0         0 local $f2 = Math::Fraction->new(1,3);
19 0         0 local $f3 = Math::Fraction->new(5,3,MIXED);
20 0         0 local $f4 = Math::Fraction->new(1,3,NO_REDUCE);
21              
22 0         0 print <<'---';
23              
24             Fraction "Calculator" for testing the Fraction Module.
25              
26             Simply enter in any valid perl expression. The results are printed
27             to the screen and stored the variable $ans for referring back to.
28              
29             Examples:
30             >5+5
31             10
32             >$ans*2
33             20
34             >frac(1,2)
35             1/2
36             >$ans*frac(1,2)
37             1/4
38              
39             To see a demonstration of the fraction module features type in "frac_demo".
40              
41             ---
42 0         0 print "Pre-Set: \$f1=$f1 \$f2=$f2 \$f3=$f3 \$f4=$f4(NO_REDUCE)\n";
43              
44 0         0 print ">";
45 0         0 local $ans;
46 0         0 while(<>) {$ans = eval; print $@; print "$ans\n>";}
  0         0  
  0         0  
  0         0  
47             }
48              
49             sub pevel {
50 47     47 0 3077 $ans = eval $_[0];
51 47 50       1544 if (not $test) {
    50          
52 0         0 print $output "$space>$_[0]\n";
53 0         0 print $output "$space $ans\n";
54             } elsif ($test eq 'TESTCREATE') {
55 0         0 print $output " pevel q~$_[0]~, q~$ans~;\n";
56             } else {
57 47 100       223 if ("$ans" eq "$_[1]") {
58 34         71 print "ok\n"
59             } else {
60 13         932 print STDERR qq~Test: $_[0]\n"$ans" ne\n"$_[1]"\n~;
61 13         40 print "not ok\n"
62             }
63             }
64             }
65              
66             sub evelp {
67 27     27 0 2124 eval $_[0];
68 27 50       108 if (not $test) {
    50          
69 0         0 print $output "$space>$_[0]\n";
70             } elsif ($test eq 'TESTCREATE') {
71 0         0 print $output " evelp q~$_[0]~;\n";
72             } else {
73 27         49 print "ok\n"
74             }
75             }
76              
77             sub pause {
78 6 50   6 0 29 if (not $test) {
    50          
79 0 0       0 if ($output eq STDOUT) {
80 0         0 print "Press Enter to go on\n";
81 0         0 ;
82 0         0 Math::Fraction->load_set(DEFAULT);
83             } else {
84 0         0 print $output "$space\n";
85             }
86             } elsif ($test eq 'TESTCREATE') {
87 0         0 print $output " pause;\n";
88             } else {
89             }
90             }
91              
92             sub s {
93 5 100   5 0 6 my @ret = map {$_ eq undef() ? 'undef' : $_} @_;
  25         48  
94 5         39 "@ret";
95             }
96              
97             sub frac_demo {
98 1     1 1 6 local $^W = 0;
99 1   50     8 local($output) = $_[0] || STDOUT;
100 1         3 local($test,$space);
101 1 50 33     7 if ($_[1] eq 'TEST' || $_[1] eq 'TESTCREATE') {
102 1         4 $test = $_[1]
103             } else {
104 0         0 $space = " "x$_[1];
105             }
106            
107 1         4 local($f1,$f2);
108              
109 1 50       7 my $set = Math::Fraction->temp_set unless $test;
110            
111 1 50       28 print "1..74\n" if $test eq 'TEST';
112              
113 1         6 pevel q~frac(1, 3)~, q~1/3~;
114 1         4 pevel q~frac(4, 3, MIXED)~, q~1 1/3~;
115 1         3 pevel q~frac(1, 1, 3)~, q~4/3~;
116 1         3 pevel q~frac(1, 1, 3, MIXED)~, q~1 1/3~;
117 1         3 pevel q~frac(10)~, q~10/1~;
118 1         4 pevel q~frac(10, MIXED)~, q~10~;
119 1         3 pevel q~frac(.66667)~, q~2/3~;
120 1         4 pevel q~frac(1.33333, MIXED)~, q~1 1/3~;
121 1         6 pevel q~frac("5/6")~, q~5/6~;
122 1         4 pevel q~frac("1 2/3")~, q~5/3~;
123 1         3 pevel q~frac(10, 20, NO_REDUCE)~, q~10/20~;
124 1         4 pause;
125 1         4 evelp q~$f1=frac(2,3); $f2=frac(4,5);~;
126 1         4 pevel q~$f1 + $f2~, q~22/15~;
127 1         5 pevel q~$f1 * $f2~, q~8/15~;
128 1         2 pevel q~$f1 + 1.6667~, q~7/3~;
129 1         3 evelp q~$f2->modify_tag(MIXED)~;
130 1         3 pevel q~$f2 + 10~, q~10 4/5~;
131 1         3 pevel q~frac($ans, NORMAL) # trick to create a new fraction with different tags~, q~54/5~;
132 1         3 pevel q~$f1 + $f2 # Add two unlikes it goes to default mode~, q~22/15~;
133 1         4 pevel q~$f1**1.2~, q~229739670999407/373719281884655~;
134 1         3 pevel q~$f1->num**1.2~, q~0.614738607654485~;
135 1         3 pevel q~frac(1,2)+frac(2,5)~, q~9/10~;
136 1         4 pause;
137 1         4 evelp q~$f1=frac(5,3,NORMAL); $f2=frac(7,5);~;
138 1         14 pevel q~"$f1 $f2"~, q~5/3 7/5~;
139 1         3 evelp q~Math::Fraction->modify_tag(MIXED)~;
140 1         4 pevel q~"$f1 $f2"~, q~5/3 1 2/5~;
141 1         2 pevel q~$f1 = frac("3267893629762/32678632179820")~, q~3267893629762/32678632179820~;
142 1         3 pevel q~$f2 = frac("5326875886785/76893467996910")~, q~5326875886785/76893467996910~;
143 1         3 pevel q~$f1->is_tag(BIG).",".$f2->is_tag(BIG) # Notice how neither of them is BIG ~, q~0,0~;
144 1         2 pevel q~$f1+$f2~, q~21267734600460495169085706/125638667885089122116217810~;
145 1         5 pevel q~$ans->is_tag(BIG) # But this answer is.~, q~1~;
146 1         3 pevel q~$f1*$f2~, q~1740766377695750621849517/251277335770178244232435620~;
147 1         5 pevel q~$ans->is_tag(BIG) # And so is this one.~, q~1~;
148 1         4 pause;
149 1         3 pevel q~$f1 = frac("3267893629762/32678632179820", BIG)~, q~3267893629762/32678632179820~;
150 1         3 pevel q~$f1->is_tag(BIG) # Notice how the big tag had no effect.~, q~0~;
151 1         3 evelp q~$f1->modify_tag(NO_AUTO, BIG)~;
152 1         4 pevel q~$f1->is_tag(BIG) # But now it does. You have to turn off AUTO.~, q~1~;
153 1         2 pevel q~$f1->num~, q~.10000093063197482237806917498797382196606~;
154 1         3 evelp q~Math::Fraction->modify_digits(15)~;
155 1         4 pevel q~$f1->num~, q~.1000009306319748~;
156 1         4 pevel q~$f1 = frac("0.1231231234564564564564564564561234567891234567891234")~, q~13680347037037036999999999999963000037/111111111000000000000000000000000000000~;
157 1         5 evelp q~Math::Fraction->modify_digits(65)~;
158 1         4 pevel q~$f1->num~, q~.123123123456456456456456456456123456789123456789123456789123456789~;
159 1         4 pause;
160 1         3 evelp q~$f1 = frac(7,5);~;
161 1         2 evelp q~$f2 = frac("3267893629762/32678632179820", NO_AUTO, BIG)~;
162 1         3 evelp q~Math::Fraction->modify_tag(MIXED); Math::Fraction->modify_digits(60)~;
163 1         3 pevel q~"$f1 ".$f2->num~, q~1 2/5 .1000009306319748223780691749879738219660647769485035912494771~;
164 1         4 evelp q~Math::Fraction->load_set(DEFAULT)~;
165 1         2 pevel q~"$f1 ".$f2->num~, q~7/5 .10000093063197482237806917498797382196606~;
166 1         2 evelp q~Math::Fraction->modify_digits(25)~;
167 1         3 pevel q~"$f1 ".$f2->num~, q~7/5 .10000093063197482237806917~;
168 1         4 evelp q~$s = Math::Fraction->temp_set~;
169 1         2 evelp q~Math::Fraction->modify_tag(MIXED); Math::Fraction->modify_digits(15)~;
170 1         2 pevel q~"$f1 ".$f2->num~, q~1 2/5 .1000009306319748~;
171 1         4 evelp q~Math::Fraction->temp_set($s)~;
172 1         2 pevel q~Math::Fraction->exists_set($s)~, q~~;
173 1         3 pevel q~"$f1 ".$f2->num # Notice how it goes back to the previous settings.~, q~7/5 .10000093063197482237806917~;
174 1         4 pause;
175 1         3 evelp q~Math::Fraction->name_set('temp1')~;
176 1         3 evelp q~Math::Fraction->modify_tag(MIXED, NO_AUTO)~;
177 1         3 evelp q~Math::Fraction->modify_digits(60)~;
178 1         10 pevel q~&s(Math::Fraction->tags, Math::Fraction->digits)~, q~MIXED REDUCE SMALL NO_AUTO 60~;
179 1         3 evelp q~Math::Fraction->save_set # If no name is given it will be saved via~;
180 1         3 evelp q~ # its given name~;
181 1         2 evelp q~Math::Fraction->load_set(DEFAULT)~;
182 1         3 pevel q~&s(Math::Fraction->tags, Math::Fraction->digits)~, q~NORMAL REDUCE SMALL AUTO undef~;
183 1         2 pevel q~&s(Math::Fraction->tags('temp1'), Math::Fraction->digits('temp1'))~, q~MIXED REDUCE SMALL NO_AUTO 60~;
184 1         3 evelp q~ # ^^ Notice how this lets you preview other sets with out loading them.~;
185 1         3 evelp q~Math::Fraction->load_set(DEFAULT)~;
186 1         3 evelp q~Math::Fraction->use_set('temp1')~;
187 1         3 evelp q~Math::Fraction->modify_tag(NO_REDUCE)~;
188 1         3 pevel q~&s(Math::Fraction->tags, Math::Fraction->digits)~, q~MIXED NO_REDUCE SMALL NO_AUTO 60~;
189 1         2 pevel q~&s(Math::Fraction->tags('temp1'), Math::Fraction->digits('temp1'))~, q~MIXED NO_REDUCE SMALL NO_AUTO 60~;
190 1         2 evelp q~ # ^^ Notice how this also modifies the temp1 tag becuase it is being used~;
191 1         3 evelp q~ # if it was just loaded it would not do this becuase there is no link.~;
192 1         3 pause;
193              
194 1 50       3 Math::Fraction->del_set('temp1') unless $test;
195 1 50       3 Math::Fraction->temp_set($set) unless $test;
196              
197 1 50       4 print "END\n" if $test eq 'TEST';
198            
199 1           return undef;
200             }
201              
202             1;
203              
204             __END__