about summary refs log tree commit diff
path: root/src/libnix/test-aterm.cc
blob: 325639ca4f30e3e69c2f7540198e440b5690908c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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;
}