Compare commits
No commits in common. "055ab32a99840ecb8d21a1e236ea5976107b8984" and "ebff87c733347782a3c97d959ef5d2957d4ef162" have entirely different histories.
055ab32a99
...
ebff87c733
5 changed files with 1 additions and 168 deletions
|
@ -64,27 +64,6 @@ fn get_conversion(unit: NonMetric) -> Conversion {
|
||||||
from: 9.0,
|
from: 9.0,
|
||||||
to: MetricQuantity { amount: 5.0, unit: Metric::Celcius },
|
to: MetricQuantity { amount: 5.0, unit: Metric::Celcius },
|
||||||
},
|
},
|
||||||
// Area
|
|
||||||
NonMetric::SquareInch => Conversion {
|
|
||||||
offset: 0.0,
|
|
||||||
from: inch_from * inch_from,
|
|
||||||
to: MetricQuantity { amount: inch_to * inch_to, unit: Metric::SquareMetre },
|
|
||||||
},
|
|
||||||
NonMetric::SquareFoot => Conversion {
|
|
||||||
offset: 0.0,
|
|
||||||
from: inch_from * inch_from,
|
|
||||||
to: MetricQuantity { amount: 12.0 * inch_to * 12.0 * inch_to, unit: Metric::SquareMetre },
|
|
||||||
},
|
|
||||||
NonMetric::Acre => Conversion {
|
|
||||||
offset: 0.0,
|
|
||||||
from: inch_from * inch_from,
|
|
||||||
to: MetricQuantity { amount: 43_560.0 * 12.0 * inch_to * 12.0 * inch_to, unit: Metric::SquareMetre },
|
|
||||||
},
|
|
||||||
NonMetric::SquareMile => Conversion {
|
|
||||||
offset: 0.0,
|
|
||||||
from: inch_from * inch_from,
|
|
||||||
to: MetricQuantity { amount: 1760.0 * 3.0 * 12.0 * inch_to * 1760.0 * 3.0 * 12.0 * inch_to, unit: Metric::SquareMetre },
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,17 +112,6 @@ mod test {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn area() {
|
|
||||||
let tests = [
|
|
||||||
Test(NonMetric::SquareInch, 0.00064516),
|
|
||||||
Test(NonMetric::SquareFoot, 0.09290304),
|
|
||||||
Test(NonMetric::Acre, 4046.8564224),
|
|
||||||
Test(NonMetric::SquareMile, 2589988.110336),
|
|
||||||
];
|
|
||||||
run_tests(&tests, Metric::SquareMetre);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn run_tests(tests: &[Test], unit: Metric) {
|
fn run_tests(tests: &[Test], unit: Metric) {
|
||||||
for test in tests {
|
for test in tests {
|
||||||
let from = NonMetricQuantity {
|
let from = NonMetricQuantity {
|
||||||
|
|
|
@ -84,17 +84,6 @@ fn prefixed_unit(quantity: MetricQuantity) -> PrefixedUnit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Metric::Celcius => PrefixedUnit(1.0, "°C"),
|
Metric::Celcius => PrefixedUnit(1.0, "°C"),
|
||||||
Metric::SquareMetre => {
|
|
||||||
if absolute >= 1000.0 * 1000.0 {
|
|
||||||
return PrefixedUnit(1000.0 * 1000.0, "km²");
|
|
||||||
} else if absolute >= 1.0 {
|
|
||||||
return PrefixedUnit(1.0, "m²");
|
|
||||||
} else if absolute >= 0.01 * 0.01 {
|
|
||||||
return PrefixedUnit(0.01 * 0.01, "cm²");
|
|
||||||
} else {
|
|
||||||
return PrefixedUnit(0.001 * 0.001, "mm²");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +154,7 @@ mod test {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn metres() {
|
fn units() {
|
||||||
assert_eq!(PrefixedUnit(0.001, "mm"), prefixed_unit(MetricQuantity {
|
assert_eq!(PrefixedUnit(0.001, "mm"), prefixed_unit(MetricQuantity {
|
||||||
amount: 0.0001,
|
amount: 0.0001,
|
||||||
unit: Metric::Metre,
|
unit: Metric::Metre,
|
||||||
|
@ -219,10 +208,7 @@ mod test {
|
||||||
amount: -1000.0,
|
amount: -1000.0,
|
||||||
unit: Metric::Metre,
|
unit: Metric::Metre,
|
||||||
}));
|
}));
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn grams() {
|
|
||||||
assert_eq!(PrefixedUnit(1.0, "g"), prefixed_unit(MetricQuantity {
|
assert_eq!(PrefixedUnit(1.0, "g"), prefixed_unit(MetricQuantity {
|
||||||
amount: 0.1,
|
amount: 0.1,
|
||||||
unit: Metric::Gram,
|
unit: Metric::Gram,
|
||||||
|
@ -256,10 +242,7 @@ mod test {
|
||||||
amount: -1000.0,
|
amount: -1000.0,
|
||||||
unit: Metric::Gram,
|
unit: Metric::Gram,
|
||||||
}));
|
}));
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn celcius() {
|
|
||||||
assert_eq!(PrefixedUnit(1.0, "°C"), prefixed_unit(MetricQuantity {
|
assert_eq!(PrefixedUnit(1.0, "°C"), prefixed_unit(MetricQuantity {
|
||||||
amount: 0.0001,
|
amount: 0.0001,
|
||||||
unit: Metric::Celcius,
|
unit: Metric::Celcius,
|
||||||
|
@ -273,72 +256,4 @@ mod test {
|
||||||
unit: Metric::Celcius,
|
unit: Metric::Celcius,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn square_metres() {
|
|
||||||
assert_eq!(PrefixedUnit(0.000_001, "mm²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 0.000_000_1,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(0.000_001, "mm²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 0.000_001,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(0.000_001, "mm²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 0.000_01,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(0.000_1, "cm²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 0.000_1,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(0.000_1, "cm²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 0.001,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(0.000_1, "cm²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 0.01,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(0.000_1, "cm²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 0.01,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(0.000_1, "cm²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 0.1,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(1.0, "m²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 1.0,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(1.0, "m²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 10.0,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(1.0, "m²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 100.0,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(1.0, "m²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 1_000.0,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(1.0, "m²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 10_000.0,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(1.0, "m²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 100_000.0,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(1_000_000.0, "km²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 1_000_000.0,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
assert_eq!(PrefixedUnit(1_000_000.0, "km²"), prefixed_unit(MetricQuantity {
|
|
||||||
amount: 10_000_000.0,
|
|
||||||
unit: Metric::SquareMetre,
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
10
src/lib.rs
10
src/lib.rs
|
@ -72,11 +72,6 @@ fn unit_to_name(unit: NonMetric) -> &'static str {
|
||||||
NonMetric::Stone => "stones",
|
NonMetric::Stone => "stones",
|
||||||
// Temperature
|
// Temperature
|
||||||
NonMetric::Fahrenheit => "degrees Fahrenheit",
|
NonMetric::Fahrenheit => "degrees Fahrenheit",
|
||||||
// Area
|
|
||||||
NonMetric::SquareInch => "square inches",
|
|
||||||
NonMetric::SquareFoot => "square feet",
|
|
||||||
NonMetric::Acre => "acres",
|
|
||||||
NonMetric::SquareMile => "square miles",
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,10 +104,5 @@ mod test {
|
||||||
assert_eq!(run("-40 °F"), Ok("-40 °C".to_string()));
|
assert_eq!(run("-40 °F"), Ok("-40 °C".to_string()));
|
||||||
assert_eq!(run("0 °F"), Ok("-17.78 °C".to_string()));
|
assert_eq!(run("0 °F"), Ok("-17.78 °C".to_string()));
|
||||||
assert_eq!(run("32 °F"), Ok("0 °C".to_string()));
|
assert_eq!(run("32 °F"), Ok("0 °C".to_string()));
|
||||||
// Area
|
|
||||||
assert_eq!(run("1 in²"), Ok("6.452 cm²".to_string()));
|
|
||||||
assert_eq!(run("1 ft²"), Ok("929 cm²".to_string()));
|
|
||||||
assert_eq!(run("1 acre"), Ok("4 047 m²".to_string()));
|
|
||||||
assert_eq!(run("1 mi²"), Ok("2.59 km²".to_string()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
34
src/parse.rs
34
src/parse.rs
|
@ -101,23 +101,6 @@ fn parse_unit(input: String) -> Result<NonMetric, ParseError> {
|
||||||
"°F" => Ok(NonMetric::Fahrenheit),
|
"°F" => Ok(NonMetric::Fahrenheit),
|
||||||
"F" => Ok(NonMetric::Fahrenheit),
|
"F" => Ok(NonMetric::Fahrenheit),
|
||||||
|
|
||||||
// Area
|
|
||||||
"inch²" => Ok(NonMetric::SquareInch),
|
|
||||||
"inches²" => Ok(NonMetric::SquareInch),
|
|
||||||
"in²" => Ok(NonMetric::SquareInch),
|
|
||||||
|
|
||||||
"foot²" => Ok(NonMetric::SquareFoot),
|
|
||||||
"feet²" => Ok(NonMetric::SquareFoot),
|
|
||||||
"ft²" => Ok(NonMetric::SquareFoot),
|
|
||||||
|
|
||||||
"acre" => Ok(NonMetric::Acre),
|
|
||||||
"acres" => Ok(NonMetric::Acre),
|
|
||||||
"ac" => Ok(NonMetric::Acre),
|
|
||||||
|
|
||||||
"mile²" => Ok(NonMetric::SquareMile),
|
|
||||||
"miles²" => Ok(NonMetric::SquareMile),
|
|
||||||
"mi²" => Ok(NonMetric::SquareMile),
|
|
||||||
|
|
||||||
_ => Err(ParseError::UnknownUnit(input)),
|
_ => Err(ParseError::UnknownUnit(input)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -266,23 +249,6 @@ mod test {
|
||||||
assert_eq!(parse_unit("°F".to_string()), Ok(NonMetric::Fahrenheit));
|
assert_eq!(parse_unit("°F".to_string()), Ok(NonMetric::Fahrenheit));
|
||||||
assert_eq!(parse_unit("F".to_string()), Ok(NonMetric::Fahrenheit));
|
assert_eq!(parse_unit("F".to_string()), Ok(NonMetric::Fahrenheit));
|
||||||
|
|
||||||
// Area
|
|
||||||
assert_eq!(parse_unit("inch²".to_string()), Ok(NonMetric::SquareInch));
|
|
||||||
assert_eq!(parse_unit("inches²".to_string()), Ok(NonMetric::SquareInch));
|
|
||||||
assert_eq!(parse_unit("in²".to_string()), Ok(NonMetric::SquareInch));
|
|
||||||
|
|
||||||
assert_eq!(parse_unit("foot²".to_string()), Ok(NonMetric::SquareFoot));
|
|
||||||
assert_eq!(parse_unit("feet²".to_string()), Ok(NonMetric::SquareFoot));
|
|
||||||
assert_eq!(parse_unit("ft²".to_string()), Ok(NonMetric::SquareFoot));
|
|
||||||
|
|
||||||
assert_eq!(parse_unit("acre".to_string()), Ok(NonMetric::Acre));
|
|
||||||
assert_eq!(parse_unit("acres".to_string()), Ok(NonMetric::Acre));
|
|
||||||
assert_eq!(parse_unit("ac".to_string()), Ok(NonMetric::Acre));
|
|
||||||
|
|
||||||
assert_eq!(parse_unit("mile²".to_string()), Ok(NonMetric::SquareMile));
|
|
||||||
assert_eq!(parse_unit("miles²".to_string()), Ok(NonMetric::SquareMile));
|
|
||||||
assert_eq!(parse_unit("mi²".to_string()), Ok(NonMetric::SquareMile));
|
|
||||||
|
|
||||||
// Unknown unit
|
// Unknown unit
|
||||||
assert_eq!(parse_unit("hutenosa".to_string()), Err(ParseError::UnknownUnit("hutenosa".to_string())));
|
assert_eq!(parse_unit("hutenosa".to_string()), Err(ParseError::UnknownUnit("hutenosa".to_string())));
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ pub enum Metric {
|
||||||
Metre,
|
Metre,
|
||||||
Gram,
|
Gram,
|
||||||
Celcius,
|
Celcius,
|
||||||
SquareMetre,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||||
|
@ -19,11 +18,6 @@ pub enum NonMetric {
|
||||||
Stone,
|
Stone,
|
||||||
// Temperature
|
// Temperature
|
||||||
Fahrenheit,
|
Fahrenheit,
|
||||||
// Area
|
|
||||||
SquareInch,
|
|
||||||
SquareFoot,
|
|
||||||
Acre,
|
|
||||||
SquareMile,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||||
|
|
Loading…
Reference in a new issue