From b1161e9bfb55648fbfb09ec202e0a14f5ac95923 Mon Sep 17 00:00:00 2001 From: Alex Jordan Date: Wed, 21 Jun 2023 16:48:45 -0700 Subject: [PATCH 1/8] a few additional units --- lib/Units.pm | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/lib/Units.pm b/lib/Units.pm index 3b0912fd37..77deea5a8e 100644 --- a/lib/Units.pm +++ b/lib/Units.pm @@ -122,11 +122,12 @@ our %known_units = ( hour => { factor => 3600, s => 1, - aliases => [ 'hours', 'hr', 'h' ] + aliases => [ 'hours', 'hrs', 'hr', 'h' ] }, day => { - factor => 86400, - s => 1 + factor => 86400, + s => 1, + aliases => ['days'] }, month => { # 60 * 60 * 24 * 30 factor => 2592000, @@ -180,6 +181,11 @@ our %known_units = ( factor => 1E-15, m => 1 }, + meter => { + factor => 1, + m => 1, + aliases => ['meters'] + }, # ENGLISH LENGTHS inch => { @@ -233,14 +239,19 @@ our %known_units = ( m => 3, aliases => ['cups'] }, + gallon => { + factor => 0.00378541, + m => 3, + aliases => [ 'gallons', 'gal' ] + }, # VELOCITY: fundamental unit m/s (meters per second) - knots => { # nautical miles per hour + knots => { # nautical miles per hour factor => 0.5144444444, m => 1, s => -1 }, - c => { # exact speed of light + c => { # exact speed of light factor => 299792458, m => 1, s => -1 @@ -335,10 +346,11 @@ our %known_units = ( aliases => [ 'pound', 'pounds', 'lbs' ] }, ton => { - factor => 8900, - m => 1, - kg => 1, - s => -2 + factor => 8900, + m => 1, + kg => 1, + s => -2, + aliases => ['tons'] }, # ENERGY: fundamental unit m^2 kg / s^2 From b1c186b2a3e6dcd471ac53268aeabe62130ebf99 Mon Sep 17 00:00:00 2001 From: Alex Jordan Date: Wed, 21 Jun 2023 19:01:09 -0700 Subject: [PATCH 2/8] move meter word units to aliases of m --- lib/Units.pm | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/lib/Units.pm b/lib/Units.pm index 77deea5a8e..33121b7e4c 100644 --- a/lib/Units.pm +++ b/lib/Units.pm @@ -40,8 +40,9 @@ our $PI = 4 * atan2(1, 1); our %known_units = ( m => { - factor => 1, - m => 1 + factor => 1, + m => 1, + aliases => [ 'meter', 'meters' ] }, kg => { factor => 1, @@ -181,11 +182,6 @@ our %known_units = ( factor => 1E-15, m => 1 }, - meter => { - factor => 1, - m => 1, - aliases => ['meters'] - }, # ENGLISH LENGTHS inch => { From bc1e2d2d816c442bae5384552317ede7f090f330 Mon Sep 17 00:00:00 2001 From: Peter Staab Date: Mon, 26 Jun 2023 08:44:20 -0400 Subject: [PATCH 3/8] Add pints, quarts and some volume unit unit tests --- htdocs/helpFiles/Entering-Units.html | 25 +++++++++- lib/Units.pm | 11 +++++ t/units/volume.t | 74 ++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 t/units/volume.t diff --git a/htdocs/helpFiles/Entering-Units.html b/htdocs/helpFiles/Entering-Units.html index da55b4ad05..d698429af1 100644 --- a/htdocs/helpFiles/Entering-Units.html +++ b/htdocs/helpFiles/Entering-Units.html @@ -23,7 +23,7 @@

Units Available in WeBWorK

Hours - hr + hr or hour or h Days @@ -55,7 +55,7 @@

Units Available in WeBWorK

Meters - m + m or meters Centimeters @@ -109,6 +109,27 @@

Units Available in WeBWorK

Milliliters ml + + Deciliters + dL + + + Cups + cup + + + Pints + pt or pint + + + Quarts + qt or quart + + + Gallons + gal or gallon + + Force diff --git a/lib/Units.pm b/lib/Units.pm index 33121b7e4c..45c72084be 100644 --- a/lib/Units.pm +++ b/lib/Units.pm @@ -230,11 +230,22 @@ our %known_units = ( factor => 0.0001, m => 3 }, + # U.S./English volume units cup => { factor => 0.000236588, m => 3, aliases => ['cups'] }, + pt => { + factor => 0.000473176473, + m => 3, + aliases => [ 'pint', 'pints' ] + }, + qt => { + factor => 0.000946352946, + m => 3, + aliases => [ 'quart', 'quarts' ] + }, gallon => { factor => 0.00378541, m => 3, diff --git a/t/units/volume.t b/t/units/volume.t new file mode 100644 index 0000000000..f8b1c1d808 --- /dev/null +++ b/t/units/volume.t @@ -0,0 +1,74 @@ +#!/usr/bin/env perl + +use Test2::V0 '!E', { E => 'EXISTS' }; + +die "PG_ROOT not found in environment.\n" unless $ENV{PG_ROOT}; +do "$ENV{PG_ROOT}/t/build_PG_envir.pl"; + +use lib "$ENV{PG_ROOT}/lib"; + +use Units qw(evaluate_units); +use Parser::Legacy::NumberWithUnits; + +loadMacros('parserNumberWithUnits.pl'); + +my $cubic_meter = NumberWithUnits(1, 'm^3'); +my $liter = NumberWithUnits(1, 'L'); +my $milliliter = NumberWithUnits(1, 'ml'); +my $deciliter = NumberWithUnits(1, 'dL'); + +subtest 'metric LaTeX output' => sub { + is $cubic_meter->TeX, '1\ {\rm m^{3}}', 'LaTeX output for 1 cubic meter'; + is $liter->TeX, '1\ {\rm L}', 'LaTeX output for 1 liter'; + is $deciliter->TeX, '1\ {\rm dL}', 'LaTeX output for 1 deciliter'; + is $milliliter->TeX, '1\ {\rm ml}', 'LaTeX output for 1 milliliter'; +}; + +subtest 'metric unit aliases' => sub { + is { evaluate_units('ml') }, { evaluate_units('cc') }, '1 mL = 1 cc'; +}; + +subtest 'metric volume conversion' => sub { + is multiply_by(1000, evaluate_units('L')), { evaluate_units('m^3') }, '1000 L = 1 m^3'; + is multiply_by(1000, evaluate_units('ml')), { evaluate_units('L') }, '1000 ml = 1 L'; + is multiply_by(10, evaluate_units('dL')), { evaluate_units('L') }, '10 dL = 1 L'; +}; + +my $gallon = NumberWithUnits(1, 'gal'); +my $quart = NumberWithUnits(1, 'qt'); +my $pint = NumberWithUnits(1, 'pt'); +my $cup = NumberWithUnits(1, 'cup'); + +subtest 'U.S. Units LaTeX output' => sub { + is $gallon->TeX, '1\ {\rm gal}', 'LaTeX output for 1 gallon'; + is $quart->TeX, '1\ {\rm qt}', 'LaTeX output for 1 quart'; + is $pint->TeX, '1\ {\rm pt}', 'LaTeX output for 1 pint'; + is $cup->TeX, '1\ {\rm cup}', 'LaTeX output for 1 cup'; +}; + +subtest 'metric unit aliases' => sub { + is { evaluate_units('cup') }, { evaluate_units('cups') }, 'cups alias'; + is { evaluate_units('pt') }, { evaluate_units('pint') }, 'pint alias'; + is { evaluate_units('pt') }, { evaluate_units('pints') }, 'pints alias'; + is { evaluate_units('qt') }, { evaluate_units('quart') }, 'quart alias'; + is { evaluate_units('qt') }, { evaluate_units('quarts') }, 'pint alias'; + is { evaluate_units('gallon') }, { evaluate_units('gal') }, 'gal alias'; + is { evaluate_units('gallon') }, { evaluate_units('gallons') }, 'gallons alias'; +}; + +subtest 'U.S. volume conversion' => sub { + is multiply_by(3.78541, evaluate_units('L')), { evaluate_units('gal') }, '3.785412 L = 1 gal'; + # Switch to check_score to do fuzzy comparison since cups/pints/quart/gallons are defined in + # terms of cubic meters. + is check_score(NumberWithUnits(2, 'cup'), $pint), 1, '2 cups = 1 pint'; + is check_score(NumberWithUnits(2, 'pint'), $quart), 1, '2 pints = 1 quart'; + is check_score(NumberWithUnits(4, 'quart'), $gallon), 1, '4 quarts = 1 gallon'; +}; + +sub multiply_by { + my ($conversion, %unit) = @_; + $unit{factor} *= $conversion; + return \%unit; +} + +done_testing(); From f61d9669d4f958c7b335d684697c57d49cec2980 Mon Sep 17 00:00:00 2001 From: Peter Staab Date: Mon, 26 Jun 2023 12:34:15 -0400 Subject: [PATCH 4/8] add metre, meters and some other documentation --- htdocs/helpFiles/Entering-Units.html | 34 ++++++++++++++-------------- lib/Units.pm | 10 ++++---- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/htdocs/helpFiles/Entering-Units.html b/htdocs/helpFiles/Entering-Units.html index d698429af1..cb5767c2a6 100644 --- a/htdocs/helpFiles/Entering-Units.html +++ b/htdocs/helpFiles/Entering-Units.html @@ -15,23 +15,23 @@

Units Available in WeBWorK

Seconds - s + s, sec, second or seconds Minutes - min + min, minute or minutes Hours - hr or hour or h + hr, h, hour or hours Days - day + day or days Years - yr + yr, year or years Milliseconds @@ -43,19 +43,19 @@

Units Available in WeBWorK

Feet - ft + ft, foot or feet Inches - in + in, inch or inches Miles - mi + mi, mile or miles Meters - m or meters + m, meter, metre, meters or metres Centimeters @@ -115,19 +115,19 @@

Units Available in WeBWorK

Cups - cup + cup or cups Pints - pt or pint + pt, pint or pints Quarts - qt or quart + qt, quart or quarts Gallons - gal or gallon + gal, gallon or gallons @@ -144,11 +144,11 @@

Units Available in WeBWorK

Pounds - lb + lb, lbs, pound or pounds Tons - ton + ton or tons @@ -212,11 +212,11 @@

Units Available in WeBWorK

Angle degrees - deg + deg, º, degree or degrees Angle radians - rad + rad, radian or radians

diff --git a/lib/Units.pm b/lib/Units.pm index 45c72084be..5fb6c479a3 100644 --- a/lib/Units.pm +++ b/lib/Units.pm @@ -42,7 +42,7 @@ our %known_units = ( m => { factor => 1, m => 1, - aliases => [ 'meter', 'meters' ] + aliases => [ 'meter', 'meters', 'metre', 'metres' ] }, kg => { factor => 1, @@ -236,15 +236,15 @@ our %known_units = ( m => 3, aliases => ['cups'] }, - pt => { + pint => { factor => 0.000473176473, m => 3, - aliases => [ 'pint', 'pints' ] + aliases => [ 'pt', 'pints' ] }, - qt => { + quart => { factor => 0.000946352946, m => 3, - aliases => [ 'quart', 'quarts' ] + aliases => [ 'qt', 'quarts' ] }, gallon => { factor => 0.00378541, From b802c8db7324a38f595f321c655a2d081bb4e01d Mon Sep 17 00:00:00 2001 From: Peter Staab Date: Tue, 27 Jun 2023 10:28:38 -0400 Subject: [PATCH 5/8] a few more changes. --- htdocs/helpFiles/Entering-Units.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/helpFiles/Entering-Units.html b/htdocs/helpFiles/Entering-Units.html index cb5767c2a6..fd08c9315b 100644 --- a/htdocs/helpFiles/Entering-Units.html +++ b/htdocs/helpFiles/Entering-Units.html @@ -23,7 +23,7 @@

Units Available in WeBWorK

Hours - hr, h, hour or hours + hr, hrs, h, hour or hours Days @@ -212,7 +212,7 @@

Units Available in WeBWorK

Angle degrees - deg, º, degree or degrees + deg, °, degree or degrees Angle radians From d3e0405b2540531164c1dae908adc4e1479021ec Mon Sep 17 00:00:00 2001 From: Alex Jordan Date: Wed, 21 Jun 2023 16:48:45 -0700 Subject: [PATCH 6/8] a few additional units --- lib/Units.pm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/Units.pm b/lib/Units.pm index 5fb6c479a3..076fcd1a67 100644 --- a/lib/Units.pm +++ b/lib/Units.pm @@ -182,6 +182,11 @@ our %known_units = ( factor => 1E-15, m => 1 }, + meter => { + factor => 1, + m => 1, + aliases => ['meters'] + }, # ENGLISH LENGTHS inch => { From f4f638a2aea2eb1d422851c32752566911aeb1d9 Mon Sep 17 00:00:00 2001 From: Alex Jordan Date: Wed, 21 Jun 2023 19:01:09 -0700 Subject: [PATCH 7/8] move meter word units to aliases of m --- lib/Units.pm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/Units.pm b/lib/Units.pm index 076fcd1a67..5fb6c479a3 100644 --- a/lib/Units.pm +++ b/lib/Units.pm @@ -182,11 +182,6 @@ our %known_units = ( factor => 1E-15, m => 1 }, - meter => { - factor => 1, - m => 1, - aliases => ['meters'] - }, # ENGLISH LENGTHS inch => { From 5c68306def63f3303d242a32a5b0050207a39839 Mon Sep 17 00:00:00 2001 From: Alex Jordan Date: Thu, 6 Jul 2023 11:16:55 -0700 Subject: [PATCH 8/8] specify US gallons in help file --- htdocs/helpFiles/Entering-Units.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/helpFiles/Entering-Units.html b/htdocs/helpFiles/Entering-Units.html index fd08c9315b..271aa54eae 100644 --- a/htdocs/helpFiles/Entering-Units.html +++ b/htdocs/helpFiles/Entering-Units.html @@ -114,19 +114,19 @@

Units Available in WeBWorK

dL - Cups + US Cups cup or cups - Pints + US Pints pt, pint or pints - Quarts + US Quarts qt, quart or quarts - Gallons + US Gallons gal, gallon or gallons