summaryrefslogtreecommitdiff
path: root/test/example/match.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/example/match.cpp')
-rw-r--r--test/example/match.cpp73
1 files changed, 62 insertions, 11 deletions
diff --git a/test/example/match.cpp b/test/example/match.cpp
index e485f2355..21bbbab98 100644
--- a/test/example/match.cpp
+++ b/test/example/match.cpp
@@ -324,20 +324,44 @@ void test_internal_unary() {
std::cout << "Testing Internal::UnaryMatcher\n";
Unary* out = nullptr;
+ UnaryOp op;
- auto eqz32Matcher =
- Internal::UnaryMatcher(&out, EqZInt32, Internal::Any<Expression*>(nullptr));
+ auto unMatcher = Internal::UnaryMatcher(
+ &out, Internal::Any<UnaryOp>(&op), Internal::Any<Expression*>(nullptr));
+ assert(unMatcher.matches(eqz32));
+ assert(out == eqz32);
+ assert(op == EqZInt32);
+ assert(unMatcher.matches(eqz64));
+ assert(out == eqz64);
+ assert(op == EqZInt64);
+ assert(unMatcher.matches(clz));
+ assert(out == clz);
+ assert(op == ClzInt32);
+ assert(!unMatcher.matches(nop));
+
+ assert(matches(clz, unary(any())));
+ assert(matches(eqz64, unary(&out, any())));
+ assert(out == eqz64);
+ assert(matches(eqz32, unary(&op, any())));
+ assert(op == EqZInt32);
+
+ std::cout << "Testing Internal::UnaryOpMatcher\n";
+
+ out = nullptr;
+
+ auto eqz32Matcher = Internal::UnaryOpMatcher(
+ &out, EqZInt32, Internal::Any<Expression*>(nullptr));
assert(eqz32Matcher.matches(eqz32));
assert(out == eqz32);
assert(!eqz32Matcher.matches(eqz64));
assert(!eqz32Matcher.matches(clz));
assert(!eqz32Matcher.matches(nop));
- std::cout << "Testing Internal::AbstractUnaryMatcher\n";
+ std::cout << "Testing Internal::AbstractUnaryOpMatcher\n";
out = nullptr;
- auto eqzMatcher = Internal::AbstractUnaryMatcher(
+ auto eqzMatcher = Internal::AbstractUnaryOpMatcher(
&out, Abstract::EqZ, Internal::Any<Expression*>(nullptr));
assert(eqzMatcher.matches(eqz32));
assert(out == eqz32);
@@ -362,27 +386,54 @@ void test_internal_binary() {
std::cout << "Testing Internal::BinaryMatcher\n";
Binary* out = nullptr;
+ BinaryOp op;
- auto eq32Matcher =
+ auto binMatcher =
Internal::BinaryMatcher(&out,
- EqInt32,
+ Internal::Any<BinaryOp>(&op),
Internal::Any<Expression*>(nullptr),
Internal::Any<Expression*>(nullptr));
+ assert(binMatcher.matches(eq32));
+ assert(out == eq32);
+ assert(op == EqInt32);
+ assert(binMatcher.matches(eq64));
+ assert(out == eq64);
+ assert(op == EqInt64);
+ assert(binMatcher.matches(add));
+ assert(out == add);
+ assert(op == AddInt32);
+ assert(!binMatcher.matches(nop));
+
+ assert(matches(add, binary(any(), any())));
+ assert(matches(eq64, binary(&out, any(), any())));
+ assert(out == eq64);
+ assert(matches(eq32, binary(&op, any(), any())));
+ assert(op == EqInt32);
+
+ std::cout << "Testing Internal::BinaryOpMatcher\n";
+
+ out = nullptr;
+
+ auto eq32Matcher =
+ Internal::BinaryOpMatcher(&out,
+ EqInt32,
+ Internal::Any<Expression*>(nullptr),
+ Internal::Any<Expression*>(nullptr));
assert(eq32Matcher.matches(eq32));
assert(out == eq32);
assert(!eq32Matcher.matches(eq64));
assert(!eq32Matcher.matches(add));
assert(!eq32Matcher.matches(nop));
- std::cout << "Testing Internal::AbstractBinaryMatcher\n";
+ std::cout << "Testing Internal::AbstractBinaryOpMatcher\n";
out = nullptr;
auto eqMatcher =
- Internal::AbstractBinaryMatcher(&out,
- Abstract::Eq,
- Internal::Any<Expression*>(nullptr),
- Internal::Any<Expression*>(nullptr));
+ Internal::AbstractBinaryOpMatcher(&out,
+ Abstract::Eq,
+ Internal::Any<Expression*>(nullptr),
+ Internal::Any<Expression*>(nullptr));
assert(eqMatcher.matches(eq32));
assert(out == eq32);
assert(eqMatcher.matches(eq64));