Browse Source

use unit conversions as US Customary Cup from wikipedia page

Daniel Sheffield 2 years ago
parent
commit
a28acef42c
1 changed files with 48 additions and 10 deletions
  1. 48 10
      units.sql

+ 48 - 10
units.sql

@@ -1,27 +1,65 @@
 BEGIN;
 BEGIN;
+CALL insert_unit ('fl. oz. (US)');
+CALL insert_unit ('Pint (US)');
 CALL insert_unit ('Tbsp (US)');
 CALL insert_unit ('Tbsp (US)');
 CALL insert_unit ('tsp (US)');
 CALL insert_unit ('tsp (US)');
 CALL insert_unit ('Cup (US)');
 CALL insert_unit ('Cup (US)');
-CALL insert_unit_conversion ('Cup (US)', 'mL', 236.5875);
+CALL insert_unit ('Quart (US)');
+CALL insert_unit ('Gallon (US)');
+-- using customary cup as per https://en.wikipedia.org/wiki/Cup_(unit)
+CALL insert_unit_conversion ('Cup (US)', 'mL', 236.5882365);
 CALL insert_unit_conversion ('Cup (US)', 'Tbsp (US)', 16);
 CALL insert_unit_conversion ('Cup (US)', 'Tbsp (US)', 16);
-CALL insert_unit_conversion ('Tbsp (US)', 'tsp (US)', 3);
+CALL insert_unit_conversion ('Cup (US)', 'tsp (US)',  48);
+CALL insert_unit_conversion ('Cup (US)', 'fl. oz. (US)', 8);
+CALL insert_unit_conversion ('Pint (US)', 'Cup (US)', 2);
+CALL insert_unit_conversion ('Quart (US)', 'Cup (US)', 4);
+CALL insert_unit_conversion ('Gallon (US)', 'Cup (US)', 16);
+SELECT * FROM conversions;
 DO
 DO
 $$
 $$
 DECLARE
 DECLARE
   item record;
   item record;
+  msg text;
+  expected numeric(14,7);
+  result numeric(14,7);
 BEGIN
 BEGIN
   FOR item IN SELECT * FROM (VALUES
   FOR item IN SELECT * FROM (VALUES
-      ('Cup (US)', 'mL', '', 236.5875),
-      ('Cup (US)', 'Tbsp (US)', '', 17),
-      ('Tbsp (US)', 'tsp (US)', '', 3)
+      ('L', 'mL', '', 1000), -- *
+      ('mL', 'L', '', 1.0/1000),
+      ('Cup (US)', 'mL', '', 236.5882365),
+      ('mL', 'Cup (US)', '', 1/236.5882365), -- *
+      ('L', 'Cup (US)', '', 1000/236.5882365),
+      ('Cup (US)', 'Tbsp (US)', '', 16), -- *
+      ('mL', 'Tbsp (US)', '', 16/236.5882365),
+      ('Tbsp (US)', 'tsp (US)', '', 3), -- *
+      ('mL', 'tsp (US)', '', 16*3/236.5882365),
+      ('Pint (US)', 'fl. oz. (US)', '', 16), -- *
+      ('Pint (US)', 'Cup (US)', '', 2), -- *
+      ('Cup (US)', 'fl. oz. (US)', '', 8),
+      ('fl. oz. (US)', 'Tbsp (US)', '', 16*2/16),
+      ('fl. oz. (US)', 'tsp (US)', '', 16*2*3/16),
+      ('Quart (US)', 'fl. oz. (US)', '', 32), -- *
+      ('fl. oz. (US)', 'Quart (US)', '', 1.0/32),
+      ('Gallon (US)', 'fl. oz. (US)', '', 128), -- *
+      ('Gallon (US)', 'Pint (US)', '', 8),
+      ('Gallon (US)', 'Quart (US)', '', 4)
       
       
     ) AS tests(f,t,p,e) LOOP
     ) AS tests(f,t,p,e) LOOP
-    IF convert_unit(item.f, item.t, item.p) != item.e THEN
-      RAISE EXCEPTION ' convert_unit(''%'', ''%'', ''%'') != %', item.f, item.t, item.p, item.e;
-    ELSE
-      RAISE NOTICE 'convert_unit(''%'', ''%'', ''%'') = %', item.f, item.t, item.p, item.e;
-    END IF;
+    BEGIN
+      SELECT convert_unit(item.f, item.t, item.p) INTO result;
+      SELECT item.e INTO expected;
+      ASSERT result = expected, 'convert_unit('''||item.f||''', '''||item.t||''', '''||item.p||''') = '||result||' != '||expected;
+      RAISE NOTICE ' convert_unit(''%'', ''%'', ''%'') = %', item.f, item.t, item.p, result;
+      EXCEPTION
+        WHEN assert_failure THEN
+        BEGIN
+          GET STACKED DIAGNOSTICS msg = MESSAGE_TEXT;
+          RAISE WARNING '%', msg;
+        END;
+    END;
   END LOOP;
   END LOOP;
+
 END;
 END;
 $$ LANGUAGE plpgsql;
 $$ LANGUAGE plpgsql;
 ROLLBACK;
 ROLLBACK;
+