Skip to content

Commit bc1e2d2

Browse files
pstaabpAlex-Jordan
authored andcommitted
Add pints, quarts and some volume unit unit tests
1 parent b1c186b commit bc1e2d2

File tree

3 files changed

+108
-2
lines changed

3 files changed

+108
-2
lines changed

htdocs/helpFiles/Entering-Units.html

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ <h2 style="text-align: center">Units Available in WeBWorK</h2>
2323
</tr>
2424
<tr>
2525
<td style="padding: 0.5rem; border: 1px solid black">Hours</td>
26-
<td style="padding: 0.5rem; border: 1px solid black; text-align: center">hr</td>
26+
<td style="padding: 0.5rem; border: 1px solid black; text-align: center">hr or hour or h</td>
2727
</tr>
2828
<tr>
2929
<td style="padding: 0.5rem; border: 1px solid black">Days</td>
@@ -55,7 +55,7 @@ <h2 style="text-align: center">Units Available in WeBWorK</h2>
5555
</tr>
5656
<tr>
5757
<td style="padding: 0.5rem; border: 1px solid black">Meters</td>
58-
<td style="padding: 0.5rem; border: 1px solid black; text-align: center">m</td>
58+
<td style="padding: 0.5rem; border: 1px solid black; text-align: center">m or meters</td>
5959
</tr>
6060
<tr>
6161
<td style="padding: 0.5rem; border: 1px solid black">Centimeters</td>
@@ -109,6 +109,27 @@ <h2 style="text-align: center">Units Available in WeBWorK</h2>
109109
<td style="padding: 0.5rem; border: 1px solid black">Milliliters</td>
110110
<td style="padding: 0.5rem; border: 1px solid black; text-align: center">ml</td>
111111
</tr>
112+
<tr>
113+
<td style="padding: 0.5rem; border: 1px solid black">Deciliters</td>
114+
<td style="padding: 0.5rem; border: 1px solid black; text-align: center">dL</td>
115+
</tr>
116+
<tr>
117+
<td style="padding: 0.5rem; border: 1px solid black">Cups</td>
118+
<td style="padding: 0.5rem; border: 1px solid black; text-align: center">cup</td>
119+
</tr>
120+
<tr>
121+
<td style="padding: 0.5rem; border: 1px solid black">Pints</td>
122+
<td style="padding: 0.5rem; border: 1px solid black; text-align: center">pt or pint</td>
123+
</tr>
124+
<tr>
125+
<td style="padding: 0.5rem; border: 1px solid black">Quarts</td>
126+
<td style="padding: 0.5rem; border: 1px solid black; text-align: center">qt or quart</td>
127+
</tr>
128+
<tr>
129+
<td style="padding: 0.5rem; border: 1px solid black">Gallons</td>
130+
<td style="padding: 0.5rem; border: 1px solid black; text-align: center">gal or gallon</td>
131+
</tr>
132+
112133

113134
<tr>
114135
<td colspan="2" style="padding: 0.5rem; border: 1px solid black; text-align: center"><b>Force</b></td>

lib/Units.pm

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,11 +230,22 @@ our %known_units = (
230230
factor => 0.0001,
231231
m => 3
232232
},
233+
# U.S./English volume units
233234
cup => {
234235
factor => 0.000236588,
235236
m => 3,
236237
aliases => ['cups']
237238
},
239+
pt => {
240+
factor => 0.000473176473,
241+
m => 3,
242+
aliases => [ 'pint', 'pints' ]
243+
},
244+
qt => {
245+
factor => 0.000946352946,
246+
m => 3,
247+
aliases => [ 'quart', 'quarts' ]
248+
},
238249
gallon => {
239250
factor => 0.00378541,
240251
m => 3,

t/units/volume.t

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#!/usr/bin/env perl
2+
3+
use Test2::V0 '!E', { E => 'EXISTS' };
4+
5+
die "PG_ROOT not found in environment.\n" unless $ENV{PG_ROOT};
6+
do "$ENV{PG_ROOT}/t/build_PG_envir.pl";
7+
8+
use lib "$ENV{PG_ROOT}/lib";
9+
10+
use Units qw(evaluate_units);
11+
use Parser::Legacy::NumberWithUnits;
12+
13+
loadMacros('parserNumberWithUnits.pl');
14+
15+
my $cubic_meter = NumberWithUnits(1, 'm^3');
16+
my $liter = NumberWithUnits(1, 'L');
17+
my $milliliter = NumberWithUnits(1, 'ml');
18+
my $deciliter = NumberWithUnits(1, 'dL');
19+
20+
subtest 'metric LaTeX output' => sub {
21+
is $cubic_meter->TeX, '1\ {\rm m^{3}}', 'LaTeX output for 1 cubic meter';
22+
is $liter->TeX, '1\ {\rm L}', 'LaTeX output for 1 liter';
23+
is $deciliter->TeX, '1\ {\rm dL}', 'LaTeX output for 1 deciliter';
24+
is $milliliter->TeX, '1\ {\rm ml}', 'LaTeX output for 1 milliliter';
25+
};
26+
27+
subtest 'metric unit aliases' => sub {
28+
is { evaluate_units('ml') }, { evaluate_units('cc') }, '1 mL = 1 cc';
29+
};
30+
31+
subtest 'metric volume conversion' => sub {
32+
is multiply_by(1000, evaluate_units('L')), { evaluate_units('m^3') }, '1000 L = 1 m^3';
33+
is multiply_by(1000, evaluate_units('ml')), { evaluate_units('L') }, '1000 ml = 1 L';
34+
is multiply_by(10, evaluate_units('dL')), { evaluate_units('L') }, '10 dL = 1 L';
35+
};
36+
37+
my $gallon = NumberWithUnits(1, 'gal');
38+
my $quart = NumberWithUnits(1, 'qt');
39+
my $pint = NumberWithUnits(1, 'pt');
40+
my $cup = NumberWithUnits(1, 'cup');
41+
42+
subtest 'U.S. Units LaTeX output' => sub {
43+
is $gallon->TeX, '1\ {\rm gal}', 'LaTeX output for 1 gallon';
44+
is $quart->TeX, '1\ {\rm qt}', 'LaTeX output for 1 quart';
45+
is $pint->TeX, '1\ {\rm pt}', 'LaTeX output for 1 pint';
46+
is $cup->TeX, '1\ {\rm cup}', 'LaTeX output for 1 cup';
47+
};
48+
49+
subtest 'metric unit aliases' => sub {
50+
is { evaluate_units('cup') }, { evaluate_units('cups') }, 'cups alias';
51+
is { evaluate_units('pt') }, { evaluate_units('pint') }, 'pint alias';
52+
is { evaluate_units('pt') }, { evaluate_units('pints') }, 'pints alias';
53+
is { evaluate_units('qt') }, { evaluate_units('quart') }, 'quart alias';
54+
is { evaluate_units('qt') }, { evaluate_units('quarts') }, 'pint alias';
55+
is { evaluate_units('gallon') }, { evaluate_units('gal') }, 'gal alias';
56+
is { evaluate_units('gallon') }, { evaluate_units('gallons') }, 'gallons alias';
57+
};
58+
59+
subtest 'U.S. volume conversion' => sub {
60+
is multiply_by(3.78541, evaluate_units('L')), { evaluate_units('gal') }, '3.785412 L = 1 gal';
61+
# Switch to check_score to do fuzzy comparison since cups/pints/quart/gallons are defined in
62+
# terms of cubic meters.
63+
is check_score(NumberWithUnits(2, 'cup'), $pint), 1, '2 cups = 1 pint';
64+
is check_score(NumberWithUnits(2, 'pint'), $quart), 1, '2 pints = 1 quart';
65+
is check_score(NumberWithUnits(4, 'quart'), $gallon), 1, '4 quarts = 1 gallon';
66+
};
67+
68+
sub multiply_by {
69+
my ($conversion, %unit) = @_;
70+
$unit{factor} *= $conversion;
71+
return \%unit;
72+
}
73+
74+
done_testing();

0 commit comments

Comments
 (0)