Skip to content

Commit

Permalink
ariphmetic reinvented with tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rigidus committed Jan 13, 2018
1 parent f4221ad commit d5e28b7
Show file tree
Hide file tree
Showing 10 changed files with 1,183 additions and 1,248 deletions.
37 changes: 28 additions & 9 deletions org/lrn/lisp/lisp-0.org
Expand Up @@ -458,10 +458,20 @@ List - это функция, которая вычисляет свои арг

#+NAME: ariph_0_test
#+BEGIN_SRC lisp
;; Тесты для арифметических функций
(assert (equal 7 (myeval 7)))
(assert (equal 3 (myeval '(+ 1 2))))
(assert (equal 33 (myeval '(* (+ 1 2) (+ 3 4 4)))))
;; Тесты для сложения
(assert (equal 0 (myeval '(+))))
(assert (equal (+ 2) (myeval '(+ 2))))
(assert (equal (+ 2 3) (myeval '(+ 2 3))))
(assert (equal (+ 2 3 4) (myeval '(+ 2 3 4))))
(assert (equal (+ 2 (+ 3 4)) (myeval '(+ 2 (+ 3 4)))))
(assert (equal (+ 2 (+ 3 4) 5) (myeval '(+ 2 (+ 3 4) 5))))
;; Тесты для умножения
(assert (equal 1 (myeval '(*))))
(assert (equal (* 2) (myeval '(* 2))))
(assert (equal (* 2 3) (myeval '(* 2 3))))
(assert (equal (* 2 3 4) (myeval '(* 2 3 4))))
(assert (equal (* 2 (* 3 4)) (myeval '(* 2 (* 3 4)))))
(assert (equal (* 2 (* 3 4) 5) (myeval '(* 2 (* 3 4) 5))))
#+END_SRC

* Итоги
Expand Down Expand Up @@ -634,16 +644,25 @@ List - это функция, которая вычисляет свои арг
(assert (equal (+ 2 3 4) (evadd '(2 3 4))))
(assert (equal (+ 2 (+ 3 4)) (evadd '(2 (+ 3 4)))))
(assert (equal (+ 2 (+ 3 4) 5) (evadd '(2 (+ 3 4) 5))))

;; Тесты для EVMUL
(assert (equal 1 (evmul '())))
(assert (equal 2 (evmul '(2))))
(assert (equal 6 (evmul '(2 3))))
(assert (equal (* 2 3 4) (evmul '(2 3 4))))
(assert (equal (* 2 (* 3 4)) (evmul '(2 (* 3 4)))))
(assert (equal (* 2 (* 3 4) 5) (evmul '(2 (* 3 4) 5))))
;; Тесты для арифметических функций
(assert (equal 7 (myeval 7)))
(assert (equal 3 (myeval '(+ 1 2))))
(assert (equal 33 (myeval '(* (+ 1 2) (+ 3 4 4)))))
;; Тесты для сложения
(assert (equal 0 (myeval '(+))))
(assert (equal (+ 2) (myeval '(+ 2))))
(assert (equal (+ 2 3) (myeval '(+ 2 3))))
(assert (equal (+ 2 3 4) (myeval '(+ 2 3 4))))
(assert (equal (+ 2 (+ 3 4)) (myeval '(+ 2 (+ 3 4)))))
(assert (equal (+ 2 (+ 3 4) 5) (myeval '(+ 2 (+ 3 4) 5))))
;; Тесты для умножения
(assert (equal 1 (myeval '(*))))
(assert (equal (* 2) (myeval '(* 2))))
(assert (equal (* 2 3) (myeval '(* 2 3))))
(assert (equal (* 2 3 4) (myeval '(* 2 3 4))))
(assert (equal (* 2 (* 3 4)) (myeval '(* 2 (* 3 4)))))
(assert (equal (* 2 (* 3 4) 5) (myeval '(* 2 (* 3 4) 5))))
#+END_SRC
198 changes: 136 additions & 62 deletions org/lrn/lisp/lisp-1.org
Expand Up @@ -529,30 +529,22 @@ LIST определяем почти без изменений:
(evadd '(a)
0
'((a . 2)))))
(assert (equal (let ((a 2)
(b 3))
(assert (equal (let ((a 2) (b 3))
(+ a b))
(evadd '(a b)
0
'((a . 2) (b . 3)))))
(assert (equal (let ((a 2)
(b 3)
(c 4))
(assert (equal (let ((a 2) (b 3) (c 4))
(+ a b c))
(evadd '(a b c)
0
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2)
(b 3)
(c 4))
(assert (equal (let ((a 2) (b 3) (c 4))
(+ a (+ b c)))
(evadd '(a (+ b c))
0
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2)
(b 3)
(c 4)
(d 5))
(assert (equal (let ((a 2) (b 3) (c 4) (d 5))
(+ a (+ b c) d))
(evadd '(a (+ b c) d)
0
Expand All @@ -570,30 +562,22 @@ LIST определяем почти без изменений:
(evmul '(2)
1
'((a . 2)))))
(assert (equal (let ((a 2)
(b 3))
(assert (equal (let ((a 2) (b 3))
(* a b))
(evmul '(2 3)
1
'((a . 2) (b . 3)))))
(assert (equal (let ((a 2)
(b 3)
(c 4))
(assert (equal (let ((a 2) (b 3) (c 4))
(* a b c))
(evmul '(2 3 4)
1
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2)
(b 3)
(c 4))
(assert (equal (let ((a 2) (b 3) (c 4))
(* a (* b c)))
(evmul '(a (* b c))
1
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2)
(b 3)
(c 4)
(d 5))
(assert (equal (let ((a 2) (b 3) (c 4) (d 5))
(* a (* b c) d))
(evmul '(a (* b c) d)
1
Expand All @@ -613,13 +597,66 @@ LIST определяем почти без изменений:

#+NAME: ariph_1_test
#+BEGIN_SRC lisp
;; Тесты для арифметических функций
(assert (equal 7 (myeval 7 nil)))
(assert (equal 3 (myeval '(+ 1 2) nil)))
(assert (equal 33 (myeval '(* (+ 1 2) (+ 3 4 4)) nil)))
;; Тесты для арифметических функций в окружении
(assert (equal 2 (myeval 'a '((a . 2)))))
(assert (equal 120 (myeval '(+ a b c) '((a . 45) (b . 2) (c . 73)))))
;; Тесты для сложения
(assert (equal 0 (myeval '(+) nil)))
(assert (equal (+ 2) (myeval '(+ 2) nil)))
(assert (equal (+ 2 3) (myeval '(+ 2 3) nil)))
(assert (equal (+ 2 3 4) (myeval '(+ 2 3 4) nil)))
(assert (equal (+ 2 (+ 3 4)) (myeval '(+ 2 (+ 3 4)) nil)))
(assert (equal (+ 2 (+ 3 4) 5) (myeval '(+ 2 (+ 3 4) 5) nil)))
;; Тесты для умножения
(assert (equal 1 (myeval '(*) nil)))
(assert (equal (* 2) (myeval '(* 2) nil)))
(assert (equal (* 2 3) (myeval '(* 2 3) nil)))
(assert (equal (* 2 3 4) (myeval '(* 2 3 4) nil)))
(assert (equal (* 2 (* 3 4)) (myeval '(* 2 (* 3 4)) nil)))
(assert (equal (* 2 (* 3 4) 5) (myeval '(* 2 (* 3 4) 5) nil)))
;; Тесты для сложения в окружении
(assert (equal 0
(myeval '(+) nil)))
(assert (equal (let ((a 2))
(+ a))
(myeval '(+ a)
'((a . 2)))))
(assert (equal (let ((a 2) (b 3))
(+ a b))
(myeval '(+ a b)
'((a . 2) (b . 3)))))
(assert (equal (let ((a 2) (b 3) (c 4))
(+ a b c))
(myeval '(+ a b c)
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2) (b 3) (c 4))
(+ a (+ b c)))
(myeval '(+ a (+ b c))
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2) (b 3) (c 4) (d 5))
(+ a (+ b c) d))
(myeval '(+ a (+ b c) d)
'((a . 2) (b . 3) (c . 4) (d . 5)))))
;; Тесты для умножения в окружении
(assert (equal 1
(myeval '(*) nil)))
(assert (equal (let ((a 2))
(* a))
(myeval '(* a)
'((a . 2)))))
(assert (equal (let ((a 2) (b 3))
(* a b))
(myeval '(* a b)
'((a . 2) (b . 3)))))
(assert (equal (let ((a 2) (b 3) (c 4))
(* a b c))
(myeval '(* a b c)
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2) (b 3) (c 4))
(* a (* b c)))
(myeval '(* a (* b c))
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2) (b 3) (c 4) (d 5))
(* a (* b c) d))
(myeval '(* a (* b c) d)
'((a . 2) (b . 3) (c . 4) (d . 5)))))
#+END_SRC

* Вычисление символов
Expand Down Expand Up @@ -1149,30 +1186,22 @@ varpairs будут добавлены в окончательное окруж
(evadd '(a)
0
'((a . 2)))))
(assert (equal (let ((a 2)
(b 3))
(assert (equal (let ((a 2) (b 3))
(+ a b))
(evadd '(a b)
0
'((a . 2) (b . 3)))))
(assert (equal (let ((a 2)
(b 3)
(c 4))
(assert (equal (let ((a 2) (b 3) (c 4))
(+ a b c))
(evadd '(a b c)
0
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2)
(b 3)
(c 4))
(assert (equal (let ((a 2) (b 3) (c 4))
(+ a (+ b c)))
(evadd '(a (+ b c))
0
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2)
(b 3)
(c 4)
(d 5))
(assert (equal (let ((a 2) (b 3) (c 4) (d 5))
(+ a (+ b c) d))
(evadd '(a (+ b c) d)
0
Expand All @@ -1190,41 +1219,86 @@ varpairs будут добавлены в окончательное окруж
(evmul '(2)
1
'((a . 2)))))
(assert (equal (let ((a 2)
(b 3))
(assert (equal (let ((a 2) (b 3))
(* a b))
(evmul '(2 3)
1
'((a . 2) (b . 3)))))
(assert (equal (let ((a 2)
(b 3)
(c 4))
(assert (equal (let ((a 2) (b 3) (c 4))
(* a b c))
(evmul '(2 3 4)
1
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2)
(b 3)
(c 4))
(assert (equal (let ((a 2) (b 3) (c 4))
(* a (* b c)))
(evmul '(a (* b c))
1
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2)
(b 3)
(c 4)
(d 5))
(assert (equal (let ((a 2) (b 3) (c 4) (d 5))
(* a (* b c) d))
(evmul '(a (* b c) d)
1
'((a . 2) (b . 3) (c . 4) (d . 5)))))
;; Тесты для арифметических функций
(assert (equal 7 (myeval 7 nil)))
(assert (equal 3 (myeval '(+ 1 2) nil)))
(assert (equal 33 (myeval '(* (+ 1 2) (+ 3 4 4)) nil)))
;; Тесты для арифметических функций в окружении
(assert (equal 2 (myeval 'a '((a . 2)))))
(assert (equal 120 (myeval '(+ a b c) '((a . 45) (b . 2) (c . 73)))))
;; Тесты для сложения
(assert (equal 0 (myeval '(+) nil)))
(assert (equal (+ 2) (myeval '(+ 2) nil)))
(assert (equal (+ 2 3) (myeval '(+ 2 3) nil)))
(assert (equal (+ 2 3 4) (myeval '(+ 2 3 4) nil)))
(assert (equal (+ 2 (+ 3 4)) (myeval '(+ 2 (+ 3 4)) nil)))
(assert (equal (+ 2 (+ 3 4) 5) (myeval '(+ 2 (+ 3 4) 5) nil)))
;; Тесты для умножения
(assert (equal 1 (myeval '(*) nil)))
(assert (equal (* 2) (myeval '(* 2) nil)))
(assert (equal (* 2 3) (myeval '(* 2 3) nil)))
(assert (equal (* 2 3 4) (myeval '(* 2 3 4) nil)))
(assert (equal (* 2 (* 3 4)) (myeval '(* 2 (* 3 4)) nil)))
(assert (equal (* 2 (* 3 4) 5) (myeval '(* 2 (* 3 4) 5) nil)))
;; Тесты для сложения в окружении
(assert (equal 0
(myeval '(+) nil)))
(assert (equal (let ((a 2))
(+ a))
(myeval '(+ a)
'((a . 2)))))
(assert (equal (let ((a 2) (b 3))
(+ a b))
(myeval '(+ a b)
'((a . 2) (b . 3)))))
(assert (equal (let ((a 2) (b 3) (c 4))
(+ a b c))
(myeval '(+ a b c)
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2) (b 3) (c 4))
(+ a (+ b c)))
(myeval '(+ a (+ b c))
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2) (b 3) (c 4) (d 5))
(+ a (+ b c) d))
(myeval '(+ a (+ b c) d)
'((a . 2) (b . 3) (c . 4) (d . 5)))))
;; Тесты для умножения в окружении
(assert (equal 1
(myeval '(*) nil)))
(assert (equal (let ((a 2))
(* a))
(myeval '(* a)
'((a . 2)))))
(assert (equal (let ((a 2) (b 3))
(* a b))
(myeval '(* a b)
'((a . 2) (b . 3)))))
(assert (equal (let ((a 2) (b 3) (c 4))
(* a b c))
(myeval '(* a b c)
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2) (b 3) (c 4))
(* a (* b c)))
(myeval '(* a (* b c))
'((a . 2) (b . 3) (c . 4)))))
(assert (equal (let ((a 2) (b 3) (c 4) (d 5))
(* a (* b c) d))
(myeval '(* a (* b c) d)
'((a . 2) (b . 3) (c . 4) (d . 5)))))
;; Тест для MYPAIRLIS
(assert (equal '(( a . 1) (b . 2) ( c . 3) (z . 6) (y . 77))
(mypairlis '(a b c) '(1 2 3) '((z . 6) (y . 77)))))
Expand Down

0 comments on commit d5e28b7

Please sign in to comment.