import pytest

from eche.reader import read_str
from eche.printer import print_str

import math


@pytest.mark.parametrize("test_input", [
    '1',
    '-1',
    '0',
    str(math.pi),
    str(math.e)
])
def test_numbers(test_input):
    assert print_str(read_str(test_input)) == test_input


@pytest.mark.parametrize("test_input", [
    '*',
    '+',
    'abc',
    'test1',
    'abc-def',
])
def test_eche_type_symbol(test_input):
    assert print_str(read_str(test_input)) == test_input


@pytest.mark.parametrize("test_input", [
    '((9 8))',
    '()',
    '(* 1 2)',
    '(+ (* 1 5) (/ 1 0))'
])
def test_eche_type_list(test_input):
    assert print_str(read_str(test_input)) == test_input


@pytest.mark.parametrize("test_input", [
    'nil',
])
def test_nil(test_input):
    assert print_str(read_str(test_input)) == test_input


@pytest.mark.parametrize("test_input", [
    'true',
    'false',
])
def test_bool(test_input):
    assert print_str(read_str(test_input)) == test_input



@@ -637,32 +637,19 @@
 ):%0A    a
-ssert print_str(
+ = 
 read_str
@@ -652,32 +652,55 @@
 _str(test_input)
+%0A    assert print_str(a
 ) == test_input%0A
@@ -976,28 +976,731 @@
 est_input)) == test_input%0A%0A%0A
+@pytest.mark.parametrize(%22test_input%22, %5B%0A    '(1 2, 3,,,,,),,,'%0A%5D)%0Adef test_whitespace(test_input):%0A    a = read_str(test_input)%0A    b = print_str(a)%0A    assert str(a) == b%0A%0A%0A@pytest.mark.parametrize(%22test_input%22, %5B%0A    ':kw',%0A    '%5B:kw1 :kw2 :kw3%5D',%0A%5D)%0Adef test_keywords(test_input):%0A    assert print_str(read_str(test_input)) == test_input%0A%0A%0A@pytest.mark.parametrize(%22test_input%22, %5B%0A    '%5B0 1 2 3%5D',%0A%5D)%0Adef test_vector(test_input):%0A    actual = print_str(read_str(test_input))%0A    excepted = test_input%0A    assert actual == excepted%0A%0A%0A@pytest.mark.parametrize(%22test_input%22, %5B%0A    '%7B%22abc%22 1%7D',%0A%5D)%0Adef test_dicts(test_input):%0A    a = read_str(test_input)%0A    b = test_input%0A    assert print_str(a) == b%0A

Add tests for whitespace, keywords and dicts.