| #include "mlir/Analysis/Presburger/Fraction.h" |
| #include "./Utils.h" |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| |
| using namespace mlir; |
| using namespace presburger; |
| |
| TEST(FractionTest, getAsInteger) { |
| Fraction f(3, 1); |
| EXPECT_EQ(f.getAsInteger(), DynamicAPInt(3)); |
| } |
| |
| TEST(FractionTest, nearIntegers) { |
| Fraction f(52, 14); |
| |
| EXPECT_EQ(floor(f), 3); |
| EXPECT_EQ(ceil(f), 4); |
| } |
| |
| TEST(FractionTest, reduce) { |
| Fraction f(20, 35), g(-56, 63); |
| EXPECT_EQ(f, Fraction(4, 7)); |
| EXPECT_EQ(g, Fraction(-8, 9)); |
| } |
| |
| TEST(FractionTest, arithmetic) { |
| Fraction f(3, 4), g(-2, 3); |
| |
| EXPECT_EQ(f / g, Fraction(-9, 8)); |
| EXPECT_EQ(f * g, Fraction(-1, 2)); |
| EXPECT_EQ(f + g, Fraction(1, 12)); |
| EXPECT_EQ(f - g, Fraction(17, 12)); |
| |
| f /= g; |
| EXPECT_EQ(f, Fraction(-9, 8)); |
| f *= g; |
| EXPECT_EQ(f, Fraction(3, 4)); |
| f += g; |
| EXPECT_EQ(f, Fraction(Fraction(1, 12))); |
| f -= g; |
| EXPECT_EQ(f, Fraction(3, 4)); |
| } |
| |
| TEST(FractionTest, relational) { |
| Fraction f(2, 5), g(3, 7); |
| EXPECT_TRUE(f < g); |
| EXPECT_FALSE(g < f); |
| |
| EXPECT_EQ(f, Fraction(4, 10)); |
| } |