diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-11-16T17·46+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-11-16T17·46+0000 |
commit | 3e5a019a070cbaac7d1248e208c66da9fdb23313 (patch) | |
tree | dc18227825e04cabe6a4829cc76c7729792b7d78 /src/libnix/test-aterm.cc | |
parent | 06ae269c7c5cdda32072f3f00cf644e540ba12cd (diff) |
* Some utility functions for working with ATerms.
Diffstat (limited to 'src/libnix/test-aterm.cc')
-rw-r--r-- | src/libnix/test-aterm.cc | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/libnix/test-aterm.cc b/src/libnix/test-aterm.cc new file mode 100644 index 000000000000..325639ca4f30 --- /dev/null +++ b/src/libnix/test-aterm.cc @@ -0,0 +1,66 @@ +#include "aterm.hh" +#include <iostream> + + +void runTests() +{ + verbosity = lvlDebug; + + ATMatcher pos; + + ATerm t = ATmake("Call(Foo, Bar, \"xyz\")"); + + debug(format("term: %1%") % t); + + string fun, arg3; + ATerm lhs, rhs; + + if (!(atMatch(pos, t) >> "Call" >> lhs >> rhs >> arg3)) + throw Error("should succeed"); + if (arg3 != "xyz") throw Error("bad 1"); + + if (!(atMatch(pos, t) >> fun >> lhs >> rhs >> arg3)) + throw Error("should succeed"); + if (fun != "Call") throw Error("bad 2"); + if (arg3 != "xyz") throw Error("bad 3"); + + if (!(atMatch(pos, t) >> fun >> lhs >> rhs >> "xyz")) + throw Error("should succeed"); + + if (atMatch(pos, t) >> fun >> lhs >> rhs >> "abc") + throw Error("should fail"); + + if (atMatch(pos, t) >> "Call" >> lhs >> rhs >> "abc") + throw Error("should fail"); + + t = ATmake("X([A, B, C], \"abc\")"); + + ATerm t1, t2, t3; + if (atMatch(pos, t) >> "X" >> t1 >> t2 >> t3) + throw Error("should fail"); + if (!(atMatch(pos, t) >> "X" >> t1 >> t2)) + throw Error("should succeed"); + ATermList ts; + if (!(atMatch(pos, t) >> "X" >> ts >> t2)) + throw Error("should succeed"); + if (ATgetLength(ts) != 3) + throw Error("bad"); + if (atMatch(pos, t) >> "X" >> t1 >> ts) + throw Error("should fail"); +} + + +int main(int argc, char * * argv) +{ + ATerm bottomOfStack; + ATinit(argc, argv, &bottomOfStack); + + try { + runTests(); + } catch (Error & e) { + printMsg(lvlError, format("error: %1%") % e.msg()); + return 1; + } + + return 0; +} |