div: added long division, fixed a few bugs
This commit is contained in:
43
tests/test.c
43
tests/test.c
@@ -1,6 +1,13 @@
|
||||
#include "greatest.h"
|
||||
#include "../silly.h"
|
||||
|
||||
#define DELTA 0.01
|
||||
|
||||
#define ASSERT_DELTA(expected, actual) {\
|
||||
double delta = expected-actual;\
|
||||
ASSERT_IN_RANGE(0, delta, DELTA);\
|
||||
}
|
||||
|
||||
TEST silly_zeros_is_zero() {
|
||||
silly x = silly_zeros();
|
||||
|
||||
@@ -99,19 +106,35 @@ TEST silly_conversion() {
|
||||
x.sign = 1;
|
||||
x.before = 1;
|
||||
x.after = (int)(((double)0xffffffff)/10);
|
||||
ASSERT(-1.1 - silly_to_double(x) <= 0.01);
|
||||
ASSERT_DELTA(-1.1, silly_to_double(x));
|
||||
|
||||
x = silly_from_float(0.0);
|
||||
ASSERT_EQ_FMT(0.0, silly_to_double(x), "%f");
|
||||
x = silly_from_float(-1.1);
|
||||
ASSERT(-1.1 - silly_to_double(x) <= 0.01);
|
||||
ASSERT_DELTA(-1.1, silly_to_double(x));
|
||||
|
||||
x = silly_from_double((double) 0.0);
|
||||
ASSERT_EQ_FMT(0.0, silly_to_double(x), "%f");
|
||||
x = silly_from_double((double) -1.1);
|
||||
ASSERT(-1.1 - silly_to_double(x) <= 0.01);
|
||||
ASSERT_DELTA(-1.1, silly_to_double(x));
|
||||
x = silly_from_double((double) -413.25);
|
||||
ASSERT(-413.25 - silly_to_double(x) <= 0.01);
|
||||
ASSERT_DELTA(-413.25, silly_to_double(x));
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
TEST silly_integral_division() {
|
||||
silly x = make_silly(0, 10, 0);
|
||||
silly y = make_silly(1, 5, 0);
|
||||
|
||||
ASSERT_EQ_FMT(-2.0, silly_to_double(silly_idiv(x, y)), "%f");
|
||||
|
||||
y = make_silly(1, 2, 5);
|
||||
|
||||
ASSERT_EQ_FMT(-4.0, silly_to_double(silly_idiv(x, y)), "%f");
|
||||
|
||||
y = make_silly(1, 2, 3);
|
||||
ASSERT_EQ_FMT(-4.0, silly_to_double(silly_idiv(x, y)), "%f");
|
||||
|
||||
PASS();
|
||||
}
|
||||
@@ -122,14 +145,13 @@ TEST silly_division() {
|
||||
|
||||
ASSERT_EQ_FMT(-2.0, silly_to_double(silly_div(x, y)), "%f");
|
||||
|
||||
y = make_silly(1, 2, 5);
|
||||
y = make_silly(1, 2, 0xffffffff/2);
|
||||
|
||||
ASSERT_EQ_FMT(-4.0, silly_to_double(silly_div(x, y)), "%f");
|
||||
ASSERT_DELTA(-4.0, silly_to_double(silly_div(x, y)));
|
||||
|
||||
// :(
|
||||
y = make_silly(1, 2, 3);
|
||||
|
||||
ASSERT_EQ_FMT(-4.0, silly_to_double(silly_div(x, y)), "%f");
|
||||
x = make_silly(0, 4, 0);
|
||||
y = make_silly(0, 8, 0);
|
||||
ASSERT_DELTA(0.5, silly_to_double(silly_div(x, y)));
|
||||
|
||||
PASS();
|
||||
}
|
||||
@@ -140,6 +162,7 @@ SUITE(tests) {
|
||||
RUN_TEST(silly_addition);
|
||||
RUN_TEST(silly_subtraction);
|
||||
RUN_TEST(silly_multiplication);
|
||||
RUN_TEST(silly_integral_division);
|
||||
RUN_TEST(silly_division);
|
||||
RUN_TEST(silly_conversion);
|
||||
}
|
||||
|
Reference in New Issue
Block a user