def test_misplaced_inner_parenthesis(self):
        with self.assertRaises(readerEx.MalformedListException) as cm:
            self.stream.set_stream('(()))')
            reader.read_from_stream(self.stream)

        desired_exception = cm.exception
        self.assertTrue(isinstance(desired_exception, readerEx.MalformedListException))
 def test_symbol_in_cons(self):
     self.stream.set_stream("(define-dat-s***e 15.12345)")
     result = reader.read_from_stream(self.stream)
     self.assertTrue(isinstance(result, SchemeCons))
     self.assertTrue(isinstance(result.car, SchemeSymbol))
     self.assertTrue(isinstance(result.cdr.car, SchemeFloat))
     self.assertEqual(result.car.name, "define-dat-s***e")
    def test_two_consecutive_malformed_lists(self):
        with self.assertRaises(readerEx.MalformedListException) as cm:
            self.stream.set_stream('10   123)')
            result = reader.read_from_stream(self.stream)
            printer.print_scheme_object(result, self.output_stream)

        desired_exception = cm.exception
        self.assertTrue(isinstance(desired_exception, readerEx.MalformedListException))

        with self.assertRaises(readerEx.MalformedListException) as cm2:
            self.stream.set_stream('asd   1234)')
            result = reader.read_from_stream(self.stream)
            printer.print_scheme_object(result, self.output_stream)

        desired_exception = cm2.exception
        self.assertTrue(isinstance(desired_exception, readerEx.MalformedListException))
 def test_floaty_symbol_in_nested_list(self):
     self.stream.set_stream('(123.123.123("a" test-test))')
     result = reader.read_from_stream(self.stream)
     self.assertTrue(isinstance(result.car, SchemeSymbol))
     self.assertTrue(isinstance(result.cdr.car.car, SchemeString))
     self.assertTrue(isinstance(result.cdr.car.cdr.car, SchemeSymbol))
     self.assertEqual(result.car.name, "123.123.123")
     self.assertEqual(result.cdr.car.car.content, "a")
    def test_list_with_two_items_without_opening_bracket(self):
        with self.assertRaises(readerEx.MalformedListException) as cm:
            self.stream.set_stream('10   123)')
            result = reader.read_from_stream(self.stream)
            printer.print_scheme_object(result, self.output_stream)

        desired_exception = cm.exception
        self.assertTrue(isinstance(desired_exception, readerEx.MalformedListException))
 def test_string_in_cons(self):
     self.stream.set_stream(' ( "mic check one two one two!" 123.45)')
     result = reader.read_from_stream(self.stream)
     self.assertTrue(isinstance(result, SchemeCons))
     self.assertEqual(result.car.content, "mic check one two one two!")
     self.assertTrue(isinstance(result.car, SchemeString))
     self.assertTrue(isinstance(result.cdr.car, SchemeFloat))
     self.assertEqual(result.cdr.car.value, 123.45)
 def test_list_with_two_items(self):
     self.stream.set_stream('(     10   123.4   )')
     result = reader.read_from_stream(self.stream)
     self.assertFalse(isinstance(result, SchemeNil))
     self.assertTrue(isinstance(result, SchemeCons))
     self.assertTrue(isinstance(result.cdr, SchemeCons))
     self.assertTrue(isinstance(result.car, SchemeInteger))
     self.assertTrue(isinstance(result.cdr.car, SchemeFloat))
     self.assertTrue(isinstance(result.cdr.cdr, SchemeNil))
Ejemplo n.º 8
0
def start():
    """ setting up the repl loop """
    # load std lib
    init()

    while True:

        input_string = raw_input('<scheme>: ')

        # create a stream object from string
        read_stream = utilities.StringStream(input_string)
        write_stream = utilities.StringStream()

        # retrieve parsed string as list from reader
        parsed_scheme = reader.read_from_stream(read_stream)

        # hand list over to eval
        evaluator.evaluate(parsed_scheme, write_stream)

        print write_stream.get_stream()
 def test_list_with_symbol_and_integer(self):
     self.read_stream.set_stream("(some-variable 12345)")
     result = reader.read_from_stream(self.read_stream)
     printer.print_scheme_object(result, self.write_stream)
     self.assertEqual(self.write_stream.get_stream(), "(some-variable 12345)", "instead: " + self.write_stream.get_stream())
 def test_float(self):
     self.read_stream.set_stream("0.34")
     result = reader.read_from_stream(self.read_stream)
     printer.print_scheme_object(result, self.write_stream)
     self.assertEqual(self.write_stream.get_stream(), "0.34", "instead: " + self.write_stream.get_stream())
 def test_symbol_with_leading_digits(self):
     self.stream.set_stream("123asdfg")
     result = reader.read_from_stream(self.stream)
     self.assertTrue(isinstance(result, SchemeSymbol))
     self.assertEqual(result.name, "123asdfg")
 def test_unevaled_nested_list_quote(self):
     self.input_stream.set_stream("'(a b (898 123.67 \"abcde\") c d e)")
     parsed = reader.read_from_stream(self.input_stream)
     printer.print_scheme_object(parsed, self.output_stream)
     self.assertEqual(self.output_stream.get_stream(), "(quote (a b (898 123.67 \"abcde\") c d e))")
 def test_list_with_single_item(self):
     self.stream.set_stream('(     10   )')
     result = reader.read_from_stream(self.stream)
     self.assertFalse(isinstance(result, SchemeNil))
     self.assertTrue(isinstance(result, SchemeCons))
     self.assertTrue(isinstance(result.car, SchemeInteger))
 def test_float_parsing_2(self):
     self.stream.set_stream("1234.")
     self.obj = reader.read_from_stream(self.stream)
     self.assertTrue(isinstance(self.obj, SchemeFloat))
 def test_nested_quote(self):
     self.stream.set_stream("(x (a '(a b c d e f g)))")
     result = reader.read_from_stream(self.stream)
     printer.print_scheme_object(result, self.output_stream)
     self.assertEqual(self.output_stream.get_stream(), "(x (a (quote (a b c d e f g))))")
 def test_float_value_double_point_error(self):
     self.stream.set_stream("123.123.123")
     result = reader.read_from_stream(self.stream)
     self.assertTrue(isinstance(result, SchemeSymbol))
     self.assertEqual(result.name, "123.123.123")
 def test_list_with_two_items_without_closing_bracket(self):
     with self.assertRaises(readerEx.MalformedListException) as cm:
         self.stream.set_stream('(     10   123')
         result = reader.read_from_stream(self.stream)
     desired_exception = cm.exception
     self.assertTrue(isinstance(desired_exception, readerEx.MalformedListException))
 def test_negative_float_number(self):
     self.stream.set_stream("-1.0")
     result = reader.read_from_stream(self.stream)
     self.assertTrue(isinstance(result, SchemeFloat))
     self.assertEqual(result.value, -1.0)
 def test_string_with_spaces(self):
     self.stream.set_stream('    "mic check one two one two!"')
     result = reader.read_from_stream(self.stream)
     self.assertTrue(isinstance(result, SchemeString))
     self.assertEqual(result.content, "mic check one two one two!")
 def test_single_string(self):
     self.stream.set_stream('"ouuuladidadida"')
     result = reader.read_from_stream(self.stream)
     self.assertTrue(isinstance(result, SchemeString))
     self.assertEqual(result.content, "ouuuladidadida")
 def test_addition_with_naturals(self):
     self.input_stream.set_stream("(+ 2 3)")
     parsed = reader.read_from_stream(self.input_stream)
     evaluator.evaluate(parsed, self.output_stream)
     self.assertEqual(self.output_stream.get_stream(), "5")
 def test_integer_leading_zeros(self):
     self.stream.set_stream("0000000132")
     self.obj = reader.read_from_stream(self.stream)
     self.assertEqual(self.obj.value, 132)
 def test_nested_list_plus_trailing(self):
     self.read_stream.set_stream("(a b c d (some-variable 12345) 10 15)")
     result = reader.read_from_stream(self.read_stream)
     printer.print_scheme_object(result, self.write_stream)
     self.assertEqual(self.write_stream.get_stream(), "(a b c d (some-variable 12345) 10 15)", "instead: " + self.write_stream.get_stream())
 def test_single_symbol_plus(self):
     self.stream.set_stream("+")
     result = reader.read_from_stream(self.stream)
     self.assertTrue(isinstance(result, SchemeSymbol))
 def test_malformed_quoted_list(self):
     with self.assertRaises(readerEx.MalformedListException) as cm:
         self.stream.set_stream('10   123)')
         reader.read_from_stream(self.stream)
 def test_single_symbol_with_spaces(self):
     self.stream.set_stream("      my_function+### ")
     result = reader.read_from_stream(self.stream)
     self.assertTrue(isinstance(result, SchemeSymbol))
     self.assertEqual(result.name, "my_function+###")
 def test_empty_list_with_spaces(self):
     self.stream.set_stream('(         )')
     result = reader.read_from_stream(self.stream)
     self.assertTrue(isinstance(result, SchemeNil))
 def test_float_value(self):
     self.stream.set_stream("1234.567")
     self.obj = reader.read_from_stream(self.stream)
     self.assertEqual(self.obj.value, 1234.567)
 def test_integer_symbol_separation(self):
     self.stream.set_stream("123abcde")
     self.obj = reader.read_from_stream(self.stream)
     self.assertTrue(isinstance(self.obj, SchemeSymbol))
     self.assertEqual(self.obj.name, "123abcde")
 def test_unevaled_integer_quote(self):
     self.input_stream.set_stream("'10")
     parsed = reader.read_from_stream(self.input_stream)
     printer.print_scheme_object(parsed, self.output_stream)
     self.assertEqual(self.output_stream.get_stream(), "(quote 10)")