Skip to main content

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}