@@ -608,3 +608,97 @@ TEST(IntegerRelationTest, convertVarKindToLocal) {
608
608
EXPECT_EQ (space.getId (VarKind::Symbol, 0 ), Identifier (&identifiers[3 ]));
609
609
EXPECT_EQ (space.getId (VarKind::Symbol, 1 ), Identifier (&identifiers[4 ]));
610
610
}
611
+
612
+ TEST (IntegerRelationTest, rangeProduct) {
613
+ IntegerRelation r1 = parseRelationFromSet (
614
+ " (i, j, k) : (2*i + 3*k == 0, i >= 0, j >= 0, k >= 0)" , 2 );
615
+ IntegerRelation r2 = parseRelationFromSet (
616
+ " (i, j, l) : (4*i + 6*j + 9*l == 0, i >= 0, j >= 0, l >= 0)" , 2 );
617
+
618
+ IntegerRelation rangeProd = r1.rangeProduct (r2);
619
+ IntegerRelation expected =
620
+ parseRelationFromSet (" (i, j, k, l) : (2*i + 3*k == 0, 4*i + 6*j + 9*l == "
621
+ " 0, i >= 0, j >= 0, k >= 0, l >= 0)" ,
622
+ 2 );
623
+
624
+ EXPECT_TRUE (expected.isEqual (rangeProd));
625
+ }
626
+
627
+ TEST (IntegerRelationTest, rangeProductMultdimRange) {
628
+ IntegerRelation r1 =
629
+ parseRelationFromSet (" (i, k) : (2*i + 3*k == 0, i >= 0, k >= 0)" , 1 );
630
+ IntegerRelation r2 = parseRelationFromSet (
631
+ " (i, l, m) : (4*i + 6*m + 9*l == 0, i >= 0, l >= 0, m >= 0)" , 1 );
632
+
633
+ IntegerRelation rangeProd = r1.rangeProduct (r2);
634
+ IntegerRelation expected =
635
+ parseRelationFromSet (" (i, k, l, m) : (2*i + 3*k == 0, 4*i + 6*m + 9*l == "
636
+ " 0, i >= 0, k >= 0, l >= 0, m >= 0)" ,
637
+ 1 );
638
+
639
+ EXPECT_TRUE (expected.isEqual (rangeProd));
640
+ }
641
+
642
+ TEST (IntegerRelationTest, rangeProductMultdimRangeSwapped) {
643
+ IntegerRelation r1 = parseRelationFromSet (
644
+ " (i, l, m) : (4*i + 6*m + 9*l == 0, i >= 0, l >= 0, m >= 0)" , 1 );
645
+ IntegerRelation r2 =
646
+ parseRelationFromSet (" (i, k) : (2*i + 3*k == 0, i >= 0, k >= 0)" , 1 );
647
+
648
+ IntegerRelation rangeProd = r1.rangeProduct (r2);
649
+ IntegerRelation expected =
650
+ parseRelationFromSet (" (i, l, m, k) : (2*i + 3*k == 0, 4*i + 6*m + 9*l == "
651
+ " 0, i >= 0, k >= 0, l >= 0, m >= 0)" ,
652
+ 1 );
653
+
654
+ EXPECT_TRUE (expected.isEqual (rangeProd));
655
+ }
656
+
657
+ TEST (IntegerRelationTest, rangeProductEmptyDomain) {
658
+ IntegerRelation r1 =
659
+ parseRelationFromSet (" (i, j) : (4*i + 9*j == 0, i >= 0, j >= 0)" , 0 );
660
+ IntegerRelation r2 =
661
+ parseRelationFromSet (" (k, l) : (2*k + 3*l == 0, k >= 0, l >= 0)" , 0 );
662
+ IntegerRelation rangeProd = r1.rangeProduct (r2);
663
+ IntegerRelation expected =
664
+ parseRelationFromSet (" (i, j, k, l) : (2*k + 3*l == 0, 4*i + 9*j == "
665
+ " 0, i >= 0, j >= 0, k >= 0, l >= 0)" ,
666
+ 0 );
667
+ EXPECT_TRUE (expected.isEqual (rangeProd));
668
+ }
669
+
670
+ TEST (IntegerRelationTest, rangeProductEmptyRange) {
671
+ IntegerRelation r1 =
672
+ parseRelationFromSet (" (i, j) : (4*i + 9*j == 0, i >= 0, j >= 0)" , 2 );
673
+ IntegerRelation r2 =
674
+ parseRelationFromSet (" (i, j) : (2*i + 3*j == 0, i >= 0, j >= 0)" , 2 );
675
+ IntegerRelation rangeProd = r1.rangeProduct (r2);
676
+ IntegerRelation expected =
677
+ parseRelationFromSet (" (i, j) : (2*i + 3*j == 0, 4*i + 9*j == "
678
+ " 0, i >= 0, j >= 0)" ,
679
+ 2 );
680
+ EXPECT_TRUE (expected.isEqual (rangeProd));
681
+ }
682
+
683
+ TEST (IntegerRelationTest, rangeProductEmptyDomainAndRange) {
684
+ IntegerRelation r1 = parseRelationFromSet (" () : ()" , 0 );
685
+ IntegerRelation r2 = parseRelationFromSet (" () : ()" , 0 );
686
+ IntegerRelation rangeProd = r1.rangeProduct (r2);
687
+ IntegerRelation expected = parseRelationFromSet (" () : ()" , 0 );
688
+ EXPECT_TRUE (expected.isEqual (rangeProd));
689
+ }
690
+
691
+ TEST (IntegerRelationTest, rangeProductSymbols) {
692
+ IntegerRelation r1 = parseRelationFromSet (
693
+ " (i, j)[s] : (2*i + 3*j + s == 0, i >= 0, j >= 0)" , 1 );
694
+ IntegerRelation r2 = parseRelationFromSet (
695
+ " (i, l)[s] : (3*i + 4*l + s == 0, i >= 0, l >= 0)" , 1 );
696
+
697
+ IntegerRelation rangeProd = r1.rangeProduct (r2);
698
+ IntegerRelation expected = parseRelationFromSet (
699
+ " (i, j, l)[s] : (2*i + 3*j + s == 0, 3*i + 4*l + s == "
700
+ " 0, i >= 0, j >= 0, l >= 0)" ,
701
+ 1 );
702
+
703
+ EXPECT_TRUE (expected.isEqual (rangeProd));
704
+ }
0 commit comments