Exemplo n.º 1
0
 def test_loopingConstructs(self):
     self.assertEqual(runRexp("(map odd? (list 1 2 3 4 5))"), [True, False, True, False, True])
     self.assertEqual(runRexp("(filter odd? (list 1 2 3 4 5))"), [1, 3, 5])
     self.assertEqual(runRexp("(foldr + 0 (list 1 2 3 4))"), 1 + 2 + 3 + 4)
     self.assertEqual(runRexp("(foldl + 0 (list 1 2 3 4))"), 1 + 2 + 3 + 4)
     self.assertEqual(runRexp("(foldr / 1 (list 4 2))"), 4 / 2)
     self.assertEqual(runRexp("(foldl / 1 (list 4 2))"), 1 / 2 / 4)
     self.assertEqual(runRexp("(ormap odd? (list 0 2 4))"), False)
     self.assertEqual(runRexp("(ormap odd? (list 0 1 2 4))"), True)
     self.assertEqual(runRexp("(andmap even? (list 0 2 4))"), True)
     self.assertEqual(runRexp("(andmap even? (list 0 1 2 4))"), False)
Exemplo n.º 2
0
 def test_logic(self):
     self.assertEqual(runRexp("#true"), True)
     self.assertEqual(runRexp("#false"), False)
     self.assertEqual(runRexp("(not #true)"), False)
     self.assertEqual(runRexp("(not #false)"), True)
     self.assertEqual(runRexp("(and #true #true #true)"), True)
     self.assertEqual(runRexp("(or #true #true #true)"), True)
     self.assertEqual(runRexp("(and #true #false #true)"), False)
     self.assertEqual(runRexp("(or #true #false #true)"), True)
     self.assertEqual(runRexp("(or #false #false #false)"), False)
Exemplo n.º 3
0
 def test_local(self):
     self.assertEqual(runRexp("(local ((define a 5)(define b 1)) (+ a b))"), 6)
     self.assertEqual(runRexp("(define abs (lambda (x) x))"), None) # To show that shadowing works in local
     self.assertEqual(runRexp("(local ((define abs (lambda (x) (if (< x 0) (- 0 x) x)))) (abs -2))"), 2)
     self.assertEqual(runRexp("(define abs (lambda (x) (local [(define flipped (- 0 x))] (if (< x 0) flipped x))))"),
                      None)
     self.assertEqual(runRexp("(abs 2)"), 2)
     self.assertEqual(runRexp("(abs -2)"), 2)
     self.assertEqual(runRexp("(define abs (lambda (x) (if (< x 0) (local [(define flipped (- 0 x))] flipped) x)))"),
                      None)
     self.assertEqual(runRexp("(abs 2)"), 2)
     self.assertEqual(runRexp("(abs -2)"), 2)
Exemplo n.º 4
0
 def test_checkExpect(self):
     try:
         runRexp("(check-expect #true #false)")
     except AssertionError as e:
         self.assertEqual(e.args[0], "check-expect failed. True doesn't equal False")
     try:
         runRexp("(check-expect 1 2)")
     except AssertionError as e:
         self.assertEqual(e.args[0], "check-expect failed. 1 doesn't equal 2")
     try:
         runRexp("(check-expect (list 1 2 3) (list 1 2 3 4))")
     except AssertionError as e:
         self.assertEqual(e.args[0], "check-expect failed. [1, 2, 3] doesn't equal [1, 2, 3, 4]")
     self.assertEqual(runRexp("(check-expect #true #true)"), None)
     try:
         runRexp("(error \"testTitle\" \"msg1\" \"msg2\" \"msg3\")")
     except Exception as e:
         self.assertEqual(e.args[0], "testTitle msg1 msg2 msg3")
Exemplo n.º 5
0
 def test_display(self):
     import sys
     from io import StringIO
     out = StringIO()
     sys.stdout = out
     runRexp("(display 1)")
     self.assertEqual(out.getvalue().strip(), "1")
     out = StringIO()
     sys.stdout = out
     runRexp("(display \"Hello\")")
     self.assertEqual(out.getvalue().strip(), "Hello")
     out = StringIO()
     sys.stdout = out
     runRexp("(display (list 1 2 3 4 5))")
     self.assertEqual(out.getvalue().strip(), "[1, 2, 3, 4, 5]")
Exemplo n.º 6
0
 def test_quote(self):
     self.assertEqual(runRexp("(quote 1 2 3)"), [1,2,3])
     self.assertEqual(runRexp("(quote 1 2 3 a)"), [1, 2, 3, "a"])
     self.assertEqual(runRexp("(quote (quote 1 2 3))"), [["quote", 1, 2, 3]])
Exemplo n.º 7
0
 def test_begin(self):
     self.assertEqual(runRexp("(begin (+ 1 1))"), 2)
     self.assertEqual(runRexp("(begin (* 2 2) (+ 1 1))"), 2)
     self.assertEqual(runRexp("(begin (* 3 3) (/ 2 2) (+ 1 1))"), 2)
Exemplo n.º 8
0
 def test_struct(self):
     self.assertEqual(runRexp("(define-struct boat (capacity passengers))"), None)
     self.assertEqual(runRexp("(define boat (make-boat 100 90))"), None)
     self.assertEqual(runRexp("(boat-capacity boat)"), 100)
     self.assertEqual(runRexp("(boat-passengers boat)"), 90)
     self.assertEqual(runRexp("(boat? boat)"), True)
     self.assertEqual(runRexp("(define-struct train (capacity passengers))"), None)
     self.assertEqual(runRexp("(define train (make-train 100 90))"), None)
     self.assertEqual(runRexp("(train-capacity train)"), 100)
     self.assertEqual(runRexp("(train-passengers train)"), 90)
     self.assertEqual(runRexp("(boat? train)"), False)
     self.assertEqual(runRexp("(train? train)"), True)
     self.assertEqual(runRexp("(train? boat)"), False)
Exemplo n.º 9
0
 def test_list_functions(self):
     self.assertEqual(runRexp("(list 1 2 3 4)"), [1, 2, 3, 4])
     self.assertEqual(runRexp("(cons 0 (list 1 2 3 4))"), [0, 1, 2, 3, 4])
     self.assertEqual(runRexp("(empty? empty)"), True)
     self.assertEqual(runRexp("(empty? (cons 0 empty))"), False)
     self.assertEqual(runRexp("(rest (list 1 2 3 4))"), [2, 3, 4])
     self.assertEqual(runRexp("(first (list 1 2 3 4))"), 1)
     self.assertEqual(runRexp("(second (list 1 2 3 4))"), 2)
     self.assertEqual(runRexp("(third (list 1 2 3 4))"), 3)
     self.assertEqual(runRexp("(reverse (list 1 2 3))"), [3, 2, 1])
     self.assertEqual(runRexp("(explode \"abcde\")"), ["a", "b", "c", "d", "e"])
     self.assertEqual(runRexp("(list-ref (list \"a\" \"b\" \"c\") 1)"), "b")
     self.assertEqual(runRexp("(build-list 5 (lambda (x) x))"), [0, 1, 2, 3, 4])
     self.assertEqual(runRexp("(build-list 5 (lambda (x) (* 2 x)))"), [0, 2, 4, 6, 8])
Exemplo n.º 10
0
 def test_define(self):
     self.assertEqual(runRexp("(define abs (lambda (x) (if (< x 0) (- 0 x) x)))"), None)
     self.assertEqual(runRexp("(list (abs (- 7 5)) (abs (- 5 7)))"), [2, 2])
Exemplo n.º 11
0
 def test_control(self):
     self.assertEqual(runRexp("(cond ((> 5 0) 5) (else 6))"), 5)
     self.assertEqual(runRexp("(cond ((< 5 0) 5) (else 6))"), 6)
     self.assertEqual(runRexp("(if (> 5 0) 5 6)"), 5)
     self.assertEqual(runRexp("(if (< 5 0) 5 6)"), 6)
Exemplo n.º 12
0
 def test_stringManipulation(self):
     self.assertEqual(runRexp("Hello World!"), "Hello World!")
     self.assertEqual(runRexp("(integer->char 65)"), "A")
     self.assertEqual(runRexp("(list->string (list \"a\" \"b\" \"c\"))"), "abc")
Exemplo n.º 13
0
 def test_lambda(self):
     self.assertEqual(runRexp("""((lambda (abs) (list (abs (- 5 7))
                                                      (abs (- 7 5))))
                                  (lambda (x) (if ( < x 0) (- 0 x) x)))"""), [2, 2])
Exemplo n.º 14
0
 def test_basics(self):
     self.assertEqual(runRexp("(+ 1 1)"), 2)
     self.assertEqual(runRexp("(* 1 3)"), 3)
     self.assertEqual(runRexp("(- 3 2)"), 1)
     self.assertEqual(runRexp("(/ 9 3)"), 3)
     self.assertEqual(runRexp("(add1 5)"), 6)
     self.assertEqual(runRexp("(sub1 5)"), 4)
     self.assertEqual(runRexp("(modulo 11 2)"), 1)
     self.assertEqual(runRexp("(equal? 1 2)"), False)
     self.assertEqual(runRexp("(equal? 1 1)"), True)
     self.assertEqual(runRexp("(equal? (list 1 2) (list 1 2 3))"), False)
     self.assertEqual(runRexp("(equal? (list 1 2) (list 1 2))"), True)
     self.assertEqual(runRexp("(>= 3 2)"), True)
     self.assertEqual(runRexp("(>= 3 3)"), True)
     self.assertEqual(runRexp("(>= 3 4)"), False)
     self.assertEqual(runRexp("(> 3 2)"), True)
     self.assertEqual(runRexp("(< 3 3)"), False)
     self.assertEqual(runRexp("(<= 3 3)"), True)