""" Tests covering the Flowmetal analyzer. """ import flowmetal.parser as p import flowmetal.syntax_analyzer as a import pytest @pytest.mark.parametrize('txt, exprtype', [ # Booleans ('true', a.ConstExpr), ('false', a.BooleanExpr), # Integers ('1', a.ConstExpr), ('1', a.IntegerExpr), # Fractions ('1/2', a.ConstExpr), ('1/2', a.FractionExpr), # Floats ('1.0', a.ConstExpr), ('1.0', a.FloatExpr), # Keywords (':foo', a.ConstExpr), (':foo', a.KeywordExpr), # Strings ('"foo"', a.ConstExpr), ('"foo"', a.StringExpr), ]) def test_analyze_constants(txt, exprtype): """Make sure the analyzer can chew on constants.""" assert isinstance(a.analyzes(txt), exprtype) @pytest.mark.parametrize('txt', [ '()', '(list)', '(list 1)', '(do 1)', '(do foo bar 1)', '(let [a 1, b 2] 1)', '(fn [] 1)', '(fn [] ⊢ integer? x)', '(fn [] x |- integer?)', '(fn [] x :- integer?)', ]) def test_analyze(txt): """Make sure that do exprs work.""" assert a.analyzes(txt)