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))
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)
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)
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)
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))
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))
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)
def parseLoader(self) -> ast.Loader: var = self.parseVar() self.tokenizer.get_and_check_next("=") source = self.parseSource() return ast.Loader(var, source)