1111#include " src/__support/fixed_point/fx_rep.h"
1212#include " test/UnitTest/Test.h"
1313
14- template <typename XType> XType get_epsilon () {
15- // TODO: raise error
16- return 0 ;
17- }
14+ template <typename XType> XType get_epsilon () = delete;
1815template <> fract get_epsilon () { return FRACT_EPSILON; }
1916template <> unsigned fract get_epsilon () { return UFRACT_EPSILON; }
2017template <> long fract get_epsilon () { return LFRACT_EPSILON; }
@@ -29,10 +26,10 @@ class DivITest : public LIBC_NAMESPACE::testing::Test {
2926
3027 void testBasic (DivIFunc func) {
3128 XType epsilon = get_epsilon<XType>();
32- EXPECT_LT ((func (2 , 3 ) - 0 .666666r ), epsilon);
29+ EXPECT_LT ((func (2 , 3 ) - 0 .666656494140625r ), epsilon);
3330 EXPECT_LT ((func (3 , 4 ) - 0 .75r), epsilon);
34- EXPECT_LT ((func (1043 , 2764 ) - 0 .37735r ), epsilon);
35- EXPECT_LT ((func (60000 , 720293 ) - 0 .083299r ), epsilon);
31+ EXPECT_LT ((func (1043 , 2764 ) - 0 .3773516643r ), epsilon);
32+ EXPECT_LT ((func (60000 , 720293 ) - 0 .08329943509r ), epsilon);
3633
3734 EXPECT_EQ (func (128 , 256 ), 0 .5r);
3835 EXPECT_EQ (func (1 , 2 ), 0 .5r);
@@ -48,9 +45,16 @@ class DivITest : public LIBC_NAMESPACE::testing::Test {
4845
4946 void testSpecial (DivIFunc func) {
5047 EXPECT_EQ (func (0 ,10 ), 0 .r );
51- EXPECT_DEATH ([ func] { func ( 10 , 0 ); }, WITH_SIGNAL (- 1 ) );
48+ EXPECT_EQ ( func ( 0 ,- 10 ), 0 . r );
5249 EXPECT_EQ (func (-32768 ,32768 ), FRACT_MIN);
5350 EXPECT_EQ (func (32767 ,32768 ), FRACT_MAX);
51+ EXPECT_EQ (func (INT_MAX,INT_MAX), 1 .0r);
52+ EXPECT_EQ (func (INT_MAX-1 ,INT_MAX), 0 .99999999r);
53+ EXPECT_EQ (func (INT_MIN,INT_MAX), FRACT_MIN);
54+ /* Expecting 0 here as fract is not precise enough to
55+ * handle 1/INT_MAX
56+ */
57+ EXPECT_EQ (func (1 , INT_MAX), 0 .r );
5458 }
5559};
5660
0 commit comments