1014912a7SAbhinav271828 #include "mlir/Analysis/Presburger/Fraction.h"
2014912a7SAbhinav271828 #include "./Utils.h"
3014912a7SAbhinav271828 #include <gmock/gmock.h>
4014912a7SAbhinav271828 #include <gtest/gtest.h>
5014912a7SAbhinav271828
6014912a7SAbhinav271828 using namespace mlir;
7014912a7SAbhinav271828 using namespace presburger;
8014912a7SAbhinav271828
TEST(FractionTest,getAsInteger)9014912a7SAbhinav271828 TEST(FractionTest, getAsInteger) {
10014912a7SAbhinav271828 Fraction f(3, 1);
11*1a0e67d7SRamkumar Ramachandra EXPECT_EQ(f.getAsInteger(), DynamicAPInt(3));
12014912a7SAbhinav271828 }
13014912a7SAbhinav271828
TEST(FractionTest,nearIntegers)14014912a7SAbhinav271828 TEST(FractionTest, nearIntegers) {
15014912a7SAbhinav271828 Fraction f(52, 14);
16014912a7SAbhinav271828
17014912a7SAbhinav271828 EXPECT_EQ(floor(f), 3);
18014912a7SAbhinav271828 EXPECT_EQ(ceil(f), 4);
19014912a7SAbhinav271828 }
20014912a7SAbhinav271828
TEST(FractionTest,reduce)21014912a7SAbhinav271828 TEST(FractionTest, reduce) {
22014912a7SAbhinav271828 Fraction f(20, 35), g(-56, 63);
23014912a7SAbhinav271828 EXPECT_EQ(f, Fraction(4, 7));
24014912a7SAbhinav271828 EXPECT_EQ(g, Fraction(-8, 9));
25014912a7SAbhinav271828 }
26014912a7SAbhinav271828
TEST(FractionTest,arithmetic)27014912a7SAbhinav271828 TEST(FractionTest, arithmetic) {
28014912a7SAbhinav271828 Fraction f(3, 4), g(-2, 3);
29014912a7SAbhinav271828
30014912a7SAbhinav271828 EXPECT_EQ(f / g, Fraction(-9, 8));
31014912a7SAbhinav271828 EXPECT_EQ(f * g, Fraction(-1, 2));
32014912a7SAbhinav271828 EXPECT_EQ(f + g, Fraction(1, 12));
33014912a7SAbhinav271828 EXPECT_EQ(f - g, Fraction(17, 12));
34014912a7SAbhinav271828
35014912a7SAbhinav271828 f /= g;
36014912a7SAbhinav271828 EXPECT_EQ(f, Fraction(-9, 8));
37014912a7SAbhinav271828 f *= g;
38014912a7SAbhinav271828 EXPECT_EQ(f, Fraction(3, 4));
39014912a7SAbhinav271828 f += g;
40014912a7SAbhinav271828 EXPECT_EQ(f, Fraction(Fraction(1, 12)));
41014912a7SAbhinav271828 f -= g;
42014912a7SAbhinav271828 EXPECT_EQ(f, Fraction(3, 4));
43014912a7SAbhinav271828 }
44014912a7SAbhinav271828
TEST(FractionTest,relational)45014912a7SAbhinav271828 TEST(FractionTest, relational) {
46014912a7SAbhinav271828 Fraction f(2, 5), g(3, 7);
47014912a7SAbhinav271828 EXPECT_TRUE(f < g);
48014912a7SAbhinav271828 EXPECT_FALSE(g < f);
49014912a7SAbhinav271828
50014912a7SAbhinav271828 EXPECT_EQ(f, Fraction(4, 10));
51014912a7SAbhinav271828 }
52