Commit Graph

409 Commits

Author SHA1 Message Date
Mateusz Pusz
c3cfd3acaa SI fundamental constants added 2020-02-11 23:57:04 +01:00
Mateusz Pusz
f8b1c8d8a2 Initial constants support added 2020-02-11 23:55:02 +01:00
Mateusz Pusz
4ec015d26e SI prefix enabled for eV 2020-02-11 20:58:18 +01:00
Mateusz Pusz
2360392a3d Tests for #58 added (uncomment when fixed) 2020-02-11 08:51:34 +01:00
Mateusz Pusz
037503cbc6 deduced_unit fixed + unit test for mass unit added 2020-02-10 20:35:32 +01:00
Mateusz Pusz
1f46ca5f0c Conan scm temporarily disabled 2020-02-10 19:07:13 +01:00
Mateusz Pusz
3cc686e730 Conan test_package fixed 2020-02-10 18:43:27 +01:00
Mateusz Pusz
78350ed94b same_as remplaced with is_same_v in if constexpr 2020-02-08 20:11:20 +01:00
Mateusz Pusz
0d319675f8 prefix definition simplified 2020-02-08 19:49:36 +01:00
Mateusz Pusz
518c52cda1 Base unit for SI mass fixed 2020-02-02 15:37:51 +01:00
Mateusz Pusz
3dc34d2d2e Linear Algebra dependency removed 2020-02-02 15:25:00 +01:00
Mateusz Pusz
d3553d2d29 CMake common tools updated 2020-02-01 21:57:36 +01:00
Mateusz Pusz
0354c56ac2 clang-format applied to a downcasting header 2020-01-31 17:03:35 +01:00
Mateusz Pusz
9cdc3e1ad2 DESIGN doc updated 2020-01-31 17:02:52 +01:00
Mateusz Pusz
645570ff57 Library updated to the latest cmake common tools 2020-01-31 17:02:27 +01:00
Mateusz Pusz
f2163aa098 Conan package id fixed to header_only 2020-01-28 08:38:23 +01:00
Mateusz Pusz
b27a422076 Preeliminary clang support added 2020-01-28 08:37:43 +01:00
Mateusz Pusz
876c2ac426 thou used as a primary unit in a fmt unit test 2020-01-14 12:59:37 +01:00
Mateusz Pusz
3a76c1de91 gcc10 compilation error fixed in conversion example 2020-01-14 12:55:07 +01:00
Mateusz Pusz
15e656aba6 clang-format on new examples 2020-01-14 12:50:30 +01:00
Mateusz Pusz
1c4624303e Whitespace cleanup 2020-01-14 12:23:32 +01:00
Mateusz Pusz
1c857868bb Some length unit fixed + whitespace cleanup 2020-01-14 12:23:06 +01:00
Mateusz Pusz
8675542f98 README updated to reflect the latest units changes 2020-01-13 11:15:26 +01:00
Andy Little
024f5a9c83 change const order
move in,ft,fathom,ft2,ft3,mph from us to international namespace
TODO distinguish units with different names for same values
2020-01-12 21:34:36 +01:00
Andy Little
c93136e81b physical/si/density : change UDL from kg_per_m3 to kgpm3 (and then fix example/box_example) 2020-01-12 21:34:36 +01:00
Andy Little
6ba2362af9 example , clcpp_response : clean up comments 2020-01-12 21:34:36 +01:00
Andy Little
3b0e445b4c Remove sandbox.cpp from repo
Examples/clcpp_response.cpp : removed debug #defines
2020-01-12 21:34:36 +01:00
Andy Little
283e9d81a3 Split the various non-si length units into their own namespaces.
new namespaces are
international ( combination of us and imperial + Canada etc)
iau  (https://www.iau.org/
imperial ( old imperial units)
typographical ( for sizes of printing fonts etc)

These namespace are based on some research , mainly on wikipedia.
Look in src/include/units/physical/si/length.h to see links to see the references to documentation justifying the change.

Unfortunately there are 3 foot units for example, an old imperial version, an old us version and an international version, which is more recent and attempts to unify the two previous ones. All versions have slight changes in value, so I opted to use the international version
The main change in the layout is that inch,foot and yard have been moved from us to international.

With this modification, I also modified the physical/us/area.hpp, volume.hpp and volume.hpp headers to refer to the international units.
This may not be correct, but if the modified us::foot (rather than international foot is used as a basis for these units, then
there is a ratio integer overflow during compilation, probably due to taking 3rd power of a ratio. After this commit. I will try to show that on another branch.
2020-01-12 21:34:36 +01:00
Andy Little
868842bd46 Third party examples : add box example
Add si::density quantity header .
Add si::resistance quantity header.
Update si::capacitance header with mF, uF, nF, pF.
Update si::voltage header with mV, uV, nV,pV
Third party example : add capacitor time curve example
Add incoherent length units, TODO  move them out from si header.
Third party examples : add clcpp_response showing effectivenes of typed units for physical quantity library
Third party examples : add conversion factor example
Add third party examples to cmake

Third party examples : box example : Add air_density constant for clarity remove explicit this-> and tidy up.
Third party examples : in clcpp response example, change base unit from km to m for single type or all units example.
Third party examples : conversion_factor , add inline constexpr to units_str function.
Third party examples : box_example, change quantity::unit syntax to quantity::unit<> to allow generic(default double) value_type.
examples : remove examples from third party to main examples directory. Update cmake.
physical/si/resistance.hpp : remove underscores from kiloohm etc, UDL collision with 'R' so prefix with underscore
2020-01-12 21:34:36 +01:00
Mateusz Pusz
a01c811f5f Square and cubic UDLs renamed 2020-01-09 10:03:41 +01:00
Mateusz Pusz
159e2c1c02 ratio_text improved to omit den == 1 for exp != 0 2019-12-29 17:19:55 +01:00
Mateusz Pusz
e7f37e4e33 CGS fmt tests added 2019-12-29 17:06:03 +01:00
Mateusz Pusz
09e118380c Electronvolt and dalton support added 2019-12-28 19:22:57 +01:00
Mateusz Pusz
69dcfd2e6d Bitrate UDLs fixed 2019-12-28 19:00:19 +01:00
Mateusz Pusz
17e6b0d75d Small refactoring of new ratio (resolves #14) 2019-12-28 18:59:53 +01:00
Oliver Schönrock
23d44c1b4a implementing our own (very limited) std::pow functions
integer and float treated separately
perhaps not ideal, but not obvioius what would be clearly better
2019-12-28 17:59:47 +01:00
Oliver Schönrock
0ad78fe753 small changes based on code review 2019-12-28 17:59:47 +01:00
Oliver Schönrock
509b6c9653 implementing ratio<num,den,exp> which replaces ratio<num,den>
https://github.com/mpusz/units/issues/14

This "works", as in it passes all static and runtime tests.
However quite a few of the tests have been "modified" to make them pass. Whether
this is legitimate is debatable and should be the source of some thought /
discussion.

1. many of the static tests and some of the runtime tests have had the input
ratios of the tests modified in the following way. eg ratio<3,1000> =>
ratio<3,1,-3>. ie they have been "canonicalised".

There are obviously an infinite number of ratios which represent the same
rational number. The way `ratio` is implemented it always moves as "many powers
of 10" from the `num` and `den` into the `exp` and that makes the `canonical`
ratio.

Because these are all "types" and the lib uses is_same all over the place, only
exact matches will be `is_same`. ie ratio<300,4,0> !is_same ratio<3,4,2> (the
latter is the canonical ratio). This is perhaps fine for tests in the devlopment
phase, but there may be a need for "more forgiving" comparison / concept of
value equality. One such comparison which compares den,num,exp after
canonicalisation is the constexpr function `same` as defined at top of
`ratio_test.cpp`. We may need to expose this and perhaps add even more soft
comparisions.

2. In the runtime tests it is "subjective" how some resukts should be
printed. There is the question of "how exactly to format certain ratios". eg
omit denominators of "1" and exponents of "0". However before even addressing
these in detail a decision needs to be made about the general form of
"non-floating-point-converted" ratios which do not map exactly to a "Symbol
prefix".

Arguably these are "relatively ugly" whatever we do, so we could just
go for an easily canonicalised form. An example is:

-        CHECK(stream.str() == "10 [1/60]W");
+        CHECK(stream.str() == "10 [1/6 x 10⁻¹]W");

Which of thses is "better"? Is there a "third", better form?  It's not obvious.

My opnion is: Both of 1&2 are fine for now, unless we think they go down the
wrong avenue, and can be "perfected later"? ie we can expose a softer version of
ratio based equality, and decide on canonical way of printing ratios (as far as
that is actually a very useful output form, compared with decimal, scientific or
engineering notation).
2019-12-28 17:59:47 +01:00
Mateusz Pusz
eef6371ab4 Missing fixed_string comparison operators added 2019-12-26 14:03:55 +01:00
Mateusz Pusz
bf5762dbbb Initial support for printing multiple negative exponents added 2019-12-26 12:07:08 +01:00
Mateusz Pusz
83516346e7 tonne definition fixed 2019-12-26 12:06:12 +01:00
Mateusz Pusz
594f92241a tonne added 2019-12-26 10:27:20 +01:00
Mateusz Pusz
2a7f2efa15 hectometre and hectare added 2019-12-26 10:20:30 +01:00
Mateusz Pusz
70fbf300b4 astronomical unit added 2019-12-26 10:11:12 +01:00
Mateusz Pusz
15e148381d decimetre and litre added 2019-12-26 10:07:02 +01:00
Mateusz Pusz
22fabb5a1b day unit added 2019-12-26 09:59:05 +01:00
Mateusz Pusz
81b1ba3162 fixed_string_test added 2019-12-26 09:49:39 +01:00
Mateusz Pusz
4b43ade1c4 Compiler Explorer link updated in README 2019-12-23 13:25:49 +01:00
Mateusz Pusz
69974f82cd Floating-point UDLs removed from fmt_test 2019-12-23 13:23:23 +01:00
Mateusz Pusz
758c05ea15 quantity_cast fmt tests added 2019-12-23 13:22:37 +01:00