Kill some dead tests
This commit is contained in:
parent
6f8a1bf831
commit
7a1973590f
4 changed files with 0 additions and 231 deletions
|
@ -1,20 +0,0 @@
|
|||
py_library(
|
||||
name = "conftest",
|
||||
srcs = [
|
||||
"conftest.py"
|
||||
],
|
||||
imports = [
|
||||
"."
|
||||
],
|
||||
)
|
||||
|
||||
py_pytest(
|
||||
name = "test",
|
||||
srcs = glob(["*.py"]),
|
||||
deps = [
|
||||
"//projects/flowmetal:lib",
|
||||
":conftest",
|
||||
py_requirement("pytest-cov"),
|
||||
],
|
||||
args = ["--cov-report", "term", "--cov=flowmetal"],
|
||||
)
|
|
@ -1,161 +0,0 @@
|
|||
"""
|
||||
Tests covering the Flowmetal parser.
|
||||
"""
|
||||
|
||||
from math import nan
|
||||
|
||||
import flowmetal.parser as p
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
def test_parse_list():
|
||||
"""Trivial parsing a list."""
|
||||
assert isinstance(p.parses("()"), p.ListToken)
|
||||
assert p.parses("()").paren == p.ListType.ROUND
|
||||
|
||||
|
||||
@pytest.mark.parametrize('txt, val', [
|
||||
('1', 1),
|
||||
('2', 2),
|
||||
('103', 103),
|
||||
('504', 504),
|
||||
# Sign prefixes
|
||||
('-1', -1),
|
||||
('+1', +1),
|
||||
# Underscores as whitespace
|
||||
('1_000_000', 1e6),
|
||||
('+1_000', 1000),
|
||||
('-1_000', -1000),
|
||||
# Variable base
|
||||
('2r1', 1),
|
||||
('2r10', 2),
|
||||
('2r100', 4),
|
||||
('2r101', 5),
|
||||
('+2r10', 2),
|
||||
('-2r10', -2),
|
||||
# Octal
|
||||
('00', 0),
|
||||
('01', 1),
|
||||
('010', 8),
|
||||
('+010', 8),
|
||||
('-010', -8),
|
||||
# Hex
|
||||
('0x0', 0),
|
||||
('0xF', 15),
|
||||
('0x10', 16),
|
||||
('+0x10', 16),
|
||||
('-0x10', -16),
|
||||
])
|
||||
def test_parse_num(txt, val):
|
||||
"""Some trivial cases of parsing numbers."""
|
||||
assert isinstance(p.parses(txt), p.IntegerToken)
|
||||
assert p.parses(txt).data == val
|
||||
|
||||
|
||||
@pytest.mark.parametrize('frac', [
|
||||
'1/2', '1/4', '1/512',
|
||||
])
|
||||
def test_parse_ratio(frac):
|
||||
"""Test covering the ratio notation."""
|
||||
assert isinstance(p.parses(frac), p.FractionToken)
|
||||
assert p.parses(frac).data == p.Fraction(frac)
|
||||
|
||||
|
||||
|
||||
@pytest.mark.parametrize('sym,', [
|
||||
'a',
|
||||
'b',
|
||||
'*earmuff-style*',
|
||||
'+kebab-style+',
|
||||
'JAVA_CONSTANT_STYLE',
|
||||
])
|
||||
def test_parse_sym(sym):
|
||||
"""Some trivial cases of parsing symbols."""
|
||||
assert isinstance(p.parses(sym), p.SymbolToken)
|
||||
assert p.parses(sym).data == sym
|
||||
|
||||
|
||||
@pytest.mark.parametrize('txt, tokenization', [
|
||||
('(1 2 3)',
|
||||
[(p.IntegerToken, '1'),
|
||||
(p.WhitespaceToken, ' '),
|
||||
(p.IntegerToken, '2'),
|
||||
(p.WhitespaceToken, ' '),
|
||||
(p.IntegerToken, '3')]),
|
||||
('(a 1 b 2)',
|
||||
[(p.SymbolToken, 'a'),
|
||||
(p.WhitespaceToken, ' '),
|
||||
(p.IntegerToken, '1'),
|
||||
(p.WhitespaceToken, ' '),
|
||||
(p.SymbolToken, 'b'),
|
||||
(p.WhitespaceToken, ' '),
|
||||
(p.IntegerToken, '2')])
|
||||
])
|
||||
def test_list_contents(txt, tokenization):
|
||||
"""Parse examples of list contents."""
|
||||
assert isinstance(p.parses(txt), p.ListToken)
|
||||
|
||||
lelems = p.parses(txt).data
|
||||
for (type, text), token in zip(tokenization, lelems):
|
||||
assert isinstance(token, type)
|
||||
assert token.raw == text
|
||||
|
||||
|
||||
@pytest.mark.parametrize('txt, value', [
|
||||
('1.0', 1.0),
|
||||
('-1.0', -1.0),
|
||||
('1.01', 1.01),
|
||||
('1e0', 1e0),
|
||||
('1e3', 1e3),
|
||||
('1e-3', 1e-3),
|
||||
('1.01e3', 1.01e3),
|
||||
('1_000e0', 1e3),
|
||||
])
|
||||
def test_float_values(txt, value):
|
||||
"""Some examples of floats."""
|
||||
assert isinstance(p.parses(txt), p.FloatToken)
|
||||
assert p.parses(txt).data == value
|
||||
|
||||
|
||||
@pytest.mark.parametrize('txt, tokenization', [
|
||||
('+1', p.IntegerToken),
|
||||
('+1+', p.SymbolToken),
|
||||
('+1e', p.SymbolToken),
|
||||
('+1e3', p.FloatToken),
|
||||
('+1.0', p.FloatToken),
|
||||
('+1.0e3', p.FloatToken),
|
||||
('a.b', p.SymbolToken),
|
||||
('1.b', p.SymbolToken),
|
||||
])
|
||||
def test_ambiguous_floats(txt, tokenization):
|
||||
"""Parse examples of 'difficult' floats and symbols."""
|
||||
assert isinstance(p.parses(txt), tokenization), "Token type didn't match!"
|
||||
assert p.parses(txt).raw == txt, "Parse wasn't total!"
|
||||
|
||||
|
||||
@pytest.mark.parametrize('txt,', [
|
||||
r'""',
|
||||
r'"foo"',
|
||||
r'"foo bar baz qux"',
|
||||
r'"foo\nbar\tbaz\lqux"',
|
||||
r'''"foo
|
||||
bar
|
||||
baz
|
||||
qux"''',
|
||||
r'"\000 \x00"',
|
||||
r'"\"\""',
|
||||
])
|
||||
def test_string(txt):
|
||||
"""Some examples of strings, and of escape sequences."""
|
||||
assert isinstance(p.parses(txt), p.StringToken)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('txt,', [
|
||||
':foo',
|
||||
':foo/bar',
|
||||
':foo.bar/baz?',
|
||||
])
|
||||
def test_keyword(txt):
|
||||
"""Some examples of keywords."""
|
||||
assert isinstance(p.parses(txt), p.KeywordToken)
|
|
@ -1,50 +0,0 @@
|
|||
"""
|
||||
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)
|
Loading…
Reference in a new issue