File: parser.cpp

package info (click to toggle)
antimony 0.9.3-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,476 kB
  • sloc: cpp: 42,596; ansic: 28,661; python: 1,093; yacc: 128; lex: 114; sh: 90; makefile: 10
file content (71 lines) | stat: -rw-r--r-- 1,373 bytes parent folder | download | duplicates (3)
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
67
68
69
70
71
#include <Python.h>
#include <catch/catch.hpp>

#include "fab/fab.h"
#include "fab/tree/tree.h"
#include "fab/tree/parser.h"

TEST_CASE("Basic parsing")
{
    MathTree* t;

    SECTION("Parsing 'X'")
    {
        t = parse("X");
        REQUIRE(t != nullptr);
        REQUIRE(t->num_levels == 1);
        REQUIRE(t->num_constants == 0);
        free(t);
    }

    SECTION("Parsing '+Xf1.0'")
    {
        t = parse("+Xf1.0");
        REQUIRE(t != nullptr);
        REQUIRE(t->num_constants == 1);
        REQUIRE(t->num_levels == 2);
        free(t);
    }

    SECTION("Duplicate pruning")
    {
        t = parse("*+Xf2.0+Yf2.0");
        REQUIRE(t != nullptr);
        REQUIRE(t->num_constants == 1);
        REQUIRE(t->num_levels == 3);
        free(t);
    }

    SECTION("Invalid parse")
    {
        t = parse("f");
        REQUIRE(t == nullptr);
        free(t);
    }

    SECTION("Parsing an empty string")
    {
        t = parse("");
        REQUIRE(t == nullptr);
        free(t);
    }

    SECTION("Incomplete expression")
    {
        t = parse("+X");
        REQUIRE(t == nullptr);
        free(t);
    }

    SECTION("Long expression")
    {
        std::string s;
        for (int i=0; i < 99; ++i)
            s += "i";
        for (int i=0; i < 100; ++i)
            s += "X";

        t = parse(s.c_str());
        REQUIRE(t != nullptr);
    }
}