6 #include "../vnix/units/dim.hpp" 14 TEST_CASE(
"dim can be initialized from array.",
"[dim]") {
15 std::array<dim::rat, dim::NUM_BASES> a;
16 for (
unsigned i = 0; i < dim::NUM_BASES; ++i) { a[i] = i; }
22 TEST_CASE(
"Encoding and decoding works as expected.",
"[dim]") {
23 std::array<dim::rat, dim::NUM_BASES> a;
25 for (
unsigned i = 0; i < dim::NUM_BASES; ++i) {
28 enum { BITS = rat::BITS };
38 TEST_CASE(
"Addition and subtraction work as expected.",
"[dim]") {
39 std::array<dim::rat, dim::NUM_BASES> a, b, c, d;
40 for (
unsigned i = 0; i < dim::NUM_BASES; ++i) {
42 std::cout <<
"a[i]=" << a[i] << std::endl;
43 b[i] = dim
::rat
(-1
, 2
);
44 std::cout <<
"b[i]=" << b[i] << std::endl;
46 std::cout <<
"c[i]=" << c[i] << std::endl;
47 d[i] = a[i]
/ 2
- b[i];
48 std::cout <<
"d[i]=" << d[i] << std::endl;
52 REQUIRE(x
/ 2
- y
== z2);
56 TEST_CASE(
"Multiplication and division work as expected.",
"[dim]") {
57 std::array<dim::rat, dim::NUM_BASES> a, c, d;
58 dim::rat
const b
(-1
, 2
);
59 for (
unsigned i = 0; i < dim::NUM_BASES; ++i) {
static constexpr utype encode(rational r)
Encoding from rational number.
constexpr auto operator-(rational< NB1, DB1 > r1, rational< NB2, DB2 > r2)
Difference between two rational numbers.
constexpr basic_dim(std::array< rat, NUM_BASES > const &a)
constexpr word encode() const
Encode data for this dim into a word.
constexpr auto operator/(rational< NB1, DB1 > r1, typename rational< NB1, DB1 >::stype r2)
Quotient of two rational numbers.
constexpr basic_dim operator+(basic_dim const &a) const
Add corresponding exponents.
constexpr basic_dim(word u)
Initialize from dim that has been encoded into a word.
constexpr auto operator*(rational< NB1, DB1 > r1, rational< NB2, DB2 > r2)
Product of two rational numbers.
constexpr auto operator+(rational< NB1, DB1 > r1, rational< NB2, DB2 > r2)
Sum of two rational numbers.
constexpr rational(stype n=0, stype d=1)
Initialize from numerator and denominator.
constexpr basic_dim operator-(basic_dim const &s) const
Subtract corresponding exponents.
constexpr auto operator/(rational< NB1, DB1 > r1, rational< NB2, DB2 > r2)
Quotient of two rational numbers.
constexpr rat operator[](DBO off) const
Rational exponent at specified offset.
constexpr bool operator==(rational< NB1, DB1 > r1, rational< NB2, DB2 > r2)
Compare rationals for equality.
static constexpr off const array[num_offs]
Array of enumerated offsets for iterating.
constexpr bool operator==(basic_dim const &d) const
constexpr basic_dim operator*(rat f) const
Multiply exponents by rational factor.
constexpr basic_dim operator/(rat::stype f) const
Divide exponents by rational factor.
Thomas E. Vaughan's public software.
constexpr I bit_range(unsigned n1, unsigned n2)
Word with specified range of bits set.
Classes and functions supporting a model of physically dimensioned quantities.
constexpr basic_dim operator/(rat f) const
Divide exponents by rational factor.