return result;
}
+// Comparisons should maintain ordering invariants
+static unsigned exam_relational_order()
+{
+ unsigned result = 0;
+ numeric i = 1ll<<32, j = i+1;
+ symbol a;
+ relational x = i==a, y = j==a;
+ if (x.compare(y) != -y.compare(x)) {
+ clog << "comparison should be antisymmetric." << endl;
+ result += 1;
+ }
+
+ return result;
+}
+
unsigned exam_relational()
{
unsigned result = 0;
result += exam_relational_elementary(); cout << '.' << flush;
result += exam_relational_possymbol(); cout << '.' << flush;
result += exam_relational_arith(); cout << '.' << flush;
+ result += exam_relational_order(); cout << '.' << flush;
return result;
}
return (o < oth.o) ? -1 : 1;
break;
}
- const int lcmpval = lh.compare(oth.rh);
- return (lcmpval!=0) ? lcmpval : rh.compare(oth.lh);
+ const int lcmpval = lh.compare(oth.lh);
+ return (lcmpval!=0) ? lcmpval : rh.compare(oth.rh);
}
bool relational::match_same_type(const basic & other) const