16 #include <boost/test/unit_test.hpp>
20 template<
class T,
unsigned S>
22 operator<<(std::ostream& stream, const tfloat<T, S>& rhs)
24 stream <<
"\nfloat value_type »" <<
typeid(T).
name()
26 <<
"« internal value »" << rhs.get_value()
27 <<
"« as double »" << rhs.to_double()
28 <<
"« as int »" << rhs.to_int()
36 template<
class T,
unsigned S>
42 BOOST_CHECK_EQUAL(f, 0);
43 BOOST_CHECK_EQUAL(f, 0.);
48 BOOST_CHECK_EQUAL(f, 42);
49 BOOST_CHECK_EQUAL(f, 42.);
54 BOOST_CHECK_EQUAL(f, 42);
55 BOOST_CHECK_EQUAL(f, 42.);
60 BOOST_CHECK_NE(f, 42);
61 BOOST_CHECK_EQUAL(f, 42.42);
65 template<
class T,
unsigned S>
72 BOOST_CHECK_EQUAL(f, 42);
73 BOOST_CHECK_EQUAL(f, 42.);
79 BOOST_CHECK_EQUAL(f, 42);
80 BOOST_CHECK_EQUAL(f, 42.);
86 BOOST_CHECK_NE(f, 42);
87 BOOST_CHECK_EQUAL(f, 42.42);
94 BOOST_CHECK_EQUAL(f, g);
99 template<
class T,
unsigned S>
105 BOOST_CHECK_EQUAL(!
f,
false);
106 BOOST_CHECK_EQUAL(!!
f,
true);
108 BOOST_CHECK_EQUAL(!g,
true);
109 BOOST_CHECK_EQUAL(!!g,
false);
114 BOOST_CHECK_NE(
f, g);
115 BOOST_CHECK_EQUAL(
f, -g);
117 BOOST_CHECK_EQUAL(-
f, -42);
118 BOOST_CHECK_EQUAL(-
f, -42.);
120 BOOST_CHECK_EQUAL(-42, -
f);
121 BOOST_CHECK_EQUAL(-42., -
f);
123 BOOST_CHECK_EQUAL(-
f == g,
true);
124 BOOST_CHECK_EQUAL(
f == -g,
true);
125 BOOST_CHECK_EQUAL(-g ==
f,
true);
126 BOOST_CHECK_EQUAL(g == -
f,
true);
128 BOOST_CHECK_EQUAL(-
f == -42,
true);
129 BOOST_CHECK_EQUAL(-
f == -42.,
true);
131 BOOST_CHECK_EQUAL(-42 == -
f,
true);
132 BOOST_CHECK_EQUAL(-42. == -
f,
true);
138 BOOST_CHECK_EQUAL(+f == f,
true);
139 BOOST_CHECK_EQUAL(f == +f,
true);
141 BOOST_CHECK_EQUAL(+f == 42,
true);
142 BOOST_CHECK_EQUAL(+f == 42.,
true);
144 BOOST_CHECK_EQUAL(42 == +f,
true);
145 BOOST_CHECK_EQUAL(42. == +f,
true);
149 template<
class T,
unsigned S>
156 BOOST_CHECK_EQUAL(
f, 0);
157 BOOST_CHECK_EQUAL(
f, 0.);
163 BOOST_CHECK_EQUAL(f, 0);
164 BOOST_CHECK_EQUAL(f, 0.);
170 BOOST_CHECK_EQUAL(f, 0);
171 BOOST_CHECK_EQUAL(f, 0.);
179 BOOST_CHECK_EQUAL(
f, 1764);
180 BOOST_CHECK_EQUAL(
f, 1764.);
186 BOOST_CHECK_EQUAL(f, 1764);
187 BOOST_CHECK_EQUAL(f, 1764.);
193 BOOST_CHECK_EQUAL(f, 1764);
194 BOOST_CHECK_EQUAL(f, 1764.);
202 BOOST_CHECK_EQUAL(
f, -1764);
203 BOOST_CHECK_EQUAL(
f, -1764.);
209 BOOST_CHECK_EQUAL(f, -1764);
210 BOOST_CHECK_EQUAL(f, -1764.);
216 BOOST_CHECK_EQUAL(f, -1764);
217 BOOST_CHECK_EQUAL(f, -1764.);
225 BOOST_CHECK_EQUAL(
f, 1764);
226 BOOST_CHECK_EQUAL(
f, 1764.);
232 BOOST_CHECK_EQUAL(f, 1764);
233 BOOST_CHECK_EQUAL(f, 1764.);
239 BOOST_CHECK_EQUAL(f, 1764);
240 BOOST_CHECK_EQUAL(f, 1764.);
248 BOOST_CHECK_EQUAL(
f, -1764);
249 BOOST_CHECK_EQUAL(
f, -1764.);
255 BOOST_CHECK_EQUAL(f, -1764);
256 BOOST_CHECK_EQUAL(f, -1764.);
262 BOOST_CHECK_EQUAL(f, -1764);
263 BOOST_CHECK_EQUAL(f, -1764.);
271 BOOST_CHECK_EQUAL(
f, 3.125);
277 BOOST_CHECK_EQUAL(f, 2.5);
283 BOOST_CHECK_EQUAL(f, 3.125);
289 BOOST_CHECK_EQUAL(
f, -3.125);
295 BOOST_CHECK_EQUAL(f, -2.5);
301 BOOST_CHECK_EQUAL(f, 3.125);
305 template<
class T,
unsigned S>
312 BOOST_CHECK_EQUAL(
f, 0);
313 BOOST_CHECK_EQUAL(
f, 0.);
319 BOOST_CHECK_EQUAL(
f, 42);
320 BOOST_CHECK_EQUAL(
f, 42.);
326 BOOST_CHECK_EQUAL(f, 42);
327 BOOST_CHECK_EQUAL(f, 42.);
333 BOOST_CHECK_EQUAL(f, 42);
334 BOOST_CHECK_EQUAL(f, 42.);
342 BOOST_CHECK_EQUAL(
f, -42);
343 BOOST_CHECK_EQUAL(
f, -42.);
349 BOOST_CHECK_EQUAL(f, -42);
350 BOOST_CHECK_EQUAL(f, -42.);
356 BOOST_CHECK_EQUAL(f, -42);
357 BOOST_CHECK_EQUAL(f, -42.);
365 BOOST_CHECK_EQUAL(
f, 42);
366 BOOST_CHECK_EQUAL(
f, 42.);
372 BOOST_CHECK_EQUAL(f, 42);
373 BOOST_CHECK_EQUAL(f, 42.);
379 BOOST_CHECK_EQUAL(f, 42);
380 BOOST_CHECK_EQUAL(f, 42.);
388 BOOST_CHECK_EQUAL(
f, -42);
389 BOOST_CHECK_EQUAL(
f, -42.);
395 BOOST_CHECK_EQUAL(f, -42);
396 BOOST_CHECK_EQUAL(f, -42.);
402 BOOST_CHECK_EQUAL(f, -42);
403 BOOST_CHECK_EQUAL(f, -42.);
411 BOOST_CHECK_EQUAL(
f, 1.25);
417 BOOST_CHECK_EQUAL(f, 1.25);
423 BOOST_CHECK_EQUAL(f, 1.25);
429 BOOST_CHECK_EQUAL(
f, -1.25);
435 BOOST_CHECK_EQUAL(f, -1.25);
441 BOOST_CHECK_EQUAL(f, 1.25);
445 template<
class T,
unsigned S>
452 BOOST_CHECK_EQUAL(f, 42);
453 BOOST_CHECK_EQUAL(f, 42.);
459 BOOST_CHECK_EQUAL(f, 42);
460 BOOST_CHECK_EQUAL(f, 42.);
466 BOOST_CHECK_EQUAL(f, 42.4);
472 BOOST_CHECK_EQUAL(f, 42);
473 BOOST_CHECK_EQUAL(f, 42.);
479 BOOST_CHECK_NE(f, 42);
480 BOOST_CHECK_EQUAL(f, 42.42);
488 BOOST_CHECK_EQUAL(f, -100);
489 BOOST_CHECK_EQUAL(f, -100.);
495 BOOST_CHECK_EQUAL(f, -100);
496 BOOST_CHECK_EQUAL(f, -100.);
502 BOOST_CHECK_EQUAL(
f, -100);
503 BOOST_CHECK_EQUAL(
f, -100.);
509 BOOST_CHECK_NE(
f, -142);
510 BOOST_CHECK_EQUAL(
f, -142.4);
514 template<
class T,
unsigned S>
521 BOOST_CHECK_EQUAL(f, -42);
522 BOOST_CHECK_EQUAL(f, -42.);
528 BOOST_CHECK_EQUAL(f, -42);
529 BOOST_CHECK_EQUAL(f, -42.);
535 BOOST_CHECK_EQUAL(f, -42.4);
541 BOOST_CHECK_EQUAL(f, -42);
542 BOOST_CHECK_EQUAL(f, -42.);
548 BOOST_CHECK_NE(f, -42);
549 BOOST_CHECK_EQUAL(f, -42.42);
557 BOOST_CHECK_EQUAL(f, -100);
558 BOOST_CHECK_EQUAL(f, -100.);
564 BOOST_CHECK_EQUAL(f, -100);
565 BOOST_CHECK_EQUAL(f, -100.);
571 BOOST_CHECK_EQUAL(
f, -100);
572 BOOST_CHECK_EQUAL(
f, -100.);
578 BOOST_CHECK_NE(
f, -142);
579 BOOST_CHECK_EQUAL(
f, -142.4);
583 template<
class T,
unsigned S>
589 BOOST_CHECK_LT(
f, g);
596 BOOST_CHECK_EQUAL(
f < g,
true);
597 BOOST_CHECK_EQUAL(g <
f,
false);
602 BOOST_CHECK_EQUAL(
f < g,
true);
603 BOOST_CHECK_EQUAL(g <
f,
false);
608 BOOST_CHECK_EQUAL(
f < g,
true);
609 BOOST_CHECK_EQUAL(g <
f,
false);
614 BOOST_CHECK_EQUAL(
f < g,
true);
615 BOOST_CHECK_EQUAL(g <
f,
false);
620 BOOST_CHECK_EQUAL(
f < g,
false);
621 BOOST_CHECK_EQUAL(g <
f,
false);
628 BOOST_CHECK_EQUAL(
f < g,
false);
629 BOOST_CHECK_EQUAL(g <
f,
false);
634 BOOST_CHECK_EQUAL(
f < g,
false);
635 BOOST_CHECK_EQUAL(g <
f,
false);
640 BOOST_CHECK_EQUAL(
f < g,
false);
641 BOOST_CHECK_EQUAL(g <
f,
false);
645 template<
class T,
unsigned S>
651 BOOST_CHECK_LE(
f, g);
658 BOOST_CHECK_EQUAL(
f <= g,
true);
659 BOOST_CHECK_EQUAL(g <=
f,
false);
664 BOOST_CHECK_EQUAL(
f <= g,
true);
665 BOOST_CHECK_EQUAL(g <=
f,
false);
670 BOOST_CHECK_EQUAL(
f <= g,
true);
671 BOOST_CHECK_EQUAL(g <=
f,
false);
676 BOOST_CHECK_EQUAL(
f <= g,
true);
677 BOOST_CHECK_EQUAL(g <=
f,
false);
684 BOOST_CHECK_EQUAL(
f <= g,
true);
685 BOOST_CHECK_EQUAL(g <=
f,
true);
690 BOOST_CHECK_EQUAL(
f <= g,
true);
691 BOOST_CHECK_EQUAL(g <=
f,
true);
696 BOOST_CHECK_EQUAL(
f <= g,
true);
697 BOOST_CHECK_EQUAL(g <=
f,
true);
702 BOOST_CHECK_EQUAL(
f <= g,
true);
703 BOOST_CHECK_EQUAL(g <=
f,
true);
707 template<
class T,
unsigned S>
713 BOOST_CHECK_GT(
f, g);
720 BOOST_CHECK_EQUAL(
f > g,
true);
721 BOOST_CHECK_EQUAL(g >
f,
false);
726 BOOST_CHECK_EQUAL(
f > g,
true);
727 BOOST_CHECK_EQUAL(g >
f,
false);
732 BOOST_CHECK_EQUAL(
f > g,
true);
733 BOOST_CHECK_EQUAL(g >
f,
false);
738 BOOST_CHECK_EQUAL(
f > g,
true);
739 BOOST_CHECK_EQUAL(g >
f,
false);
746 BOOST_CHECK_EQUAL(
f > g,
false);
747 BOOST_CHECK_EQUAL(g >
f,
false);
752 BOOST_CHECK_EQUAL(
f > g,
false);
753 BOOST_CHECK_EQUAL(g >
f,
false);
758 BOOST_CHECK_EQUAL(
f > g,
false);
759 BOOST_CHECK_EQUAL(g >
f,
false);
764 BOOST_CHECK_EQUAL(
f > g,
false);
765 BOOST_CHECK_EQUAL(g >
f,
false);
769 template<
class T,
unsigned S>
775 BOOST_CHECK_GE(
f, g);
782 BOOST_CHECK_EQUAL(
f >= g,
true);
783 BOOST_CHECK_EQUAL(g >=
f,
false);
788 BOOST_CHECK_EQUAL(
f >= g,
true);
789 BOOST_CHECK_EQUAL(g >=
f,
false);
794 BOOST_CHECK_EQUAL(
f >= g,
true);
795 BOOST_CHECK_EQUAL(g >=
f,
false);
800 BOOST_CHECK_EQUAL(
f >= g,
true);
801 BOOST_CHECK_EQUAL(g >=
f,
false);
808 BOOST_CHECK_EQUAL(
f >= g,
true);
809 BOOST_CHECK_EQUAL(g >=
f,
true);
814 BOOST_CHECK_EQUAL(
f >= g,
true);
815 BOOST_CHECK_EQUAL(g >=
f,
true);
820 BOOST_CHECK_EQUAL(
f >= g,
true);
821 BOOST_CHECK_EQUAL(g >=
f,
true);
826 BOOST_CHECK_EQUAL(
f >= g,
true);
827 BOOST_CHECK_EQUAL(g >=
f,
true);
831 template<
class T,
unsigned S>
837 BOOST_CHECK_EQUAL(
f, g);
844 BOOST_CHECK_EQUAL(
f == g,
true);
846 BOOST_CHECK_EQUAL(
f == 42,
true);
847 BOOST_CHECK_EQUAL(
f == 42.,
true);
849 BOOST_CHECK_EQUAL(
f == 43,
false);
850 BOOST_CHECK_EQUAL(
f == 43.,
false);
852 BOOST_CHECK_EQUAL(42 ==
f,
true);
853 BOOST_CHECK_EQUAL(42. ==
f,
true);
855 BOOST_CHECK_EQUAL(43 ==
f,
false);
856 BOOST_CHECK_EQUAL(43. ==
f,
false);
860 template<
class T,
unsigned S>
866 BOOST_CHECK_NE(
f, g);
873 BOOST_CHECK_EQUAL(
f != g,
true);
875 BOOST_CHECK_EQUAL(
f != 42,
true);
876 BOOST_CHECK_EQUAL(
f != 42.,
true);
878 BOOST_CHECK_EQUAL(
f != 43,
false);
879 BOOST_CHECK_EQUAL(
f != 43.,
false);
881 BOOST_CHECK_EQUAL(42 !=
f,
true);
882 BOOST_CHECK_EQUAL(42. !=
f,
true);
884 BOOST_CHECK_EQUAL(43 !=
f,
false);
885 BOOST_CHECK_EQUAL(43. !=
f,
false);
889 template<
class T,
unsigned S>
895 BOOST_CHECK_EQUAL(f.
to_int(), 42);
896 BOOST_CHECK_EQUAL(f.
to_int(), 42.);
901 BOOST_CHECK_EQUAL(f.
to_int(), -42);
902 BOOST_CHECK_EQUAL(f.
to_int(), -42.);
907 BOOST_CHECK_EQUAL(f.
to_int(), 42);
908 BOOST_CHECK_EQUAL(f.
to_int(), 42.);
913 BOOST_CHECK_EQUAL(f.
to_int(), 42);
914 BOOST_CHECK_EQUAL(f.
to_int(), 42.);
919 BOOST_CHECK_EQUAL(f.
to_int(), -42);
920 BOOST_CHECK_EQUAL(f.
to_int(), -42.);
924 template<
class T,
unsigned S>
948 BOOST_CHECK_EQUAL(static_cast<int>(
f.to_double()), 42);
949 BOOST_CHECK_EQUAL(
f.to_double(), 42.25);
950 BOOST_CHECK_EQUAL(
g, 42.25);
955 BOOST_CHECK_EQUAL(static_cast<int>(
f.to_double()), -42);
956 BOOST_CHECK_EQUAL(
f.to_double(), -42.25);
957 BOOST_CHECK_EQUAL(
g, -42.25);
961 template<
class T,
unsigned S>
967 BOOST_CHECK_EQUAL(f.
floor(), 42);
972 BOOST_CHECK_EQUAL(f.
floor(), -43);
976 template<
class T,
unsigned S>
985 BOOST_CHECK_EQUAL(
f, 0);
994 for(
int i = 1;
i < 23; ++
i) {
997 BOOST_CHECK_EQUAL(
f, (1 << (
i - 1)) + 1. / 256.);
1006 for(
int i = 1;
i < 23; ++
i) {
1009 BOOST_CHECK_EQUAL(
f, -((1 << (
i - 1)) + 1. / 256.));
1017 BOOST_CHECK_EQUAL(
f, -(1 << 22));
1022 for(
int i = 1;
i <= 8; ++
i) {
1028 , ((1 << 22) + (1 << (22 -
i))) / (1. + 1. / (1 <<
i)));
1033 for(
int i = 1;
i <= 8; ++
i) {
1039 , ((1 << 22) + (1 << (22 -
i))) / (- 1. - 1. / (1 <<
i)));
1043 template<
class T,
unsigned S>
1047 test_create<T, S>();
1048 test_assign<T, S>();
1050 test_multiply<T, S>();
1051 test_divide<T, S>();
1053 test_subtract<T, S>();
1054 test_less_than<T, S>();
1055 test_less_than_equal_to<T, S>();
1056 test_greater_than<T, S>();
1057 test_greater_than_equal_to<T, S>();
1058 test_equal_to<T, S>();
1059 test_not_equal_to<T, S>();
1060 test_to_int<T, S>();
1061 test_to_double<T, S>();
1064 test_divide_range_optimizations<T, S>();
1073 test<tfloat::value_type, tfloat::shift>();
static void test_less_than()
BOOST_AUTO_TEST_CASE(test_floating_point_emulation)
static void test_to_int()
static void test_create()
static void test_equal_to()
static void test_less_than_equal_to()
void instanciate_idiv(floating_point_emulation::tfloat< Sint32, 8 > &f, const floating_point_emulation::tfloat< Sint32, 8 > g)
static void test_subtract()
Contains code for a floating point emulation.
static void test_divide_range_optimizations()
static void test_greater_than()
static void test_multiply()
static void test_greater_than_equal_to()
static void test_to_double()
Template class for the emulation.
static void test_assign()
static void test_not_equal_to()
GLuint const GLchar * name
static void test_divide()