Skip to content

Conversation

@elongatedsquid
Copy link

Added the ancient roman units for quantities length, area, volume, and mass.

Values were taken from the article: https://en.wikipedia.org/wiki/Ancient_Roman_units_of_measurement

@iliekturtles
Copy link
Owner

Thanks for the PR! I made some minor formatting/comment changes, cleaned up the commit history. Diff below for reference.

Before merging I realized that tests can be added for many of these units. e.g. in area.rs a case can be added to check_units for pes / pes_quadratus. If you don't mind going through and adding some I'll plan to review again!

diff --git a/src/si/area.rs b/src/si/area.rs
index 4738359..feec0fb 100644
--- a/src/si/area.rs
+++ b/src/si/area.rs
@@ -66,9 +66,10 @@ quantity! {
         @square_mile: 2.589_988_E6; "mi²", "square mile", "square miles";
         @square_yard: 8.361_274_E-1; "yd²", "square yard", "square yards";

-        /// Roman units
+        // Roman units.
         @pes_quadratus: 8.76_E-2; "pes quadratus", "pes quadratus", "pes quadratus";
-        @decempeda_quadrata: 8.76_E0; "decempeda quadrata", "decempeda quadrata", "decempeda quadrata";
+        @decempeda_quadrata: 8.76_E0; "decempeda quadrata", "decempeda quadrata",
+            "decempeda quadrata";
         @actus_simplex: 4.21_E1; "actus simplex", "actus simplex", "actus simplex";
         @uncia: 2.10_E2; "uncia", "uncia", "uncia";
         @clima: 3.15_E2; "clima", "clima", "clima";
diff --git a/src/si/length.rs b/src/si/length.rs
index b671e4e..b5123b4 100644
--- a/src/si/length.rs
+++ b/src/si/length.rs
@@ -67,7 +67,7 @@ quantity! {
         @rod: 5.029_21_E0; "rd", "rod", "rods";
         @yard: 9.144_E-1; "yd", "yard", "yards";

-        /// Roman units
+        // Roman units.
         @digitus: 1.85_E-2; "digitus", "digitus", "digitus";
         @uncia_pollex: 2.46_E-2; "uncia pollex", "uncia pollex", "uncia pollex";
         @palmus: 7.4_E-2; "palmus", "palmus", "palmus";
diff --git a/src/si/mass.rs b/src/si/mass.rs
index 63f975a..4dbda2f 100644
--- a/src/si/mass.rs
+++ b/src/si/mass.rs
@@ -57,11 +57,12 @@ quantity! {
          /// Ton Metric
         @ton: 1.0_E3; "t", "ton", "tons";

-        /// Roman units
+        // Roman units.
         @uncia: 2.74_E-2; "uncia", "uncia", "uncia";
         @sescunx: 4.11_E-2; "sescunx", "sescunx", "sescunx";
         @sextans: 5.48_E-2; "sextans", "sextans", "sextans";
-        @quadrans_teruncius: 8.22_E-2; "quadrans teruncius", "quadrans teruncius", "quadrans teruncius";
+        @quadrans_teruncius: 8.22_E-2; "quadrans teruncius", "quadrans teruncius",
+            "quadrans teruncius";
         @tirens: 1.096_E-1; "tirens", "tirens", "tirens";
         @quincunx: 1.37_E-1; "quincunx", "quincunx", "quincunx";
         @semis: 1.645_E-1; "semis", "semis", "semis";
diff --git a/src/si/volume.rs b/src/si/volume.rs
index 255b987..f16d36b 100644
--- a/src/si/volume.rs
+++ b/src/si/volume.rs
@@ -101,9 +101,7 @@ quantity! {
         @teaspoon: 4.928_922_E-6; "tsp", "teaspoon", "teaspoons";
         @register_ton: 2.831_685_E0; "RT", "register ton", "register tons";

-        /// Roman units
-
-        /// --- Dry / Wet ---
+        // Roman dry / wet units.
         @ligula: 1.14_E-2; "ligula", "ligula", "ligula";
         @cyathus: 4.5_E-2; "cyathus", "cyathus", "cyathus";
         @acetabulum: 6.8_E-2; "acetabulum", "acetabulum", "acetabulum";
@@ -111,13 +109,14 @@ quantity! {
         @hemina: 2.73_E-1; "hemina", "hemina", "hemina";
         @sextarius: 5.46_E-1; "sextarius", "sextarius", "sextarius";

-        /// Wet
+        // Roman wet units.
         @congius: 3.27; "congius", "congius", "congius";
         @urna: 1.31_E1; "urna", "urna", "urna";
-        @amphora_quadrantal: 2.62_E1; "amphora quadrantal", "amphora quadrantal", "amphora quadrantal";
+        @amphora_quadrantal: 2.62_E1; "amphora quadrantal", "amphora quadrantal",
+            "amphora quadrantal";
         @culeus: 5.24_E2; "culeus", "culeus", "culeus";

-        /// Dry
- 
+        // Roman dry units.
         @semimodius: 4.36; "semimodius", "semimodius", "semimodius";
         @modius: 8.73; "modius", "modius", "modius";
         @modius_castrensis: 1.293_E1; "modius castrensis", "modius castrensis", "modius castrensis";

@elongatedsquid
Copy link
Author

I have now gone in and added some tests but am having some difficulties with float multiplication; When running the command cargo nextest run --no-fail-fast I get Summary [ 0.323s] 684 tests run: 683 passed, 1 failed, 0 skipped

The failing test reads like this: assertion `left == right` failed left: 0.0876 right: 0.08759999997692898 and comes from pes_quadratus.

I have tried to mitigate the error by adjusting the lengths to the square root of the areas, wanting to at least get the area spot on, it did improve things but there are still some float imprecision errors.

@iliekturtles
Copy link
Owner

Change the assert to Test::assert_approx_eq. This will account for floating point imprecision issues.

@elongatedsquid
Copy link
Author

Fixed the values, hope it passes the tests now, they did locally

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants