6 #include "../vnix/rat.hpp" 13 TEST_CASE(
"Constructor from num and den works as expected.",
"[rational]") {
20 rat8_t
constexpr r2
(3
);
26 rat8_t
constexpr r3
(3
, 2
);
32 rat8_t
constexpr r4
(4
, -4
);
40 TEST_CASE(
"Conversion-constructor works as expected.",
"[rational]") {
41 rat8_t
constexpr r1
(3
, 2
);
42 rat16_t
constexpr r2(r1);
48 TEST_CASE(
"Addition and subtraction work.",
"[rational]") {
52 REQUIRE(r1
== rat8_t
(5
, 2
));
55 REQUIRE(r1
== rat8_t
(3
, 2
));
56 rat16_t
constexpr r2
(-3
, 4
);
57 rat16_t
constexpr r3
(1
, 6
);
58 REQUIRE(r2
+ r3
== rat16_t
(-7
, 12
));
59 REQUIRE(r2
- r3
== rat16_t
(-11
, 12
));
63 TEST_CASE(
"Reciprocal works as expected.",
"[rational]") {
72 TEST_CASE(
"Multiplication and division work.",
"[rational]") {
75 REQUIRE(r1
* r2
== rat8_t
(3
, 8
));
76 REQUIRE(r1
/ r2
== rat8_t
(6
));
79 REQUIRE(r1
== rat8_t
(-3
, 4
));
82 REQUIRE(r1
== rat8_t
(-9
, 8
));
86 TEST_CASE(
"Encoding and decoding work as expected.",
"[rational]") {
88 uint8_t code = 0xE8 | 0x03;
94 TEST_CASE(
"Comparison operators work as expected.",
"[rational]") {
107 TEST_CASE(
"Unary operators work as expected.",
"[rational]") {
115 TEST_CASE(
"Stream-output works as expected.",
"[rational]") {
118 std::ostringstream oss1, oss2;
121 REQUIRE(oss1.str() ==
"4");
122 REQUIRE(oss2.str() ==
"-3/4");
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.
static constexpr rational decode(utype u)
Rational number from encoding.
constexpr auto operator+(rational< NB, DB > r)
Copy rational number by way of unary operator+.
constexpr float to_float() const
Convert to float.
constexpr auto operator*(rational< NB1, DB1 > r1, rational< NB2, DB2 > r2)
Product of two rational numbers.
constexpr double to_double() const
Convert to double.
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 rational reciprocal() const
Reciprocal of this rational number.
constexpr auto operator-(rational< NB, DB > r)
Negate rational number.
constexpr bool operator>(rational< NB1, DB1 > r1, rational< NB2, DB2 > r2)
Compare for greater-than ordering with another rational.
constexpr auto operator/(rational< NB1, DB1 > r1, rational< NB2, DB2 > r2)
Quotient of two rational numbers.
constexpr stype to_int() const
Convert to (signed) integer.
constexpr bool operator==(rational< NB1, DB1 > r1, rational< NB2, DB2 > r2)
Compare rationals for equality.
constexpr bool operator!=(rational< NB1, DB1 > r1, rational< NB2, DB2 > r2)
Compare rationals for inequality.
constexpr bool to_bool() const
Automatically convert to boolean.
constexpr bool operator>=(rational< NB1, DB1 > r1, rational< NB2, DB2 > r2)
Compare for greater-than-or-equal ordering with another rational.
Thomas E. Vaughan's public software.
constexpr bool operator<(rational< NB1, DB1 > r1, rational< NB2, DB2 > r2)
Compare for less-than ordering with another rational.
constexpr bool operator<=(rational< NB1, DB1 > r1, rational< NB2, DB2 > r2)
Compare for less-than-or-equal ordering with another rational.