Exemplo n.º 1
0
 def test_diff_num_commands(self):
     self.assertFalse(
         ast_equal(
             ast.Program(
                 ast.Body([
                     ast.commands_ast.Loader(
                         ast.Var("source"),
                         ast.Source("www.coviddata.com/stream")),
                 ])), ast.Program(ast.Body([]))))
Exemplo n.º 2
0
 def test_different_load_var_names(self):
     self.assertFalse(
         ast_equal(
             ast.Program(
                 ast.Body([
                     ast.commands_ast.Loader(
                         ast.Var("source"),
                         ast.Source("www.coviddata.com/stream")),
                 ])),
             ast.Program(
                 ast.Body([
                     ast.commands_ast.Loader(
                         ast.Var("source1"),
                         ast.Source("www.coviddata.com/stream")),
                 ]))))
Exemplo n.º 3
0
 def test_diff_math_funcs_(self):
     self.assertFalse(
         ast_equal(
             ast.Program(
                 ast.Body([
                     ast.Trigger(
                         ast.Var("source"),
                         ast.MathFuncs([ast.Increment(ast.Var("count"))]))
                 ])),
             ast.Program(
                 ast.Body([
                     ast.Trigger(
                         ast.Var("source"),
                         ast.MathFuncs([ast.Decrement(ast.Var("count"))]))
                 ]))))
Exemplo n.º 4
0
 def test_identical_commands(self):
     self.assertTrue(
         ast_equal(
             ast.Program(
                 ast.Body([
                     ast.commands_ast.Loader(
                         ast.Var("source"),
                         ast.Source("www.coviddata.com/stream")),
                 ])),
             ast.Program(
                 ast.Body([
                     ast.commands_ast.Loader(
                         ast.Var("source"),
                         ast.Source("www.coviddata.com/stream")),
                 ]))))
Exemplo n.º 5
0
def example_1() -> ast.Program:
    """
    Instantiates program example 1 as a native AST
    """
    return ast.Program(
        ast.Body([

            # source = live remote "www.coviddata.com/stream"
            ast.Loader(ast.Var("source"),
                                    ast.Source("www.coviddata.com/stream")),

            # map source "case_date" to number date
            ast.Mapper(ast.Var("source"), "case_date",
                       ast.Declare(ast.Type(Types.NUMBER), ast.Var("date"))),

            # number count = 0
            ast.Assigner(ast.Declare(ast.Type(Types.NUMBER), ast.Var("count")),
                         ast.Value(IntegerValue(0))),

            # on new data from source count++
            ast.Trigger(ast.Var("source"), ast.MathFuncs([ast.Increment(ast.Var(
                "count"))])),

            # plot xy date age titled age_graph
            ast.Plotter(ast.Graph(ScatterXYGraph()),
                        ast.VarAxis(ast.Var("date")),
                        ast.VarAxis(ast.Var("age")), "age_graph"),

            # plot line xy date log(count) titled cases_log
            ast.Plotter(ast.Graph(LineXYGraph()),
                        ast.VarAxis(ast.Var("date")),
                        ast.FuncAxis(ast.BuiltinFunc(NumFunction.LOG, ast.Var(
                            "count"))),
                        "age_graph"),
        ]))
Exemplo n.º 6
0
 def test_diff_commands(self):
     self.assertFalse(
         ast_equal(
             ast.Program(
                 ast.Body([
                     ast.commands_ast.Loader(
                         ast.Var("source"),
                         ast.Source("www.coviddata.com/stream")),
                 ])),
             ast.Program(
                 ast.Body([
                     ast.Mapper(
                         ast.Var("source"), "case_date",
                         ast.Declare(ast.Type(Types.NUMBER),
                                     ast.Var("date")))
                 ]))))
Exemplo n.º 7
0
 def test_diff_map_declare_var(self):
     self.assertFalse(
         ast_equal(
             ast.Program(
                 ast.Body([
                     ast.Mapper(
                         ast.Var("source"), "case_date",
                         ast.Declare(ast.Type(Types.NUMBER),
                                     ast.Var("date")))
                 ])),
             ast.Program(
                 ast.Body([
                     ast.Mapper(
                         ast.Var("source"), "case_date",
                         ast.Declare(ast.Type(Types.NUMBER),
                                     ast.Var("count")))
                 ]))))
Exemplo n.º 8
0
 def parseProgram(self) -> ast.Program:
     commands = []
     self.tokenizer.get_and_check_next("program:")
     self.tokenizer.get_and_check_next(";")
     while(self.tokenizer.more_tokens() and self.tokenizer.check_next() != "start!"):
         command = self.parseCommand()
         commands.append(command)
     self.tokenizer.get_and_check_next("start!")
     return ast.Program(ast.Body(commands))
Exemplo n.º 9
0
 def test_invalid_host_no_trigger(self):
     e = Evaluator()
     p = ast.Program(
         ast.Body([
             ast.Loader(ast.Var("source"),
                        ast.Source("https://covid-apiiii.com/api/reports")),
         ]))
     code, err = e.evaluate(p, duration=4000)
     self.assertNotEqual(0, code)
     self.assertTrue(isinstance(err, DataLoaderError))
Exemplo n.º 10
0
def simple_plot_example() -> ast.Program:

    return ast.Program(ast.Body([
        ast.Plotter(ast.Graph(ScatterXYGraph()),
                    ast.VarAxis(ast.Var("t")),
                    ast.FuncAxis(ast.BuiltinFunc(NumFunction.SIN, ast.Var(
                        "t"))),
                    "sine_wave"),

    ]))
Exemplo n.º 11
0
 def test_program_construction(self):
     try:
         v: ast.Var = ast.Var("placeholder")
         t: ast.Type = ast.Type(primitives.Types.NUMBER)
         d: ast.Declare = ast.Declare(t, v)
         b: ast.Body = ast.Body([
             ast.commands_ast.Assigner(d, 4),
             ast.commands_ast.Assigner(d, "hello")
         ])
         p: ast.Program = ast.Program(b)
     except TypeError:
         self.fail("Failed to build")
Exemplo n.º 12
0
 def test_duplicate_name(self):
     e = Evaluator()
     p = ast.Program(
         ast.Body([
             ast.Loader(ast.Var("source"),
                        ast.Source("www.source.com")),
             ast.Loader(ast.Var("source"),
                        ast.Source("www.source2.com")),
         ]))
     code, err = e.evaluate(p, duration=4000)
     self.assertNotEqual(0, code)
     self.assertTrue(isinstance(err, DataLoaderError))
Exemplo n.º 13
0
 def test_valid_source(self):
     e = Evaluator()
     p = ast.Program(
         ast.Body([
             ast.Loader(ast.Var("source"),
                        ast.Source("https://covid-api.com/api/reports")),
             ast.Assigner(ast.Declare(ast.Type(Types.NUMBER), ast.Var("count")),
                          ast.Value(IntegerValue(0))),
             ast.Trigger(ast.Var("source"), ast.MathFuncs([ast.Increment(ast.Var(
                 "count"))])),
         ]))
     code, err = e.evaluate(p, duration=4000)
     self.assertEqual(0, code)
Exemplo n.º 14
0
 def test_simple_func_baseline(self):
     e = Evaluator()
     p = ast.Program(
         ast.Body([
             ast.Loader(ast.Var("source"),
                        ast.Source("https://covid-api.com/api/reports")),
             ast.Assigner(ast.Declare(ast.Type(Types.NUMBER), ast.Var("count")),
                          ast.Value(IntegerValue(20))),
             ast.Trigger(ast.Var("source"), ast.MathFuncs([])),
         ]))
     code, err = e.evaluate(p, duration=7000)
     self.assertEqual(0, code)
     self.assertEqual(20, cast(IntegerValue, e.env.get_val("count")).value)
Exemplo n.º 15
0
 def test_pow_overflow(self):
     e = Evaluator()
     p = ast.Program(
         ast.Body([
             ast.Loader(ast.Var("source"),
                        ast.Source("https://covid-api.com/api/reports")),
             ast.Assigner(ast.Declare(ast.Type(Types.NUMBER), ast.Var("count")),
                          ast.Value(FloatValue(1.1))),
             ast.Trigger(ast.Var("source"), ast.MathFuncs([ast.SimpleFunc(
                 ast.Var("count"), ast.Operand(ConcreteNumOp.EXP),
                 ast.Value(IntegerValue(2)))])),
         ]))
     code, err = e.evaluate(p, duration=10000)
     self.assertNotEqual(0, code)
Exemplo n.º 16
0
 def test_plot_undefined_axis(self):
     """
     Should briefly create a plot then error
     """
     print("Testing undefined variable in Axis")
     program = ast.Program(
         ast.Body([
             ast.Loader(ast.Var("source"),
                        ast.Source("https://covid-api.com/api/reports")),
             ast.Mapper(
                 ast.Var("source"), "confirmed",
                 ast.Declare(ast.Type(Types.NUMBER), ast.Var("confirmed"))),
             ast.Plotter(
                 ast.Graph(ScatterXYGraph()), ast.VarAxis(ast.Var("t")),
                 ast.FuncAxis(ast.BuiltinFunc(NumFunction.SIN,
                                              ast.Var("t"))), "sine_wave"),
         ]))
     e = Evaluator(graphics=False)
     code, err = e.evaluate(program, duration=4000)
     self.assertNotEqual(0, code)
     self.assertTrue(isinstance(err, UndefinedVariableError))
Exemplo n.º 17
0
    def test_regular(self):
        p_expected: ast.Program = ast.Program(
            ast.Body([

                # source = live remote "https://covid-api.com/api/reports"
                ast.Loader(ast.Var("source"),
                           ast.Source("https://covid-api.com/api/reports")),

                # map source "confirmed" to number confirmed
                ast.Mapper(
                    ast.Var("source"), "confirmed",
                    ast.Declare(ast.Type(Types.NUMBER), ast.Var("confirmed"))),

                # number count = 0
                ast.Assigner(
                    ast.Declare(ast.Type(Types.NUMBER), ast.Var("count")),
                    ast.Value(values.IntegerValue(0))),

                # observe(source) do count++
                ast.Trigger(ast.Var("source"),
                            ast.MathFuncs([ast.Increment(ast.Var("count"))])),

                # plot line_xy(count,confirmed) called "confirmed_cases"
                ast.Plotter(ast.Graph(graphs.LineXYGraph()),
                            ast.VarAxis(ast.Var("count")),
                            ast.VarAxis(ast.Var("confirmed")),
                            "confirmed_cases"),
            ]))

        def parse(content) -> ast.Program:
            t = Tokenizer(content)
            t.tokenize()
            return Parser(t).parseProgram()

        p: ast.Program = read_program_file(
            "tests/res/programs/regular_program.mstx", parse)

        self.assertTrue(ast_equal(p_expected, p))
Exemplo n.º 18
0
    def test_regular_program(self):
        """
        Should successfully create a plot and update with
        new values
        """
        print("Testing a full program")
        p = ast.Program(
            ast.Body([

                # source = live remote "https://covid-api.com/api/reports"
                ast.Loader(ast.Var("source"),
                           ast.Source("https://covid-api.com/api/reports")),

                # map source "confirmed" to number confirmed
                ast.Mapper(
                    ast.Var("source"), "confirmed",
                    ast.Declare(ast.Type(Types.NUMBER), ast.Var("confirmed"))),

                # number count = 0
                ast.Assigner(
                    ast.Declare(ast.Type(Types.NUMBER), ast.Var("count")),
                    ast.Value(values.IntegerValue(0))),

                # observe(source) do count++
                ast.Trigger(ast.Var("source"),
                            ast.MathFuncs([ast.Increment(ast.Var("count"))])),

                # plot line_xy(count,confirmed) called "confirmed_cases"
                ast.Plotter(ast.Graph(graphs.LineXYGraph()),
                            ast.VarAxis(ast.Var("count")),
                            ast.VarAxis(ast.Var("confirmed")),
                            "confirmed_cases"),
            ]))
        e = Evaluator(graphics=True)
        code, err = e.evaluate(p, duration=7000)
        self.assertEqual(0, code)
Exemplo n.º 19
0
 def test_trivial(self):
     self.assertTrue(
         ast_equal(ast.Program(ast.Body([])), ast.Program(ast.Body([]))))