let meter = @unit.Un::base("m", @dimension.Dimension::length())
let second = @unit.Un::base("s", @dimension.Dimension::time())
let speed = meter / second
let accel = speed / secondtest {
let meter = Un::base("m", @dimension.Dimension::length())
let second = Un::base("s", @dimension.Dimension::time())
let mps = meter.div(second)
let expected = @dimension.Dimension::length().div(
@dimension.Dimension::time(),
)
assert_true(mps.dimension().is_same(expected))
}test {
let meter = Un::base("m", @dimension.Dimension::length())
assert_eq(meter.scale(), 1.0)
assert_true(meter.dimension().is_same(@dimension.Dimension::length()))
}test {
let m = Un::base("m", @dimension.Dimension::length())
let km = Un::scaled("km", @dimension.Dimension::length(), 1000.0)
// 1 km equals 1000 m; 1 m equals 0.001 km.
assert_true(km.conversion_factor(m) is Some(1000.0))
assert_true(m.conversion_factor(km) is Some(0.001))
// Incompatible dimensions cannot be converted.
let s = Un::base("s", @dimension.Dimension::time())
assert_true(m.conversion_factor(s) is None)
}test {
let meter = Un::base("m", @dimension.Dimension::length())
assert_true(meter.dimension().is_same(@dimension.Dimension::length()))
}test {
let m = Un::base("m", @dimension.Dimension::length())
let s = Un::base("s", @dimension.Dimension::time())
let velocity = m.div(s)
let expected = @dimension.Dimension::length().div(
@dimension.Dimension::time(),
)
assert_true(velocity.dimension().is_same(expected))
}test {
let m = Un::base("m", @dimension.Dimension::length())
let km = Un::scaled("km", @dimension.Dimension::length(), 1000.0)
let s = Un::base("s", @dimension.Dimension::time())
assert_true(m.is_compatible(km))
assert_false(m.is_compatible(s))
}test {
let m = Un::base("m", @dimension.Dimension::length())
let area = m.mul(m)
assert_true(area.dimension().is_same(@dimension.Dimension::length().pow(2)))
}test {
let m = Un::base("m", @dimension.Dimension::length())
let volume = m.pow(3)
assert_true(volume.dimension().is_same(@dimension.Dimension::length().pow(3)))
}test {
let km = Un::scaled("km", @dimension.Dimension::length(), 1000.0)
assert_eq(km.scale(), 1000.0)
}test {
let meter = Un::base("m", @dimension.Dimension::length())
let second = Un::base("s", @dimension.Dimension::time())
assert_eq(format_unit(meter / second.pow(2)), "m/s^2")
assert_eq(format_unit(meter.pow(2)), "m^2")
}test {
let meter = Un::base("m", @dimension.Dimension::length())
let second = Un::base("s", @dimension.Dimension::time())
let accel = meter / second.pow(2)
assert_eq(format_unit_with(accel, FormatStyle::Ascii), "m/s^2")
assert_eq(format_unit_with(accel, FormatStyle::Si), "m/sยฒ")
assert_eq(
format_unit_with(accel, FormatStyle::Latex),
"\\mathrm{m}/\\mathrm{s}^{2}",
)
}A runtime dimension-checked physical quantity and unit system for MoonBit.