v0.16.0 - 2017-12-21
This release contains significant changes in order to support underlying storage types that
implement the Num
trait beyond f32
and f64
. Many changes are breaking: marker traits are
simplified and fewer macros are exported. New storage types are not enabled by default and can be
used by including the corresponding feature. See the changes below for full details.
- Add missing
#[derive(Hash)]
attributes. - #29 A new macro,
storage_types!
, is now available to duplicate code on a per-storage type basis. See macro documentation for full details. The minimum supportedrustc
version is now 1.20.0.
- #29 Underlying storage type now uses the
Num
trait from thenum
crate instead of fixed implementations forf32
andf64
. Features for all types implementingNum
have been added and control the availability of the type as an underlying storage type:usize
,u8
,u16
,u32
,u64
,isize
,i8
,i16
,i32
,i64
,bigint
,biguint
,rational
,rational32
,rational64
,bigrational
,f32
, andf64
. For compile time reasons onlyf32
andf64
are enabled by default. Tests are implemented for all underlying storage types but don't account for minimum or maximum values and will fail for non-float types where the conversion factor overflows the type's limits. A future release will correct this. - #29 [Breaking] Traits and structs generated by
the
system!
macro have been significantly changed in order to support non-float underlying storage types.Dimension
changed to directly include associated types for quantity dimensions.Units<V>
is now only parameterized onV
and contains associated types for base units.Conversion<V>
has been removed and replaced withuom::Conversion<V>
.$quantities<...>
has been removed. Quantity dimensions are now directly in theDimension
trait.BaseUnits<...>
has been removed. Base units are not directly in theUnits<V>
trait.uom::Conversion<V>
added to replaceConversion<V>
and gives access to a unit's conversion factor.uom::ConversionFactor<V>
added to represent conversion factors for underlying storage types where the type can't be used (e.g.i32
's conversion factor is represented asRational32
.)
- [Breaking] Macro usage and definitions have been simplified and consolidated.
quantities!
,replace_ty!
, andunit!
have been consolidated as "private" match arms of their calling macro. In order to reduce the chance of macro name collisions$quantities!
is the only remaining generated exported macro (e.g.ISQ!
for thesi
system). Generated macros for each quantity no longer exist. These changes make it easier to have multiple systems containing quantities with the same names. In order to support this change quantities in theunits
block of thesystem!
macro must always be prefixed by the quantity's module (e.g.length::Length
). Prefixing the module with themod
keyword instructs thesystem!
macro not to generate a#[macro_use] pub mod $module;
statement.
v0.15.0 — 2017-07-05
This release adds additional Time
units; Frequency
, Force
, and Volume
quantities; and
numerous floating point methods such as min
, max
, and powi
.
- #4 Additional
Time
units added. - Add missing
giga
units. e.g.gigameter
. - #11 Add floating point classification methods
classify
,is_finite
,is_infinte
,is_nan
, andis_normal
forQuantity
. - #11 Add floating point fractional methods
floor
,ceil
,round
,trunc
, andfract
forQuantity
. - #11 Add floating point comparison methods
max
andmin
forQuantity
. - #11 Add floating point
mul_add
method forQuantity
. - #11 Add floating point
powi
method forQuantity
. - #7
Volume
quantity added. Additional units still need to be added. - #8
Force
quantity added. Additional units still need to be added. - #30
Frequency
quantity added. Additional units still need to be added.
v0.14.0 — 2017-05-30
- [Breaking] A new feature,
std
, is now available and is enabled by default.uom
can still be compiled withno_std
by using--no-default-features
when compiling the crate ordefault-features = false
in thedependencies
section ofCargo.toml
- #11
cbrt
,recip
, andsqrt
are implemented forQuantity
.
- #28
Quantity
fields made public in order to allow library users to createconst
values and instances of non-named quantities. e.g.const TIME_STEP: Time = Quantity { dimension: PhantomData, units: PhantomData, value: 0.1 };
This functionality will be deprecated and subsequently removed once theconst fn
feature is stabilized. - Tests now run for all enabled underlying storage types (
f32
,f64
).
- Fixed incorrect conversion factor when multiplying or dividing
Quantity
s with different base units.
v0.13.0 — 2017-04-20
This release adds numerous tests both for code generated by the quantity!
, system!
, and
$quantities!
macros as well as derived quantities. Fixes for issues found during testing noted
below. Quantity implementations for Area
and Acceleration
also added.
- #6
Area
quantity added. Additional units still need to be added. - #9
Acceleration
quantity added. Additional units still need to be added.
- [Breaking] Remove the unused
_unit
parameter fromQuantity::new
and so summon the turbofish. e.g.Length::new(1.0, meter)
becomesLength::new::<meter>(1.0)
. - #22 Change
impl Debug
forQuantity
to use precision information. Previously the implementation checked thealternate
flag which has no affect on printing raw floats. - #27 Change superscripts in documentation to the
format supported by
pulldown
in anticipation of upcommingrustdoc
changes.
- #22 Fix
impl Sub
forQuantity
to be implemented in terms of-
instead of+
.
v0.12.0 — 2017-04-01
Continuous integration was setup to ensure that uom
builds on stable, beta, nightly, and 1.15.0
(the minimum rustc
version). Quantity descriptions, unit abbreviations, and unit descriptions
added. Additional length units
added to
demonstrate the simplicity of the process.
- #1 Additional
Length
units added. - [Breaking] The
quantity!
macro accepts comments on units. To resolve macro parsing ambiguities each unit must be prefixed with an@
. - #19 [Breaking] The
quantity!
macro includes the quantity description. The description can be accessed using thedescription()
method in quantity submodules. - #19 [Breaking] The
quantity!
macro includes unit abbreviations as well as singular and plural descriptions. These values can be accessed from newabbreviation()
,singular()
, andplural()
methods on theUnit
trait. The originalUnit<V>
trait has been renamedConversion<V>
. - #12
Debug
manually implemented forQuantity<D, U, V>
to show the underlying value and associated units. - Test and compile-fail test modules setup. compile-fail tests for mismatched quantities and units added.
Proof-of-concept functionality for type-safe zero-cost dimensional analysis. uom
[0.11.0] allows
for the creation of custom systems or the use of the pre-built SI. Basic mathematical operations
are implemented and a minimal set of quantities (length, mass, time...) and units (meter, kilometer,
foot, mile, ...) are included.