def test_list_vector_conversion(): check_equal( "(vector->list #(1 2 3 4))", "(list 1 2 3 4)", "(vector->list #())", "'()", "(vector->list #(1.1 a))", "(list 1.1 'a)", "#(1 2 3 4)", "(list->vector (list 1 2 3 4))", "#()", "(list->vector '())", "#(1.1 a)", "(list->vector (list 1.1 'a))", )
def test_substring(doctest): """ > (substring "Apple" 1 3) "pp" > (substring "Apple" 1) "pple" """ assert doctest check_equal( '(substring "applebee" 5)', '"bee"', '(substring "applebee" 0 8)', '"applebee"', )
def pytest_funcarg__doctest(request): from textwrap import dedent from pycket.test.testhelper import check_equal, execute from pycket.error import SchemeException assert request.function.__doc__ is not None code = dedent(request.function.__doc__) lines = [lin for lin in code.splitlines() if lin] setup = [] exprs = [] expect = [] errors = [] current_let = [] setup_done = False for line in lines: if line[0] == ";": # skip comments continue if not line.strip(): continue elif line[0] == "!": if setup_done: raise RuntimeError( "Don't use ! in midst of other doctest cmds") setup.append(line[2:]) elif line[0] == ">": setup_done = True current_let.append(line[2:]) elif line[0] == "E": errors.append(line[1:]) elif line[0] in " \t": current_let[-1] += "\n" + line[2:] else: exprs.append(current_let[0] if len(current_let) == 1 else current_let) current_let = [] expect.append(line) pairs = [] for pair in zip(exprs, expect): pairs.extend(pair) check_equal(*pairs, extra="\n".join(setup)) for error in errors: with pytest.raises(Exception): execute(error, extra="\n".join(setup)) return True
def pytest_funcarg__doctest(request): from textwrap import dedent from pycket.test.testhelper import check_equal, execute from pycket.error import SchemeException assert request.function.__doc__ is not None code = dedent(request.function.__doc__) lines = [lin for lin in code.splitlines() if lin] setup = [] exprs = [] expect = [] errors = [] current_let = [] setup_done = False for line in lines: if line[0] == ";": # skip comments continue if not line.strip(): continue elif line[0] == "!": if setup_done: raise RuntimeError("Don't use ! in midst of other doctest cmds") setup.append(line[2:]) elif line[0] == ">": setup_done = True current_let.append(line[2:]) elif line[0] == "E": errors.append(line[1:]) elif line[0] in " \t": current_let[-1] += "\n" + line[2:] else: exprs.append(current_let[0] if len(current_let) == 1 else current_let) current_let = [] expect.append(line) pairs = [] for pair in zip(exprs,expect): pairs.extend(pair) check_equal(*pairs, extra="\n".join(setup)) for error in errors: with pytest.raises(SchemeException): execute(error, extra="\n".join(setup)) return True
def test_eqv(): check_equal( "(eqv? 'yes 'yes)", "#t", "(eqv? 'yes 'no)", "#f", "(eqv? (expt 2 100) (expt 2 100))", "#t", "(eqv? 2 2.0)", "#f", "(eqv? (integer->char 955) (integer->char 955))", "#t", #run_top("(eqv? (make-string 3 #\z) (make-string 3 #\z))", "#f", stdlib=True) "(eqv? +nan.0 +nan.0)", "#t", "(eqv? 'a 'a)", "#t", "(eqv? 'a 'b)", "#f", "(eqv? 2 2)", "#t", "(eqv? '() '())", "#t", "(eqv? 100000000 100000000)", "#t", "(eqv? (cons 1 2) (cons 1 2))", "#f", """(eqv? (lambda () 1) (lambda () 2))""", "#f", "(eqv? #f 'nil)", "#f", """(let ((p (lambda (x) x))) (eqv? p p))""", "#t", # run('(eqv? "" "")', "#t") #racket "(eqv? '#() '#())", "#f", #racket """(eqv? (lambda (x) x) (lambda (x) x))""", "#f", #racket """(eqv? (lambda (x) x) (lambda (y) y))""", "#f", #racket ) run_top("""(define gen-counter (lambda () (let ((n 0)) (lambda () (set! n (+ n 1)) n)))) (let ((g (gen-counter))) (eqv? g g))""", w_true) run_top("""(define gen-counter (lambda () (let ((n 0)) (lambda () (set! n (+ n 1)) n)))) (eqv? (gen-counter) (gen-counter))""", w_false) run_top("""(define gen-loser (lambda () (let ((n 0)) (lambda () (set! n (+ n 1)) 27)))) (let ((g (gen-loser))) (eqv? g g))""", w_true) run_top("""(define gen-loser (lambda () (let ((n 0)) (lambda () (set! n (+ n 1)) 27)))) (eqv? (gen-loser) (gen-loser))""", w_false) #racket run("""(letrec ((f (lambda () (if (eqv? f g) 'both 'f))) (g (lambda () (if (eqv? f g) 'both 'g)))) (eqv? f g))""", w_false) #racket run("""(letrec ((f (lambda () (if (eqv? f g) 'f 'both))) (g (lambda () (if (eqv? f g) 'g 'both)))) (eqv? f g))""", w_false) run("(eqv? '(a) '(a))", w_false) #racket # run('(eqv? "a" "a")', w_true) #racket run("(eqv? '(b) (cdr '(a b)))", w_false) #racket run("""(let ((x '(a))) (eqv? x x))""", w_true)
def test_eqv(): check_equal( "(eqv? 'yes 'yes)", "#t", "(eqv? 'yes 'no)", "#f", "(eqv? (expt 2 100) (expt 2 100))", "#t", "(eqv? 2 2.0)", "#f", "(eqv? (integer->char 955) (integer->char 955))", "#t", #run_top("(eqv? (make-string 3 #\z) (make-string 3 #\z))", "#f", stdlib=True) "(eqv? +nan.0 +nan.0)", "#t", "(eqv? 'a 'a)", "#t", "(eqv? 'a 'b)", "#f", "(eqv? 2 2)", "#t", "(eqv? '() '())", "#t", "(eqv? 100000000 100000000)", "#t", "(eqv? 1.0+2i 1.0+2i)", "#t", "(eqv? (cons 1 2) (cons 1 2))", "#f", """(eqv? (lambda () 1) (lambda () 2))""", "#f", "(eqv? #f 'nil)", "#f", """(let ((p (lambda (x) x))) (eqv? p p))""", "#t", # run('(eqv? "" "")', "#t") #racket "(eqv? '#() '#())", "#f", #racket """(eqv? (lambda (x) x) (lambda (x) x))""", "#f", #racket """(eqv? (lambda (x) x) (lambda (y) y))""", "#f", #racket ) run_top( """(define gen-counter (lambda () (let ((n 0)) (lambda () (set! n (+ n 1)) n)))) (let ((g (gen-counter))) (eqv? g g))""", w_true) run_top( """(define gen-counter (lambda () (let ((n 0)) (lambda () (set! n (+ n 1)) n)))) (eqv? (gen-counter) (gen-counter))""", w_false) run_top( """(define gen-loser (lambda () (let ((n 0)) (lambda () (set! n (+ n 1)) 27)))) (let ((g (gen-loser))) (eqv? g g))""", w_true) run_top("""(define gen-loser (lambda () (let ((n 0)) (lambda () (set! n (+ n 1)) 27)))) (eqv? (gen-loser) (gen-loser))""", w_false) #racket run("""(letrec ((f (lambda () (if (eqv? f g) 'both 'f))) (g (lambda () (if (eqv? f g) 'both 'g)))) (eqv? f g))""", w_false) #racket run( """(letrec ((f (lambda () (if (eqv? f g) 'f 'both))) (g (lambda () (if (eqv? f g) 'g 'both)))) (eqv? f g))""", w_false) run("(eqv? '(a) '(a))", w_false) #racket # run('(eqv? "a" "a")', w_true) #racket run("(eqv? '(b) (cdr '(a b)))", w_false) #racket run("""(let ((x '(a))) (eqv? x x))""", w_true)
def test_version(): check_equal('(version)', '"%s"' % EXPECTED_VERSION)