quantities/length.rs
1// ---------------------------------------------------------------------------
2// Copyright: (c) 2022 ff. Michael Amrhein (michael@adrhinum.de)
3// License: This program is part of a larger application. For license
4// details please read the file LICENSE.TXT provided together
5// with the application.
6// ---------------------------------------------------------------------------
7// $Source: src/length.rs $
8// $Revision: 2025-04-21T08:30:06+02:00 $
9
10//! Definition of basic quantity `Length`.
11
12use crate::prelude::*;
13
14#[quantity]
15#[ref_unit(Meter, "m", NONE, "Reference unit of quantity `Length`")]
16#[unit(Nanometer, "nm", NANO, 0.000000001, "0.000000001·m")]
17#[unit(Micrometer, "µm", MICRO, 0.000001, "0.000001·m")]
18#[unit(Millimeter, "mm", MILLI, 0.001, "0.001·m")]
19#[unit(Centimeter, "cm", CENTI, 0.01, "0.01·m")]
20#[unit(Inch, "in", 0.0254, "2.54·cm")]
21#[unit(Decimeter, "dm", DECI, 0.1, "0.1·m")]
22#[unit(Foot, "ft", 0.3048, "12·in")]
23#[unit(Yard, "yd", 0.9144, "3·ft")]
24#[unit(Chain, "ch", 20.1168, "22·yd")]
25#[unit(Furlong, "fur", 201.168, "10·ch")]
26#[unit(Kilometer, "km", KILO, 1000, "1000·m")]
27#[unit(Mile, "mi", 1609.344, "8·fur")]
28#[unit(Nautical_Mile, "nmi", 1852, "1852 m")]
29/// The quantity of distance between two points in spacetime.
30///
31/// Reference unit: Meter ('m')
32///
33/// Predefined units:
34///
35/// | Symbol | Name | Definition | Equivalent in 'm' |
36/// |--------|-------------------------|-------------------|-------------------|
37/// | nm | Nanometer | 0.000000001·m | 0.000000001 |
38/// | µm | Micrometer | 0.000001·m | 0.000001 |
39/// | mm | Millimeter | 0.001·m | 0.001 |
40/// | cm | Centimeter | 0.01·m | 0.01 |
41/// | in | Inch | 2.54·cm | 0.0254 |
42/// | dm | Decimeter | 0.1·m | 0.1 |
43/// | ft | Foot | 12·in | 0.3048 |
44/// | yd | Yard | 3·ft | 0.9144 |
45/// | ch | Chain | 22·yd | 20.1168 |
46/// | fur | Furlong | 10·ch | 201.168 |
47/// | km | Kilometer | 1000·m | 1000 |
48/// | mi | Mile | 8·fur | 1609.344 |
49/// | nmi | Nautical Mile | 1852 m | 1852.0 |
50pub struct Length {}
51
52#[cfg(test)]
53mod tests {
54 use super::*;
55
56 #[test]
57 fn test_length() {
58 assert_eq!(<Length as HasRefUnit>::REF_UNIT, LengthUnit::REF_UNIT);
59 assert!(METER.is_ref_unit());
60 let amnt: AmountT = Amnt!(29.35);
61 let l = amnt * CENTIMETER;
62 assert_eq!(l.amount, amnt);
63 assert_eq!(l.unit, CENTIMETER);
64 #[cfg(feature = "std")]
65 assert_eq!(l.to_string(), "29.35 cm");
66 }
67}