From 46f57bba5488ca21e81abab9adc1fb1ef6668745 Mon Sep 17 00:00:00 2001
From: Rajat Agarwal <rajatagarwal@alumni.purdue.edu>
Date: Fri, 20 Sep 2024 19:34:35 -0700
Subject: [PATCH] Add quintals and ton aliases

Add the quintal unit/aliases and also add two aliases for ton with the
British spelling
---
 cache/weight.json            | 230 +++++++++++++++++++++++++++++++++++
 lib/measured/units/weight.rb |   3 +-
 test/units/weight_test.rb    |  75 +++++++++++-
 3 files changed, 306 insertions(+), 2 deletions(-)

diff --git a/cache/weight.json b/cache/weight.json
index f2e4ecc..321f50d 100644
--- a/cache/weight.json
+++ b/cache/weight.json
@@ -89,6 +89,10 @@
       "numerator": 1,
       "denominator": 1000000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 100000
+    },
     "slug": {
       "numerator": 1000,
       "denominator": 14593903
@@ -203,6 +207,10 @@
       "numerator": 1,
       "denominator": 1000000000000000000000000000000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 100000000000000000000000000000
+    },
     "slug": {
       "numerator": 1,
       "denominator": 14593903000000000000000000000
@@ -317,6 +325,10 @@
       "numerator": 1,
       "denominator": 1000000000000000000000000000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 100000000000000000000000000
+    },
     "slug": {
       "numerator": 1,
       "denominator": 14593903000000000000000000
@@ -431,6 +443,10 @@
       "numerator": 1,
       "denominator": 1000000000000000000000000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 100000000000000000000000
+    },
     "slug": {
       "numerator": 1,
       "denominator": 14593903000000000000000
@@ -545,6 +561,10 @@
       "numerator": 1,
       "denominator": 1000000000000000000000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 100000000000000000000
+    },
     "slug": {
       "numerator": 1,
       "denominator": 14593903000000000000
@@ -659,6 +679,10 @@
       "numerator": 1,
       "denominator": 1000000000000000000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 100000000000000000
+    },
     "slug": {
       "numerator": 1,
       "denominator": 14593903000000000
@@ -773,6 +797,10 @@
       "numerator": 1,
       "denominator": 1000000000000000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 100000000000000
+    },
     "slug": {
       "numerator": 1,
       "denominator": 14593903000000
@@ -887,6 +915,10 @@
       "numerator": 1,
       "denominator": 1000000000000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 100000000000
+    },
     "slug": {
       "numerator": 1,
       "denominator": 14593903000
@@ -1001,6 +1033,10 @@
       "numerator": 1,
       "denominator": 1000000000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 100000000
+    },
     "slug": {
       "numerator": 1,
       "denominator": 14593903
@@ -1115,6 +1151,10 @@
       "numerator": 1,
       "denominator": 100000000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 10000000
+    },
     "slug": {
       "numerator": 10,
       "denominator": 14593903
@@ -1229,6 +1269,10 @@
       "numerator": 1,
       "denominator": 10000000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 1000000
+    },
     "slug": {
       "numerator": 100,
       "denominator": 14593903
@@ -1343,6 +1387,10 @@
       "numerator": 1,
       "denominator": 100000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 10000
+    },
     "slug": {
       "numerator": 10000,
       "denominator": 14593903
@@ -1457,6 +1505,10 @@
       "numerator": 1,
       "denominator": 10000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 1000
+    },
     "slug": {
       "numerator": 100000,
       "denominator": 14593903
@@ -1571,6 +1623,10 @@
       "numerator": 1,
       "denominator": 1000
     },
+    "q": {
+      "numerator": 1,
+      "denominator": 100
+    },
     "slug": {
       "numerator": 1000000,
       "denominator": 14593903
@@ -1685,6 +1741,10 @@
       "numerator": 1,
       "denominator": 1
     },
+    "q": {
+      "numerator": 10,
+      "denominator": 1
+    },
     "slug": {
       "numerator": 1000000000,
       "denominator": 14593903
@@ -1799,6 +1859,10 @@
       "numerator": 1000,
       "denominator": 1
     },
+    "q": {
+      "numerator": 10000,
+      "denominator": 1
+    },
     "slug": {
       "numerator": 1000000000000,
       "denominator": 14593903
@@ -1913,6 +1977,10 @@
       "numerator": 1000000,
       "denominator": 1
     },
+    "q": {
+      "numerator": 10000000,
+      "denominator": 1
+    },
     "slug": {
       "numerator": 1000000000000000,
       "denominator": 14593903
@@ -2027,6 +2095,10 @@
       "numerator": 1000000000,
       "denominator": 1
     },
+    "q": {
+      "numerator": 10000000000,
+      "denominator": 1
+    },
     "slug": {
       "numerator": 1000000000000000000,
       "denominator": 14593903
@@ -2141,6 +2213,10 @@
       "numerator": 1000000000000,
       "denominator": 1
     },
+    "q": {
+      "numerator": 10000000000000,
+      "denominator": 1
+    },
     "slug": {
       "numerator": 1000000000000000000000,
       "denominator": 14593903
@@ -2255,6 +2331,10 @@
       "numerator": 1000000000000000,
       "denominator": 1
     },
+    "q": {
+      "numerator": 10000000000000000,
+      "denominator": 1
+    },
     "slug": {
       "numerator": 1000000000000000000000000,
       "denominator": 14593903
@@ -2369,6 +2449,10 @@
       "numerator": 1000000000000000000,
       "denominator": 1
     },
+    "q": {
+      "numerator": 10000000000000000000,
+      "denominator": 1
+    },
     "slug": {
       "numerator": 1000000000000000000000000000,
       "denominator": 14593903
@@ -2483,6 +2567,10 @@
       "numerator": 1,
       "denominator": 1000000000000000000
     },
+    "q": {
+      "numerator": 10,
+      "denominator": 1
+    },
     "slug": {
       "numerator": 1000000000,
       "denominator": 14593903
@@ -2508,6 +2596,124 @@
       "denominator": 45359237
     }
   },
+  "q": {
+    "q": {
+      "numerator": 1,
+      "denominator": 1
+    },
+    "g": {
+      "numerator": 100000,
+      "denominator": 1
+    },
+    "yg": {
+      "numerator": 100000000000000000000000000000,
+      "denominator": 1
+    },
+    "zg": {
+      "numerator": 100000000000000000000000000,
+      "denominator": 1
+    },
+    "ag": {
+      "numerator": 100000000000000000000000,
+      "denominator": 1
+    },
+    "fg": {
+      "numerator": 100000000000000000000,
+      "denominator": 1
+    },
+    "pg": {
+      "numerator": 100000000000000000,
+      "denominator": 1
+    },
+    "ng": {
+      "numerator": 100000000000000,
+      "denominator": 1
+    },
+    "μg": {
+      "numerator": 100000000000,
+      "denominator": 1
+    },
+    "mg": {
+      "numerator": 100000000,
+      "denominator": 1
+    },
+    "cg": {
+      "numerator": 10000000,
+      "denominator": 1
+    },
+    "dg": {
+      "numerator": 1000000,
+      "denominator": 1
+    },
+    "dag": {
+      "numerator": 10000,
+      "denominator": 1
+    },
+    "hg": {
+      "numerator": 1000,
+      "denominator": 1
+    },
+    "kg": {
+      "numerator": 100,
+      "denominator": 1
+    },
+    "Mg": {
+      "numerator": 1,
+      "denominator": 10
+    },
+    "Gg": {
+      "numerator": 1,
+      "denominator": 10000
+    },
+    "Tg": {
+      "numerator": 1,
+      "denominator": 10000000
+    },
+    "Pg": {
+      "numerator": 1,
+      "denominator": 10000000000
+    },
+    "Eg": {
+      "numerator": 1,
+      "denominator": 10000000000000
+    },
+    "Zg": {
+      "numerator": 1,
+      "denominator": 10000000000000000
+    },
+    "Yg": {
+      "numerator": 1,
+      "denominator": 10000000000000000000
+    },
+    "t": {
+      "numerator": 1,
+      "denominator": 10
+    },
+    "slug": {
+      "numerator": 100000000,
+      "denominator": 14593903
+    },
+    "N": {
+      "numerator": 10000000000000000000,
+      "denominator": 10197162129779283
+    },
+    "long_ton": {
+      "numerator": 31250000,
+      "denominator": 317514659
+    },
+    "short_ton": {
+      "numerator": 5000000,
+      "denominator": 45359237
+    },
+    "lb": {
+      "numerator": 10000000000,
+      "denominator": 45359237
+    },
+    "oz": {
+      "numerator": 160000000000,
+      "denominator": 45359237
+    }
+  },
   "slug": {
     "slug": {
       "numerator": 1,
@@ -2601,6 +2807,10 @@
       "numerator": 14593903,
       "denominator": 1000000000
     },
+    "q": {
+      "numerator": 14593903,
+      "denominator": 100000000
+    },
     "N": {
       "numerator": 1459390300000000000,
       "denominator": 10197162129779283
@@ -2715,6 +2925,10 @@
       "numerator": 10197162129779283,
       "denominator": 100000000000000000000
     },
+    "q": {
+      "numerator": 10197162129779283,
+      "denominator": 10000000000000000000
+    },
     "slug": {
       "numerator": 10197162129779283,
       "denominator": 1459390300000000000
@@ -2829,6 +3043,10 @@
       "numerator": 317514659,
       "denominator": 312500000
     },
+    "q": {
+      "numerator": 317514659,
+      "denominator": 31250000
+    },
     "slug": {
       "numerator": 5080234544,
       "denominator": 72969515
@@ -2943,6 +3161,10 @@
       "numerator": 45359237,
       "denominator": 50000000
     },
+    "q": {
+      "numerator": 45359237,
+      "denominator": 5000000
+    },
     "slug": {
       "numerator": 907184740,
       "denominator": 14593903
@@ -3057,6 +3279,10 @@
       "numerator": 45359237,
       "denominator": 100000000000
     },
+    "q": {
+      "numerator": 45359237,
+      "denominator": 10000000000
+    },
     "slug": {
       "numerator": 45359237,
       "denominator": 1459390300
@@ -3171,6 +3397,10 @@
       "numerator": 45359237,
       "denominator": 1600000000000
     },
+    "q": {
+      "numerator": 45359237,
+      "denominator": 160000000000
+    },
     "slug": {
       "numerator": 45359237,
       "denominator": 23350244800
diff --git a/lib/measured/units/weight.rb b/lib/measured/units/weight.rb
index 23f66f5..663a1b4 100644
--- a/lib/measured/units/weight.rb
+++ b/lib/measured/units/weight.rb
@@ -2,7 +2,8 @@
 Measured::Weight = Measured.build do
   si_unit :g, aliases: [:gram, :grams, :gm, :gms]
 
-  unit :t, value: "1000 kg", aliases: [:metric_ton, :metric_tons]
+  unit :t, value: "1000 kg", aliases: [:metric_ton, :metric_tons, :tonne, :tonnes]
+  unit :q, value: "100 kg", aliases: [:quintal, :quintals]
   unit :slug, value: "14.593903 kg", aliases: [:slugs]
   unit :N, value: "0.10197162129779283 kg", aliases: [:newtons, :newton]
   unit :long_ton, value: "2240 lb", aliases: [:long_tons, :weight_ton, :weight_tons, 'W/T', :imperial_ton, :imperial_tons, :displacement_ton, :displacement_tons]
diff --git a/test/units/weight_test.rb b/test/units/weight_test.rb
index 2ef5a83..583bf0d 100644
--- a/test/units/weight_test.rb
+++ b/test/units/weight_test.rb
@@ -25,6 +25,11 @@ class Measured::WeightTest < ActiveSupport::TestCase
       long_tons
       metric_ton
       metric_tons
+      tonne
+      tonnes
+      q
+      quintal
+      quintals
       newton
       newtons
       ounce
@@ -48,7 +53,7 @@ class Measured::WeightTest < ActiveSupport::TestCase
   end
 
   test ".unit_names should be the list of base unit names" do
-    expected_units = %w(N g lb long_ton oz short_ton slug t)
+    expected_units = %w(N g lb long_ton oz short_ton slug t q)
     expected_units += Measured::UnitSystemBuilder::SI_PREFIXES.map { |short, _, _| "#{short}g" }
     assert_equal expected_units.sort, Measured::Weight.unit_names
   end
@@ -98,6 +103,10 @@ class Measured::WeightTest < ActiveSupport::TestCase
     assert_exact_conversion Measured::Weight, "2000 g", "0.002 t"
   end
 
+  test ".convert_to from g to q" do
+    assert_exact_conversion Measured::Weight, "2000 g", "0.02 q"
+  end
+
   test ".convert_to from kg to g" do
     assert_exact_conversion Measured::Weight, "2000 kg", "2000000 g"
   end
@@ -134,6 +143,10 @@ class Measured::WeightTest < ActiveSupport::TestCase
     assert_exact_conversion Measured::Weight, "2000 kg", "2 t"
   end
 
+  test ".convert_to from kg to q" do
+    assert_exact_conversion Measured::Weight, "2000 kg", "20 q"
+  end
+
   test ".convert_to from lb to g" do
     assert_exact_conversion Measured::Weight, "2000 lb", "907184.74 g"
   end
@@ -170,6 +183,10 @@ class Measured::WeightTest < ActiveSupport::TestCase
     assert_conversion Measured::Weight, "2000 lb", "0.90718474 t"
   end
 
+  test ".convert_to from lb to q" do
+    assert_conversion Measured::Weight, "2000 lb", "9.0718474 q"
+  end
+
   test ".convert_to from oz to g" do
     assert_conversion Measured::Weight, "2000 oz", "56699.04625 g"
   end
@@ -206,6 +223,10 @@ class Measured::WeightTest < ActiveSupport::TestCase
     assert_conversion Measured::Weight, "2000 oz", "0.05669904625 t"
   end
 
+  test ".convert_to from oz to q" do
+    assert_conversion Measured::Weight, "2000 oz", "0.5669904625 q"
+  end
+
   test ".convert_to from slug to g" do
     assert_conversion Measured::Weight, "2000 slug", "29187806 g"
   end
@@ -242,6 +263,10 @@ class Measured::WeightTest < ActiveSupport::TestCase
     assert_conversion Measured::Weight, "2000 slug", "29.187806 t"
   end
 
+  test ".convert_to from slug to q" do
+    assert_conversion Measured::Weight, "2000 slug", "291.87806 q"
+  end
+
   test ".convert_to from short_ton to g" do
     assert_conversion Measured::Weight, "2000 short_ton", "1814369480 g"
   end
@@ -278,6 +303,10 @@ class Measured::WeightTest < ActiveSupport::TestCase
     assert_conversion Measured::Weight, "2000 short_ton", "1814.36948 t"
   end
 
+  test ".convert_to from short_ton to q" do
+    assert_conversion Measured::Weight, "2000 short_ton", "18143.6948 q"
+  end
+
   test ".convert_to from long_ton to g" do
     assert_conversion Measured::Weight, "2000 long_ton", "2032093817.6 g"
   end
@@ -314,6 +343,10 @@ class Measured::WeightTest < ActiveSupport::TestCase
     assert_conversion Measured::Weight, "2000 long_ton", "2032.0938176 t"
   end
 
+  test ".convert_to from long_ton to q" do
+    assert_conversion Measured::Weight, "2000 long_ton", "20320.938176 q"
+  end
+
   test ".convert_to from N to g" do
     assert_conversion Measured::Weight, "2000 N", "203943.24259558567 g"
   end
@@ -350,6 +383,10 @@ class Measured::WeightTest < ActiveSupport::TestCase
     assert_conversion Measured::Weight, "2000 N", "0.2039432425955857 t"
   end
 
+  test ".convert_to from N to q" do
+    assert_conversion Measured::Weight, "2000 N", "2.039432425955857 q"
+  end
+
   test ".convert_to from t to g" do
     assert_exact_conversion Measured::Weight, "2000 t", "2000000000 g"
   end
@@ -377,4 +414,40 @@ class Measured::WeightTest < ActiveSupport::TestCase
   test ".convert_to from t to t" do
     assert_conversion Measured::Weight, "2000 t", "2000 t"
   end
+
+  test ".convert_to from t to q" do
+    assert_conversion Measured::Weight, "2000 t", "20000 q"
+  end
+
+  test ".convert_to from q to g" do
+    assert_exact_conversion Measured::Weight, "2000 q", "200000000 g"
+  end
+
+  test ".convert_to from q to kg" do
+    assert_exact_conversion Measured::Weight, "2000 q", "200000 kg"
+  end
+
+  test ".convert_to from q to lb" do
+    assert_conversion Measured::Weight, "2000 q", "440924.5243697552 lb"
+  end
+
+  test ".convert_to from q to oz" do
+    assert_conversion Measured::Weight, "2000 q", "7054792.389916082 oz"
+  end
+
+  test ".convert_to from q to slug" do
+    assert_conversion Measured::Weight, "2000 q", "13704.35311239221 slug"
+  end
+
+  test ".convert_to from q to short_ton" do
+    assert_conversion Measured::Weight, "2000 q", "220.4622621848 short_ton"
+  end
+
+  test ".convert_to from q to t" do
+    assert_conversion Measured::Weight, "2000 q", "200 t"
+  end
+
+  test ".convert_to from q to q" do
+    assert_conversion Measured::Weight, "2000 q", "2000 q"
+  end
 end