updated lis.py examples
This commit is contained in:
64
02-array-seq/lispy/py3.10/meta_test.py
Normal file
64
02-array-seq/lispy/py3.10/meta_test.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import operator as op
|
||||
|
||||
from lis import run
|
||||
|
||||
env_scm = """
|
||||
(define standard-env (list
|
||||
(list (quote +) +)
|
||||
(list (quote -) -)
|
||||
))
|
||||
standard-env
|
||||
"""
|
||||
|
||||
def test_env_build():
|
||||
got = run(env_scm)
|
||||
assert got == [['+', op.add], ['-', op.sub]]
|
||||
|
||||
scan_scm = """
|
||||
(define l (quote (a b c)))
|
||||
(define (scan what where)
|
||||
(if (null? where)
|
||||
()
|
||||
(if (eq? what (car where))
|
||||
what
|
||||
(scan what (cdr where))))
|
||||
)
|
||||
"""
|
||||
|
||||
def test_scan():
|
||||
source = scan_scm + '(scan (quote a) l )'
|
||||
got = run(source)
|
||||
assert got == 'a'
|
||||
|
||||
|
||||
def test_scan_not_found():
|
||||
source = scan_scm + '(scan (quote z) l )'
|
||||
got = run(source)
|
||||
assert got == []
|
||||
|
||||
|
||||
lookup_scm = """
|
||||
(define env (list
|
||||
(list (quote +) +)
|
||||
(list (quote -) -)
|
||||
))
|
||||
(define (lookup what where)
|
||||
(if (null? where)
|
||||
()
|
||||
(if (eq? what (car (car where)))
|
||||
(car (cdr (car where)))
|
||||
(lookup what (cdr where))))
|
||||
)
|
||||
"""
|
||||
|
||||
def test_lookup():
|
||||
source = lookup_scm + '(lookup (quote +) env)'
|
||||
got = run(source)
|
||||
assert got == op.add
|
||||
|
||||
|
||||
def test_lookup_not_found():
|
||||
source = lookup_scm + '(lookup (quote z) env )'
|
||||
got = run(source)
|
||||
assert got == []
|
||||
|
||||
Reference in New Issue
Block a user