nendo 0.6.6 → 0.6.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +6 -14
- data/Rakefile +2 -3
- data/VERSION.yml +1 -1
- data/lib/nendo/init.nnd +7 -3
- data/lib/nendo/init.nndc +62 -28
- data/lib/nendo/nendo/experimental.nndc +6 -6
- data/lib/nendo/ruby/builtin_functions.rb +13 -3
- data/lib/nendo/ruby/core.rb +1 -1
- data/lib/nendo/ruby/evaluator.rb +64 -24
- data/lib/nendo/ruby/out_of_module.rb +2 -5
- data/lib/nendo/ruby/reader.rb +1 -2
- data/lib/nendo/ruby/types.rb +24 -0
- data/lib/nendo/srfi-2.nndc +1 -1
- data/lib/nendo/srfi-26.nndc +3 -3
- data/lib/nendo/text/html-lite.nndc +1 -1
- data/lib/nendo/util/combinations.nndc +4 -4
- data/lib/nendo/util/list.nndc +1 -1
- data/lib/nendo/util/match.nndc +33 -33
- data/test/nendo_spec.rb +1 -2158
- data/test/nendo_spec_2.rb +2128 -0
- data/test/nendo_spec_3.rb +105 -0
- metadata +10 -92
data/test/nendo_spec.rb
CHANGED
@@ -306,7 +306,7 @@ describe Nendo, "when reference global-variables." do
|
|
306
306
|
it "should" do
|
307
307
|
@nendo.evalStr( " (pair? *load-path*) " ).should == "#t"
|
308
308
|
@nendo.evalStr( " (string? (car *load-path*)) " ).should == "#t"
|
309
|
-
|
309
|
+
# @nendo.evalStr( " (to-arr *load-path*) " ).should include( "./spec")
|
310
310
|
@nendo.evalStr( " (to-arr *load-path*) " ).should include( "./lib")
|
311
311
|
@nendo.evalStr( " (string? (*FILE*)) " ).should == "#t"
|
312
312
|
@nendo.evalStr( " (number? (*LINE*)) " ).should == "#t"
|
@@ -536,2160 +536,3 @@ describe Nendo, "when call evalStr() with `modulo' function" do
|
|
536
536
|
end
|
537
537
|
end
|
538
538
|
|
539
|
-
describe Nendo, "when use quote and syntax-quote " do
|
540
|
-
before do
|
541
|
-
@nendo = Nendo::Core.new()
|
542
|
-
end
|
543
|
-
it "should" do
|
544
|
-
@nendo.evalStr( " '() " ).should == "()"
|
545
|
-
@nendo.evalStr( " '1 " ).should == "1"
|
546
|
-
@nendo.evalStr( " '\"str\" " ).should == '"str"'
|
547
|
-
@nendo.evalStr( " '(1 . 2) " ).should == "(1 . 2)"
|
548
|
-
@nendo.evalStr( " (quote ())" ).should == "()"
|
549
|
-
@nendo.evalStr( " (quote 1)" ).should == "1"
|
550
|
-
@nendo.evalStr( " (quote \"str\") " ).should == '"str"'
|
551
|
-
@nendo.evalStr( " (quote (1 . 2)) " ).should == "(1 . 2)"
|
552
|
-
@nendo.evalStr( " (syntax-quote ())" ).should == "()"
|
553
|
-
@nendo.evalStr( " (syntax-quote 1)" ).should == "1"
|
554
|
-
@nendo.evalStr( ' (syntax-quote "str") ' ).should == '"str"'
|
555
|
-
@nendo.evalStr( " (syntax-quote (1 . 2)) " ).should == "(1 . 2)"
|
556
|
-
@nendo.evalStr( " (quote quote) " ).should == "quote"
|
557
|
-
@nendo.evalStr( " 'quote " ).should == "quote"
|
558
|
-
@nendo.evalStr( " ''1 " ).should == "(quote 1)"
|
559
|
-
@nendo.evalStr( " (quote syntax-quote) " ).should == "quote"
|
560
|
-
@nendo.evalStr( " (syntax-quote '1) " ).should == "(quote 1)"
|
561
|
-
@nendo.evalStr( " (syntax-quote (quote 1)) " ).should == "(quote 1)"
|
562
|
-
@nendo.evalStr( " (quote (syntax-quote 1)) " ).should == "(quote 1)"
|
563
|
-
end
|
564
|
-
end
|
565
|
-
|
566
|
-
describe Nendo, "when read various list expressions" do
|
567
|
-
before do
|
568
|
-
@nendo = Nendo::Core.new()
|
569
|
-
end
|
570
|
-
it "should" do
|
571
|
-
@nendo.evalStr( " '() " ).should == "()"
|
572
|
-
@nendo.evalStr( " '[] " ).should == "()"
|
573
|
-
@nendo.evalStr( " '(1 . 1) " ).should == "(1 . 1)"
|
574
|
-
@nendo.evalStr( " '[1 . 1) " ).should == "(1 . 1)"
|
575
|
-
@nendo.evalStr( " '(1 . 1] " ).should == "(1 . 1)"
|
576
|
-
@nendo.evalStr( " '(1 1 . 1) " ).should == "(1 1 . 1)"
|
577
|
-
@nendo.evalStr( " '(1 2 . 3) " ).should == "(1 2 . 3)"
|
578
|
-
@nendo.evalStr( " '(1 2 3) " ).should == "(1 2 3)"
|
579
|
-
@nendo.evalStr( " '(1.1 2.2 3.3) " ).should == "(1.1 2.2 3.3)"
|
580
|
-
@nendo.evalStr( " '(a bb ccc dddd) " ).should == "(a bb ccc dddd)"
|
581
|
-
@nendo.evalStr( " '(a (b) ((c)) (((d)))) " ).should == "(a (b) ((c)) (((d))))"
|
582
|
-
@nendo.evalStr( " '[a (b) ((c)) (((d)))] " ).should == "(a (b) ((c)) (((d))))"
|
583
|
-
@nendo.evalStr( " '(a [b] ([c]) (([d]))) " ).should == "(a (b) ((c)) (((d))))"
|
584
|
-
@nendo.evalStr( " '[a [b] [[c]] [[[d]]]] " ).should == "(a (b) ((c)) (((d))))"
|
585
|
-
@nendo.evalStr( " '('a)" ).should == "((quote a))"
|
586
|
-
@nendo.evalStr( " '(''a)" ).should == "((quote (quote a)))"
|
587
|
-
@nendo.evalStr( " '('a 'b 'c)" ).should == "((quote a) (quote b) (quote c))"
|
588
|
-
@nendo.evalStr( ' \'("str") ' ).should == '("str")'
|
589
|
-
@nendo.evalStr( ' \'("str" . 1) ' ).should == '("str" . 1)'
|
590
|
-
@nendo.evalStr( ' \'(1 . "str") ' ).should == '(1 . "str")'
|
591
|
-
@nendo.evalStr( ' \'(1 2 . "str") ' ).should == '(1 2 . "str")'
|
592
|
-
@nendo.evalStr( " '((a)(b)(c)) " ).should == "((a) (b) (c))"
|
593
|
-
@nendo.evalStr( " 'a " ).should == "a"
|
594
|
-
@nendo.evalStr( " 'symbol " ).should == "symbol"
|
595
|
-
@nendo.evalStr( " 'SYMBOL " ).should == "SYMBOL"
|
596
|
-
@nendo.evalStr( " 'SyMbOl " ).should == "SyMbOl"
|
597
|
-
@nendo.evalStr( " ''a " ).should == "(quote a)"
|
598
|
-
@nendo.evalStr( " '1 " ).should == "1"
|
599
|
-
@nendo.evalStr( " ''1 " ).should == "(quote 1)"
|
600
|
-
@nendo.evalStr( " '''1 " ).should == "(quote (quote 1))"
|
601
|
-
@nendo.evalStr( " '1.1 " ).should == "1.1"
|
602
|
-
@nendo.evalStr( " ''1.1 " ).should == "(quote 1.1)"
|
603
|
-
@nendo.evalStr( " '''1.1 " ).should == "(quote (quote 1.1))"
|
604
|
-
@nendo.evalStr( " '() " ).should == "()"
|
605
|
-
@nendo.evalStr( " '(()) " ).should == "(())"
|
606
|
-
@nendo.evalStr( " '((())) " ).should == "((()))"
|
607
|
-
@nendo.evalStr( " '(((()))) " ).should == "(((())))"
|
608
|
-
@nendo.evalStr( " '(() . ()) " ).should == "(())"
|
609
|
-
@nendo.evalStr( " '(a . ()) " ).should == "(a)"
|
610
|
-
@nendo.evalStr( " '(a . #t) " ).should == "(a . #t)"
|
611
|
-
@nendo.evalStr( " '(a . #f) " ).should == "(a . #f)"
|
612
|
-
@nendo.evalStr( " '(a . nil) " ).should == "(a . nil)"
|
613
|
-
@nendo.evalStr( " '(a b c d e . ()) " ).should == "(a b c d e)"
|
614
|
-
@nendo.evalStr( " '(#t #t #f #f nil nil '() '()) " ).should == "(#t #t #f #f nil nil (quote ()) (quote ()))"
|
615
|
-
end
|
616
|
-
end
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
class TestClassForBlockArgument
|
622
|
-
def arg1
|
623
|
-
yield 100
|
624
|
-
end
|
625
|
-
def arg2
|
626
|
-
yield 100,200
|
627
|
-
end
|
628
|
-
def arg5
|
629
|
-
yield 10,20,30,40,50
|
630
|
-
end
|
631
|
-
|
632
|
-
def arg1_plus_1( arg1 )
|
633
|
-
yield arg1, 200
|
634
|
-
end
|
635
|
-
|
636
|
-
end
|
637
|
-
|
638
|
-
describe Nendo, "when use &block(Ruby's block) " do
|
639
|
-
before do
|
640
|
-
@nendo = Nendo::Core.new()
|
641
|
-
end
|
642
|
-
|
643
|
-
it "should" do
|
644
|
-
@nendo.evalStr( " (define testclass (TestClassForBlockArgument.new)) testclass.class" ).should == "TestClassForBlockArgument"
|
645
|
-
@nendo.evalStr( " (testclass.arg1 (&block (a) (list a))) " ).should == "(100)"
|
646
|
-
@nendo.evalStr( " (testclass.arg2 (&block (a b) (cons a b))) " ).should == "(100 . 200)"
|
647
|
-
@nendo.evalStr( " (testclass.arg5 (&block (a b c d e) (list a b c d e))) " ).should == "(10 20 30 40 50)"
|
648
|
-
@nendo.evalStr( " (testclass.arg5 (&block (a b c d e) (to-arr (list a b c d e)))) " ).should == "#(10 20 30 40 50)"
|
649
|
-
end
|
650
|
-
end
|
651
|
-
|
652
|
-
describe Nendo, "when call variable length functions" do
|
653
|
-
before do
|
654
|
-
@nendo = Nendo::Core.new()
|
655
|
-
@nendo.loadInitFile
|
656
|
-
end
|
657
|
-
it "should" do
|
658
|
-
# fixed length
|
659
|
-
@nendo.evalStr( <<EOS
|
660
|
-
(define (arg0) 0)
|
661
|
-
(define (arg1 a) a)
|
662
|
-
(define (arg2 a b) b)
|
663
|
-
(define (arg3 a b c) c)
|
664
|
-
(define (arg4 a b c d) d)
|
665
|
-
(list
|
666
|
-
(arg0)
|
667
|
-
(arg1 1)
|
668
|
-
(arg2 1 2)
|
669
|
-
(arg3 1 2 3)
|
670
|
-
(arg4 1 2 3 4))
|
671
|
-
EOS
|
672
|
-
).should == "(0 1 2 3 4)"
|
673
|
-
|
674
|
-
@nendo.evalStr( <<EOS
|
675
|
-
(define (func-var-arg . arg) arg)
|
676
|
-
(list
|
677
|
-
(func-var-arg)
|
678
|
-
(func-var-arg 1)
|
679
|
-
(func-var-arg 1 2)
|
680
|
-
(func-var-arg 1 2 3)
|
681
|
-
(func-var-arg 1 2 3 4))
|
682
|
-
EOS
|
683
|
-
).should == "(() (1) (1 2) (1 2 3) (1 2 3 4))"
|
684
|
-
|
685
|
-
@nendo.evalStr( <<EOS
|
686
|
-
(define (func-var-arg first . rest) rest)
|
687
|
-
(list
|
688
|
-
(func-var-arg 0)
|
689
|
-
(func-var-arg 0 1)
|
690
|
-
(func-var-arg 0 1 2)
|
691
|
-
(func-var-arg 0 1 2 3)
|
692
|
-
(func-var-arg 0 1 2 3 4))
|
693
|
-
EOS
|
694
|
-
).should == "(() (1) (1 2) (1 2 3) (1 2 3 4))"
|
695
|
-
|
696
|
-
@nendo.evalStr( <<EOS
|
697
|
-
(define (func-var-arg first second . rest) (cons second rest))
|
698
|
-
(list
|
699
|
-
(func-var-arg "f" "s")
|
700
|
-
(func-var-arg "f" "s" 1)
|
701
|
-
(func-var-arg "f" "s" 1 2)
|
702
|
-
(func-var-arg "f" "s" 1 2 3)
|
703
|
-
(func-var-arg "f" "s" 1 2 3 4))
|
704
|
-
EOS
|
705
|
-
).should == '(("s") ("s" 1) ("s" 1 2) ("s" 1 2 3) ("s" 1 2 3 4))'
|
706
|
-
|
707
|
-
# Ruby method with block
|
708
|
-
@nendo.evalStr( <<EOS
|
709
|
-
(define testclass (TestClassForBlockArgument.new)) testclass.class
|
710
|
-
(list
|
711
|
-
(testclass.arg1 (&block (a) (list a)))
|
712
|
-
(testclass.arg2 (&block (a b) (cons a b)))
|
713
|
-
(testclass.arg1_plus_1 "a" (&block (a b) (list a b)))
|
714
|
-
)
|
715
|
-
EOS
|
716
|
-
).should == '((100) (100 . 200) ("a" 200))'
|
717
|
-
|
718
|
-
|
719
|
-
# Ruby method with block
|
720
|
-
@nendo.evalStr( <<EOS
|
721
|
-
(define (read-first-line fobj) (fobj.readline.chomp))
|
722
|
-
(let1 filename "./VERSION.yml"
|
723
|
-
(list
|
724
|
-
(with-open filename read-first-line "r")
|
725
|
-
(with-open filename read-first-line)))
|
726
|
-
EOS
|
727
|
-
).should == '("---" "---")'
|
728
|
-
end
|
729
|
-
end
|
730
|
-
|
731
|
-
|
732
|
-
describe Nendo, "when read various vector expressions" do
|
733
|
-
before do
|
734
|
-
@nendo = Nendo::Core.new()
|
735
|
-
@nendo.setDisplayErrors( false )
|
736
|
-
end
|
737
|
-
it "should" do
|
738
|
-
@nendo.evalStr( " '() " ).should == "()"
|
739
|
-
@nendo.evalStr( " '[] " ).should == "()"
|
740
|
-
@nendo.evalStr( " '#( 1 ) " ).should == "#(1)"
|
741
|
-
lambda { @nendo.evalStr( " '#(( 1 ) " ) }.should raise_error( RuntimeError )
|
742
|
-
@nendo.evalStr( " '#( 1 2 ) " ).should == "#(1 2)"
|
743
|
-
@nendo.evalStr( " '#( 1 () ) " ).should == "#(1 ())"
|
744
|
-
@nendo.evalStr( " '#( () 2 ) " ).should == "#(() 2)"
|
745
|
-
lambda { @nendo.evalStr( " '#( 1 . 2 ) " ) }.should raise_error( RuntimeError )
|
746
|
-
lambda { @nendo.evalStr( " #(+ 1 2) " ) }.should raise_error( RuntimeError )
|
747
|
-
@nendo.evalStr( " '#( 1 #( 11 )) " ).should == "#(1 #(11))"
|
748
|
-
@nendo.evalStr( " '#( 1 #( 11 12 )) " ).should == "#(1 #(11 12))"
|
749
|
-
@nendo.evalStr( " '#( 1 #( 11 #( 111 ))) " ).should == "#(1 #(11 #(111)))"
|
750
|
-
@nendo.evalStr( " '#( 1 #( 11 #( 111 112))) " ).should == "#(1 #(11 #(111 112)))"
|
751
|
-
@nendo.evalStr( " '#(1 2 3) " ).should == "#(1 2 3)"
|
752
|
-
@nendo.evalStr( " '#(1.1 2.2 3.3) " ).should == "#(1.1 2.2 3.3)"
|
753
|
-
@nendo.evalStr( " '#(a bb ccc dddd) " ).should == "#(a bb ccc dddd)"
|
754
|
-
@nendo.evalStr( " '#(a (b) ((c)) (((d)))) " ).should == "#(a (b) ((c)) (((d))))"
|
755
|
-
end
|
756
|
-
end
|
757
|
-
|
758
|
-
describe Nendo, "when call evalStr() with built-in functions" do
|
759
|
-
before do
|
760
|
-
@nendo = Nendo::Core.new()
|
761
|
-
@nendo.setDisplayErrors( false )
|
762
|
-
end
|
763
|
-
it "should" do
|
764
|
-
@nendo.evalStr( " (car '(1 2 3 4)) " ).should == "1"
|
765
|
-
@nendo.evalStr( " (cdr '(1 2 3 4)) " ).should == "(2 3 4)"
|
766
|
-
@nendo.evalStr( " (null? '()) " ).should == "#t"
|
767
|
-
@nendo.evalStr( " (null? '(1)) " ).should == "#f"
|
768
|
-
@nendo.evalStr( " (null? false) " ).should == "#f"
|
769
|
-
@nendo.evalStr( " (null? nil) " ).should == "#f"
|
770
|
-
@nendo.evalStr( " (null? true) " ).should == "#f"
|
771
|
-
@nendo.evalStr( " (cons 1 2) " ).should == "(1 . 2)"
|
772
|
-
@nendo.evalStr( " (cons 1 '(2 3)) " ).should == "(1 2 3)"
|
773
|
-
@nendo.evalStr( " (cons '(1 2) '(3 4)) " ).should == "((1 2) 3 4)"
|
774
|
-
@nendo.evalStr( " (cons '(1 2) '((3 4))) " ).should == "((1 2) (3 4))"
|
775
|
-
@nendo.evalStr( " (cons '() '()) " ).should == "(())"
|
776
|
-
@nendo.evalStr( " (cons 1 '()) " ).should == "(1)"
|
777
|
-
@nendo.evalStr( " (cons '() (cdr '(100))) " ).should == "(())"
|
778
|
-
@nendo.evalStr( " (cons '() (car '(()))) " ).should == "(())"
|
779
|
-
@nendo.evalStr( " (cons (car '(())) '()) " ).should == "(())"
|
780
|
-
@nendo.evalStr( " (cons (car '(())) (car '(()))) " ).should == "(())"
|
781
|
-
@nendo.evalStr( " (cons '() (cdr '(100))) " ).should == "(())"
|
782
|
-
@nendo.evalStr( " (cons (cdr '(100)) '()) " ).should == "(())"
|
783
|
-
@nendo.evalStr( " (cons (cdr '(100)) (cdr '(100))) " ).should == "(())"
|
784
|
-
lambda { @nendo.evalStr( " (cons 1 2 3) " ) }.should raise_error(ArgumentError)
|
785
|
-
lambda { @nendo.evalStr( " (cons 1) " ) }.should raise_error(ArgumentError)
|
786
|
-
lambda { @nendo.evalStr( " (cons) " ) }.should raise_error(ArgumentError)
|
787
|
-
@nendo.evalStr( " (list 1 2 3) " ).should == "(1 2 3)"
|
788
|
-
@nendo.evalStr( " (list '(1) '(2) '(3)) " ).should == "((1) (2) (3))"
|
789
|
-
@nendo.evalStr( " (list 'a 'b 'c) " ).should == "(a b c)"
|
790
|
-
@nendo.evalStr( " (list '(a) '((b c))) " ).should == "((a) ((b c)))"
|
791
|
-
@nendo.evalStr( " (list) " ).should == "()"
|
792
|
-
@nendo.evalStr( " (list 1) " ).should == "(1)"
|
793
|
-
@nendo.evalStr( " (reverse '(1)) " ).should == "(1)"
|
794
|
-
@nendo.evalStr( " (reverse '(1 2 3)) " ).should == "(3 2 1)"
|
795
|
-
@nendo.evalStr( " (reverse '(1 2 ())) " ).should == "(() 2 1)"
|
796
|
-
@nendo.evalStr( " (reverse (list 1 2 (cdr '(100)))) " ).should == "(() 2 1)"
|
797
|
-
@nendo.evalStr( " (define !a 10) !a" ).should == "10"
|
798
|
-
@nendo.evalStr( " (define $a 11) $a" ).should == "11"
|
799
|
-
@nendo.evalStr( " (define %a 12) %a" ).should == "12"
|
800
|
-
@nendo.evalStr( " (define &a 13) &a" ).should == "13"
|
801
|
-
@nendo.evalStr( " (define *a 14) *a" ).should == "14"
|
802
|
-
@nendo.evalStr( " (define +a 15) +a" ).should == "15"
|
803
|
-
@nendo.evalStr( " (define -a 16) -a" ).should == "16"
|
804
|
-
@nendo.evalStr( " (define /a 17) /a" ).should == "17"
|
805
|
-
@nendo.evalStr( " (define <a 18) <a" ).should == "18"
|
806
|
-
@nendo.evalStr( " (define =a 19) =a" ).should == "19"
|
807
|
-
@nendo.evalStr( " (define ?a 20) ?a" ).should == "20"
|
808
|
-
@nendo.evalStr( " (define @a 21) @a" ).should == "21"
|
809
|
-
@nendo.evalStr( " (define ^a 22) ^a" ).should == "22"
|
810
|
-
@nendo.evalStr( " (define ~a 23) ~a" ).should == "23"
|
811
|
-
@nendo.evalStr( " (define a! 30) a!" ).should == "30"
|
812
|
-
@nendo.evalStr( " (define a$ 31) a$" ).should == "31"
|
813
|
-
@nendo.evalStr( " (define a% 32) a%" ).should == "32"
|
814
|
-
@nendo.evalStr( " (define a& 33) a&" ).should == "33"
|
815
|
-
@nendo.evalStr( " (define a* 34) a*" ).should == "34"
|
816
|
-
@nendo.evalStr( " (define a+ 35) a+" ).should == "35"
|
817
|
-
@nendo.evalStr( " (define a- 36) a-" ).should == "36"
|
818
|
-
@nendo.evalStr( " (define a/ 37) a/" ).should == "37"
|
819
|
-
@nendo.evalStr( " (define a< 38) a<" ).should == "38"
|
820
|
-
@nendo.evalStr( " (define a= 39) a=" ).should == "39"
|
821
|
-
@nendo.evalStr( " (define a? 40) a?" ).should == "40"
|
822
|
-
@nendo.evalStr( " (define a@ 41) a@" ).should == "41"
|
823
|
-
@nendo.evalStr( " (define a^ 42) a^" ).should == "42"
|
824
|
-
@nendo.evalStr( " (define a~ 43) a~" ).should == "43"
|
825
|
-
@nendo.evalStr( " (define aFunc (lambda (x) x)) true" ).should == "#t"
|
826
|
-
@nendo.evalStr( " (define aMacro (macro (x) x)) true" ).should == "#t"
|
827
|
-
@nendo.evalStr( " (define a! 123) a!" ).should == "123"
|
828
|
-
@nendo.evalStr( " (define b? 321) b?" ).should == "321"
|
829
|
-
@nendo.evalStr( " (define a-b 1234) a-b" ).should == "1234"
|
830
|
-
@nendo.evalStr( " (define start-end!? 4321) start-end!?" ).should == "4321"
|
831
|
-
@nendo.evalStr( " (procedure? car) " ).should == "#t"
|
832
|
-
@nendo.evalStr( " (procedure? aFunc) " ).should == "#t"
|
833
|
-
@nendo.evalStr( " (procedure? aMacro) " ).should == "#f"
|
834
|
-
@nendo.evalStr( " (procedure? 1) " ).should == "#f"
|
835
|
-
@nendo.evalStr( " (procedure? 1.1) " ).should == "#f"
|
836
|
-
@nendo.evalStr( " (procedure? \"str\") " ).should == "#f"
|
837
|
-
@nendo.evalStr( " (procedure? 'a) " ).should == "#f"
|
838
|
-
@nendo.evalStr( " (procedure? '(1)) " ).should == "#f"
|
839
|
-
@nendo.evalStr( " (procedure? '()) " ).should == "#f"
|
840
|
-
@nendo.evalStr( " (symbol? car) " ).should == "#f"
|
841
|
-
@nendo.evalStr( " (symbol? aFunc) " ).should == "#f"
|
842
|
-
@nendo.evalStr( " (symbol? aMacro) " ).should == "#f"
|
843
|
-
@nendo.evalStr( " (symbol? 1) " ).should == "#f"
|
844
|
-
@nendo.evalStr( " (symbol? 1.1) " ).should == "#f"
|
845
|
-
@nendo.evalStr( " (symbol? \"str\") " ).should == "#f"
|
846
|
-
@nendo.evalStr( " (symbol? 'a) " ).should == "#t"
|
847
|
-
@nendo.evalStr( " (symbol? '(1)) " ).should == "#f"
|
848
|
-
@nendo.evalStr( " (symbol? '()) " ).should == "#f"
|
849
|
-
@nendo.evalStr( " (pair? car) " ).should == "#f"
|
850
|
-
@nendo.evalStr( " (pair? aFunc) " ).should == "#f"
|
851
|
-
@nendo.evalStr( " (pair? aMacro) " ).should == "#f"
|
852
|
-
@nendo.evalStr( " (pair? 1) " ).should == "#f"
|
853
|
-
@nendo.evalStr( " (pair? 1.1) " ).should == "#f"
|
854
|
-
@nendo.evalStr( " (pair? \"str\") " ).should == "#f"
|
855
|
-
@nendo.evalStr( " (pair? 'a) " ).should == "#f"
|
856
|
-
@nendo.evalStr( " (pair? '(1)) " ).should == "#t"
|
857
|
-
@nendo.evalStr( " (pair? '()) " ).should == "#f"
|
858
|
-
@nendo.evalStr( " (number? car) " ).should == "#f"
|
859
|
-
@nendo.evalStr( " (number? aFunc) " ).should == "#f"
|
860
|
-
@nendo.evalStr( " (number? aMacro) " ).should == "#f"
|
861
|
-
@nendo.evalStr( " (number? 1) " ).should == "#t"
|
862
|
-
@nendo.evalStr( " (number? 1.1) " ).should == "#t"
|
863
|
-
@nendo.evalStr( " (number? \"str\") " ).should == "#f"
|
864
|
-
@nendo.evalStr( " (number? 'a) " ).should == "#f"
|
865
|
-
@nendo.evalStr( " (number? '(1)) " ).should == "#f"
|
866
|
-
@nendo.evalStr( " (number? '()) " ).should == "#f"
|
867
|
-
@nendo.evalStr( " (integer? car) " ).should == "#f"
|
868
|
-
@nendo.evalStr( " (integer? aFunc) " ).should == "#f"
|
869
|
-
@nendo.evalStr( " (integer? aMacro) " ).should == "#f"
|
870
|
-
@nendo.evalStr( " (integer? 1) " ).should == "#t"
|
871
|
-
@nendo.evalStr( " (integer? 1.1) " ).should == "#f"
|
872
|
-
@nendo.evalStr( " (integer? \"str\") " ).should == "#f"
|
873
|
-
@nendo.evalStr( " (integer? 'a) " ).should == "#f"
|
874
|
-
@nendo.evalStr( " (integer? '(1)) " ).should == "#f"
|
875
|
-
@nendo.evalStr( " (integer? '()) " ).should == "#f"
|
876
|
-
@nendo.evalStr( " (string? car) " ).should == "#f"
|
877
|
-
@nendo.evalStr( " (string? aFunc) " ).should == "#f"
|
878
|
-
@nendo.evalStr( " (string? aMacro) " ).should == "#f"
|
879
|
-
@nendo.evalStr( " (string? 1) " ).should == "#f"
|
880
|
-
@nendo.evalStr( " (string? 1.1) " ).should == "#f"
|
881
|
-
@nendo.evalStr( " (string? \"str\") " ).should == "#t"
|
882
|
-
@nendo.evalStr( " (string? 'a) " ).should == "#f"
|
883
|
-
@nendo.evalStr( " (string? '(1)) " ).should == "#f"
|
884
|
-
@nendo.evalStr( " (string? '()) " ).should == "#f"
|
885
|
-
@nendo.evalStr( " (macro? car) " ).should == "#f"
|
886
|
-
@nendo.evalStr( " (macro? aFunc) " ).should == "#f"
|
887
|
-
@nendo.evalStr( " (macro? aMacro) " ).should == "#t"
|
888
|
-
@nendo.evalStr( " (macro? 1) " ).should == "#f"
|
889
|
-
@nendo.evalStr( " (macro? 1.1) " ).should == "#f"
|
890
|
-
@nendo.evalStr( " (macro? \"str\") " ).should == "#f"
|
891
|
-
@nendo.evalStr( " (macro? 'a) " ).should == "#f"
|
892
|
-
@nendo.evalStr( " (macro? '(1)) " ).should == "#f"
|
893
|
-
@nendo.evalStr( " (macro? '()) " ).should == "#f"
|
894
|
-
@nendo.evalStr( " (length '()) " ).should == "0"
|
895
|
-
@nendo.evalStr( " (length '(1)) " ).should == "1"
|
896
|
-
@nendo.evalStr( " (length '((1))) " ).should == "1"
|
897
|
-
@nendo.evalStr( " (length '(1 2)) " ).should == "2"
|
898
|
-
lambda { @nendo.evalStr( " (length \"str\") " ) }.should raise_error(TypeError)
|
899
|
-
lambda { @nendo.evalStr( " (length 1) " ) }.should raise_error(TypeError)
|
900
|
-
@nendo.evalStr( " (symbol->string 'sym) " ).should == '"sym"'
|
901
|
-
@nendo.evalStr( " (string->symbol \"sym\") " ).should == 'sym'
|
902
|
-
@nendo.evalStr( ' (string-join \'("Aa" "Bb" "Cc") ) ' ).should == '"AaBbCc"'
|
903
|
-
@nendo.evalStr( ' (string-join \'("Aa" "Bb" "Cc") ":") ' ).should == '"Aa:Bb:Cc"'
|
904
|
-
@nendo.evalStr( ' (string-join \'("Aa" "Bb" "Cc") "//") ' ).should == '"Aa//Bb//Cc"'
|
905
|
-
lambda { @nendo.evalStr( ' (string-join \'("Aa" "Bb" "Cc") 100) ' ) }.should raise_error(TypeError)
|
906
|
-
lambda { @nendo.evalStr( ' (string-join \'("Aa" "Bb" "Cc") :xx) ' ) }.should raise_error(TypeError)
|
907
|
-
@nendo.evalStr( ' (read-from-string "1") ' ).should == '1'
|
908
|
-
@nendo.evalStr( ' (read-from-string "(+ 1 2)") ' ).should == '(+ 1 2)'
|
909
|
-
@nendo.evalStr( ' (read-from-string "(\"Aa\" \"Bb\" \"Cc\")") ' ).should == '("Aa" "Bb" "Cc")'
|
910
|
-
lambda { @nendo.evalStr( ' (read-from-string 100) ' ) }.should raise_error(TypeError)
|
911
|
-
@nendo.evalStr( ' (write-to-string 1) ' ).should == '"1"'
|
912
|
-
@nendo.evalStr( ' (write-to-string \'(+ 1 2)) ' ).should == '"(+ 1 2)"'
|
913
|
-
@nendo.evalStr( ' (write-to-string \'("Aa" "Bb" "Cc")) ' ).should == '"(\"Aa\" \"Bb\" \"Cc\")"'
|
914
|
-
end
|
915
|
-
end
|
916
|
-
|
917
|
-
describe Nendo, "when call evalStr() with variable modifications" do
|
918
|
-
before do
|
919
|
-
@nendo = Nendo::Core.new()
|
920
|
-
end
|
921
|
-
it "should" do
|
922
|
-
@nendo.evalStr( " (define x 1) x " ).should == "1"
|
923
|
-
@nendo.evalStr( " (define x 2) x " ).should == "2"
|
924
|
-
@nendo.evalStr( " (define x 100) x " ).should == "100"
|
925
|
-
@nendo.evalStr( " (define x true) x " ).should == "#t"
|
926
|
-
@nendo.evalStr( " (define x false) x " ).should == "#f"
|
927
|
-
@nendo.evalStr( " (define x nil) x " ).should == "nil"
|
928
|
-
@nendo.evalStr( " (define x '()) x " ).should == "()"
|
929
|
-
@nendo.evalStr( " (define x '(1)) x " ).should == "(1)"
|
930
|
-
@nendo.evalStr( " (define x (+ 1 2 3)) x " ).should == "6"
|
931
|
-
@nendo.evalStr( " (define x (sprintf \"$%02X\" 17)) x x x " ).should == '"$11"'
|
932
|
-
@nendo.evalStr( " 1 2 3 " ).should == "3"
|
933
|
-
@nendo.evalStr( " (define x 3.14) (set! x (* x 2)) x " ).should == "6.28"
|
934
|
-
@nendo.evalStr( " 1 \n 2 \n 3 \n " ).should == "3"
|
935
|
-
@nendo.evalStr( " (define a '(1 . 2)) (set-car! a 100) a " ).should == "(100 . 2)"
|
936
|
-
@nendo.evalStr( " (define a '(1 . 2)) (set-car! a '()) a " ).should == "(() . 2)"
|
937
|
-
@nendo.evalStr( " (define a '(1 . 2)) (set-car! a #t) a " ).should == "(#t . 2)"
|
938
|
-
@nendo.evalStr( " (define a '(1 . 2)) (set-car! a #f) a " ).should == "(#f . 2)"
|
939
|
-
@nendo.evalStr( " (define a '(1 . 2)) (set-car! a nil) a " ).should == "(nil . 2)"
|
940
|
-
@nendo.evalStr( " (define a '(1 . 2)) (set-cdr! a 200) a " ).should == "(1 . 200)"
|
941
|
-
@nendo.evalStr( " (define a '(1 . 2)) (set-cdr! a '(2)) a " ).should == "(1 2)"
|
942
|
-
@nendo.evalStr( " (define a '(1 . 2)) (set-cdr! a '()) a " ).should == "(1)"
|
943
|
-
@nendo.evalStr( " (define a '(1 . 2)) (set-cdr! a #t) a " ).should == "(1 . #t)"
|
944
|
-
@nendo.evalStr( " (define a '(1 . 2)) (set-cdr! a #f) a " ).should == "(1 . #f)"
|
945
|
-
@nendo.evalStr( " (define a '(1 . 2)) (set-cdr! a nil) a " ).should == "(1 . nil)"
|
946
|
-
@nendo.evalStr( " (define a '((1 . 2) 3)) (set-car! (car a) 100) a " ).should == "((100 . 2) 3)"
|
947
|
-
@nendo.evalStr( " (define a '((1 . 2) 3)) (set-cdr! (car a) 200) a " ).should == "((1 . 200) 3)"
|
948
|
-
@nendo.evalStr( " (define a '((1 . 2) . 3)) (set-cdr! a 300) a " ).should == "((1 . 2) . 300)"
|
949
|
-
end
|
950
|
-
end
|
951
|
-
|
952
|
-
describe Nendo, "when call evalStr() with undefined variable" do
|
953
|
-
before do
|
954
|
-
@nendo = Nendo::Core.new()
|
955
|
-
@nendo.setDisplayErrors( false )
|
956
|
-
end
|
957
|
-
it "should" do
|
958
|
-
lambda { @nendo.evalStr( " true " ) }.should_not raise_error
|
959
|
-
lambda { @nendo.evalStr( " false " ) }.should_not raise_error
|
960
|
-
lambda { @nendo.evalStr( " nil " ) }.should_not raise_error
|
961
|
-
lambda { @nendo.evalStr( " line1 " ) }.should raise_error( NameError )
|
962
|
-
lambda { @nendo.evalStr( " true \n line2 " ) }.should raise_error( NameError )
|
963
|
-
lambda { @nendo.evalStr( " true \n true \n line3 " ) }.should raise_error( NameError )
|
964
|
-
lambda { @nendo.evalStr( " (+ 1 x) " ) }.should raise_error( NameError )
|
965
|
-
lambda { @nendo.evalStr( " true \n (+ 1 y) " ) }.should raise_error( NameError )
|
966
|
-
end
|
967
|
-
end
|
968
|
-
|
969
|
-
describe Nendo, "when call evalStr() with built-in special forms" do
|
970
|
-
before do
|
971
|
-
@nendo = Nendo::Core.new()
|
972
|
-
@nendo.setDisplayErrors( false )
|
973
|
-
end
|
974
|
-
it "should" do
|
975
|
-
@nendo.evalStr( " (begin 1) " ).should == "1"
|
976
|
-
@nendo.evalStr( " (begin 1 2) " ).should == "2"
|
977
|
-
@nendo.evalStr( " (begin 1 2 3) " ).should == "3"
|
978
|
-
@nendo.evalStr( <<EOS
|
979
|
-
(set! x 2)
|
980
|
-
(set! y (begin
|
981
|
-
(set! x (* x 2))
|
982
|
-
(set! x (* x 2))
|
983
|
-
(set! x (* x 2))
|
984
|
-
100))
|
985
|
-
(+ x y)
|
986
|
-
EOS
|
987
|
-
).should == "116"
|
988
|
-
@nendo.evalStr( " (%let () 100) " ).should == "100"
|
989
|
-
@nendo.evalStr( " (%let ((a 11)) a) " ).should == "11"
|
990
|
-
@nendo.evalStr( " (%let ((a 11) (b 22)) (+ a b)) " ).should == "33"
|
991
|
-
@nendo.evalStr( " (%let ((a 22)) (%let ((b 33)) (+ a b))) " ).should == "55"
|
992
|
-
@nendo.evalStr( " (%let ((a 22)(b 33)) (%let ((c 44) (d 55)) (+ a b c d))) " ).should == "154"
|
993
|
-
@nendo.evalStr( " (%let ((a (%let ((b 2)) (+ 100 b)))) a) " ).should == "102"
|
994
|
-
@nendo.evalStr( " (letrec () 100) " ).should == "100"
|
995
|
-
@nendo.evalStr( " (letrec ((a 11)) a) " ).should == "11"
|
996
|
-
@nendo.evalStr( " (letrec ((a 11) (b 22)) (+ a b)) " ).should == "33"
|
997
|
-
@nendo.evalStr( " (letrec ((a 22)) (%let ((b 33)) (+ a b))) " ).should == "55"
|
998
|
-
@nendo.evalStr( " (letrec ((a 22)(b 33)) (%let ((c 44) (d 55)) (+ a b c d))) " ).should == "154"
|
999
|
-
@nendo.evalStr( " (letrec ((a (%let ((b 2)) (+ 100 b)))) a) " ).should == "102"
|
1000
|
-
@nendo.evalStr( <<EOS
|
1001
|
-
(letrec ((func1 (lambda () 13))
|
1002
|
-
(func2 (lambda () (* 2 (func1)))))
|
1003
|
-
(list (func2) (func1)))
|
1004
|
-
EOS
|
1005
|
-
).should == "(26 13)"
|
1006
|
-
@nendo.evalStr( <<EOS
|
1007
|
-
(letrec ((func2 (lambda () (* 2 (func1))))
|
1008
|
-
(func1 (lambda () 7)))
|
1009
|
-
(list (func2) (func1)))
|
1010
|
-
EOS
|
1011
|
-
).should == "(14 7)"
|
1012
|
-
@nendo.evalStr( " (if true 't 'f)" ).should == "t"
|
1013
|
-
@nendo.evalStr( " (if true '(1) '(2))" ).should == "(1)"
|
1014
|
-
@nendo.evalStr( " (if false 't 'f)" ).should == "f"
|
1015
|
-
@nendo.evalStr( " (if false '(1) '(2))" ).should == "(2)"
|
1016
|
-
@nendo.evalStr( " (set! x 0) (if true (set! x 1) (set! x 2)) x" ).should == "1"
|
1017
|
-
@nendo.evalStr( " (set! x 0) (if false (set! x 1) (set! x 2)) x" ).should == "2"
|
1018
|
-
@nendo.evalStr( " (set! func (lambda (arg1) arg1)) (list (func 1) (func 2))" ).should == "(1 2)"
|
1019
|
-
@nendo.evalStr( " ((lambda (arg1) arg1) 3)" ).should == "3"
|
1020
|
-
@nendo.evalStr( " ((lambda (arg1) arg1) (+ 1 2 3))" ).should == "6"
|
1021
|
-
@nendo.evalStr( " ((lambda (arg1 . arg2) arg1) 1 '(2))" ).should == "1"
|
1022
|
-
@nendo.evalStr( " ((lambda (arg1 . arg2) arg2) 1 '(2))" ).should == "((2))"
|
1023
|
-
@nendo.evalStr( " ((lambda (arg1 . arg2) arg2) 1 '(2 3))" ).should == "((2 3))"
|
1024
|
-
@nendo.evalStr( " ((lambda (arg1 . arg2) arg1) '() '())" ).should == "()"
|
1025
|
-
@nendo.evalStr( " ((lambda (arg1 . arg2) arg2) '() '())" ).should == "(())"
|
1026
|
-
@nendo.evalStr( " ((lambda (arg1 . arg2) arg1) (cdr '(100)) (cdr '(200)))" ).should == "()"
|
1027
|
-
@nendo.evalStr( " ((lambda (arg1 . arg2) arg2) (cdr '(100)) (cdr '(200)))" ).should == "(())"
|
1028
|
-
@nendo.evalStr( " ((if #t + *) 3 4)" ).should == "7"
|
1029
|
-
@nendo.evalStr( " ((if #f + *) 3 4)" ).should == "12"
|
1030
|
-
@nendo.evalStr( " (apply1 + '(1 2))" ).should == "3"
|
1031
|
-
@nendo.evalStr( " (apply1 + (range 10 1))" ).should == "55"
|
1032
|
-
@nendo.evalStr( " (apply1 cons '(1 2))" ).should == "(1 . 2)"
|
1033
|
-
@nendo.evalStr( " (apply1 list '(1 2 3))" ).should == "(1 2 3)"
|
1034
|
-
lambda { @nendo.evalStr( " (error \"My Runtime Error\") " ) }.should raise_error( RuntimeError, /My Runtime Error/ )
|
1035
|
-
lambda { @nendo.evalStr( " (error \"My Runtime Error\" '(a b c)) " ) }.should raise_error( RuntimeError, /My Runtime Error [(]a b c[)]/ )
|
1036
|
-
@nendo.evalStr( "((lambda (arg1) (+ 1 arg1)) 2)" ).should == "3"
|
1037
|
-
lambda { @nendo.evalStr( "((lambda (arg1) (+ 1 arg1)))" ) }.should raise_error( ArgumentError, /wrong number of arguments/ )
|
1038
|
-
end
|
1039
|
-
end
|
1040
|
-
|
1041
|
-
describe Nendo, "when call evalStr() with built-in special forms (renamed symbol)" do
|
1042
|
-
before do
|
1043
|
-
@nendo = Nendo::Core.new()
|
1044
|
-
@nendo.setDisplayErrors( false )
|
1045
|
-
@nendo.loadInitFile
|
1046
|
-
end
|
1047
|
-
it "should" do
|
1048
|
-
@nendo.evalStr( " (/nendo/core/begin 1) " ).should == "1"
|
1049
|
-
@nendo.evalStr( " (/nendo/core/begin 1 2) " ).should == "2"
|
1050
|
-
@nendo.evalStr( " (/nendo/core/begin 1 2 3) " ).should == "3"
|
1051
|
-
@nendo.evalStr( <<EOS
|
1052
|
-
(/nendo/core/set! x 2)
|
1053
|
-
(/nendo/core/set! y (/nendo/core/begin
|
1054
|
-
(/nendo/core/set! x (* x 2))
|
1055
|
-
(/nendo/core/set! x (* x 2))
|
1056
|
-
(/nendo/core/set! x (* x 2))
|
1057
|
-
100))
|
1058
|
-
(+ x y)
|
1059
|
-
EOS
|
1060
|
-
).should == "116"
|
1061
|
-
@nendo.evalStr( " (/nendo/core/%let () 100) " ).should == "100"
|
1062
|
-
@nendo.evalStr( " (/nendo/core/%let ((a 11)) a) " ).should == "11"
|
1063
|
-
@nendo.evalStr( " (/nendo/core/%let ((a 11) (b 22)) (+ a b)) " ).should == "33"
|
1064
|
-
@nendo.evalStr( " (/nendo/core/%let ((a 22)) (let ((b 33)) (+ a b))) " ).should == "55"
|
1065
|
-
@nendo.evalStr( " (/nendo/core/%let ((a 22)(b 33)) (let ((c 44) (d 55)) (+ a b c d))) " ).should == "154"
|
1066
|
-
@nendo.evalStr( " (/nendo/core/%let ((a (let ((b 2)) (+ 100 b)))) a) " ).should == "102"
|
1067
|
-
@nendo.evalStr( " (/nendo/core/letrec () 100) " ).should == "100"
|
1068
|
-
@nendo.evalStr( " (/nendo/core/letrec ((a 11)) a) " ).should == "11"
|
1069
|
-
@nendo.evalStr( " (/nendo/core/letrec ((a 11) (b 22)) (+ a b)) " ).should == "33"
|
1070
|
-
@nendo.evalStr( " (/nendo/core/letrec ((a 22)) (let ((b 33)) (+ a b))) " ).should == "55"
|
1071
|
-
@nendo.evalStr( " (/nendo/core/letrec ((a 22)(b 33)) (let ((c 44) (d 55)) (+ a b c d))) " ).should == "154"
|
1072
|
-
@nendo.evalStr( " (/nendo/core/letrec ((a (let ((b 2)) (+ 100 b)))) a) " ).should == "102"
|
1073
|
-
@nendo.evalStr( <<EOS
|
1074
|
-
(/nendo/core/letrec ((func1 (/nendo/core/lambda () 13))
|
1075
|
-
(func2 (/nendo/core/lambda () (* 2 (func1)))))
|
1076
|
-
(list (func2) (func1)))
|
1077
|
-
EOS
|
1078
|
-
).should == "(26 13)"
|
1079
|
-
@nendo.evalStr( <<EOS
|
1080
|
-
(/nendo/core/letrec ((func2 (/nendo/core/lambda () (* 2 (func1))))
|
1081
|
-
(func1 (/nendo/core/lambda () 7)))
|
1082
|
-
(list (func2) (func1)))
|
1083
|
-
EOS
|
1084
|
-
).should == "(14 7)"
|
1085
|
-
@nendo.evalStr( " (/nendo/core/if true 't 'f)" ).should == "t"
|
1086
|
-
@nendo.evalStr( " (/nendo/core/if true '(1) '(2))" ).should == "(1)"
|
1087
|
-
@nendo.evalStr( " (/nendo/core/if false 't 'f)" ).should == "f"
|
1088
|
-
@nendo.evalStr( " (/nendo/core/if false '(1) '(2))" ).should == "(2)"
|
1089
|
-
@nendo.evalStr( " (/nendo/core/set! x 0) (/nendo/core/if true (set! x 1) (set! x 2)) x" ).should == "1"
|
1090
|
-
@nendo.evalStr( " (/nendo/core/set! x 0) (/nendo/core/if false (set! x 1) (set! x 2)) x" ).should == "2"
|
1091
|
-
@nendo.evalStr( <<EOS
|
1092
|
-
(/nendo/core/set! func (/nendo/core/lambda (arg1) arg1))
|
1093
|
-
(list (func 1) (func 2))
|
1094
|
-
EOS
|
1095
|
-
).should == "(1 2)"
|
1096
|
-
@nendo.evalStr( " ((/nendo/core/lambda (arg1) arg1) 3)" ).should == "3"
|
1097
|
-
@nendo.evalStr( " ((/nendo/core/lambda (arg1) arg1) (+ 1 2 3))" ).should == "6"
|
1098
|
-
@nendo.evalStr( " ((/nendo/core/if #t + *) 3 4)" ).should == "7"
|
1099
|
-
@nendo.evalStr( " ((/nendo/core/if #f + *) 3 4)" ).should == "12"
|
1100
|
-
lambda { @nendo.evalStr( " (/nendo/core/error \"My Runtime Error\") " ) }.should raise_error( RuntimeError )
|
1101
|
-
end
|
1102
|
-
end
|
1103
|
-
|
1104
|
-
|
1105
|
-
describe Nendo, "when redefined built-in functions(1)." do
|
1106
|
-
before do
|
1107
|
-
@nendo = Nendo::Core.new()
|
1108
|
-
@nendo.setDisplayErrors( false )
|
1109
|
-
@nendo.loadInitFile
|
1110
|
-
end
|
1111
|
-
it "should" do
|
1112
|
-
@nendo.evalStr( " (define (+ a b) (list a b)) (+ 1 2)" ).should == "(1 2)"
|
1113
|
-
lambda { @nendo.evalStr( " (define (+ a b) (list a b)) (+ 1 2 3)" ) }.should raise_error( ArgumentError )
|
1114
|
-
@nendo.evalStr( " (define (eq? a b) \"eq?\") (eq? 1 1)" ).should == '"eq?"'
|
1115
|
-
end
|
1116
|
-
end
|
1117
|
-
|
1118
|
-
describe Nendo, "when redefined built-in functions(2)." do
|
1119
|
-
before do
|
1120
|
-
@nendo = Nendo::Core.new()
|
1121
|
-
@nendo.loadInitFile
|
1122
|
-
end
|
1123
|
-
it "should" do
|
1124
|
-
@nendo.evalStr( " (define (< a b) \"<\") (< 1 1)" ).should == '"<"'
|
1125
|
-
end
|
1126
|
-
end
|
1127
|
-
|
1128
|
-
describe Nendo, "when redefined built-in functions(3)." do
|
1129
|
-
before do
|
1130
|
-
@nendo = Nendo::Core.new()
|
1131
|
-
@nendo.loadInitFile
|
1132
|
-
end
|
1133
|
-
it "should" do
|
1134
|
-
@nendo.evalStr( " (define (car lst) \"car\") (car '(1 2))" ).should == '"car"'
|
1135
|
-
end
|
1136
|
-
end
|
1137
|
-
|
1138
|
-
describe Nendo, "when call evalStr() with global and lexical scope variable" do
|
1139
|
-
before do
|
1140
|
-
@nendo = Nendo::Core.new()
|
1141
|
-
end
|
1142
|
-
it "should" do
|
1143
|
-
@nendo.evalStr( " (define var 111) " ).should == "111"
|
1144
|
-
@nendo.evalStr( " (%let ((var 222)) var) " ).should == "222"
|
1145
|
-
@nendo.evalStr( " (%let ((var 222)) (set! var 333) var) " ).should == "333"
|
1146
|
-
@nendo.evalStr( " (%let ((var 222)) (set! var 333)) var " ).should == "111"
|
1147
|
-
@nendo.evalStr( " (define global1 \"G\") " ).should == '"G"'
|
1148
|
-
@nendo.evalStr( <<EOS
|
1149
|
-
(%let ((local1 \"L\")
|
1150
|
-
(local2 \"L\"))
|
1151
|
-
(set! global1 (+ global1 \"lobal1\"))
|
1152
|
-
(set! local1 (+ local1 \"ocal1\"))
|
1153
|
-
(set! local2 (+ local2 \"ocal2\"))
|
1154
|
-
(list global1
|
1155
|
-
local1
|
1156
|
-
local2
|
1157
|
-
(%let ((local1 \"A\")
|
1158
|
-
(local2 \"B\"))
|
1159
|
-
(set! local1 (+ local1 \"a\"))
|
1160
|
-
(set! local2 (+ local2 \"b\"))
|
1161
|
-
(list local1 local2
|
1162
|
-
(%let ((local1 \"CCC\"))
|
1163
|
-
(list global1 local1 local2))))))
|
1164
|
-
EOS
|
1165
|
-
).should == '("Global1" "Local1" "Local2" ("Aa" "Bb" ("Global1" "CCC" "Bb")))'
|
1166
|
-
end
|
1167
|
-
end
|
1168
|
-
|
1169
|
-
describe Nendo, "when call evalStr() with macroexpand-1 function" do
|
1170
|
-
before do
|
1171
|
-
@nendo = Nendo::Core.new()
|
1172
|
-
end
|
1173
|
-
it "should" do
|
1174
|
-
@nendo.evalStr( <<EOS
|
1175
|
-
(set! twice (macro (x) (list 'begin x x)))
|
1176
|
-
(macroexpand-1 '(twice (+ 1 1)))
|
1177
|
-
EOS
|
1178
|
-
).should == "(begin (+ 1 1) (+ 1 1))"
|
1179
|
-
@nendo.evalStr( <<EOS
|
1180
|
-
(set! inc (macro (x) (list 'set! x (list '+ x 1))))
|
1181
|
-
(macroexpand-1 '(inc a))
|
1182
|
-
EOS
|
1183
|
-
).should == "(set! a (+ a 1))"
|
1184
|
-
@nendo.evalStr( " (set! a 10) (inc a) " ).should == "11"
|
1185
|
-
@nendo.evalStr( " (set! a 10) (inc a) (inc a)" ).should == "12"
|
1186
|
-
@nendo.evalStr( <<EOS
|
1187
|
-
(macroexpand-1
|
1188
|
-
'(twice (twice (inc a))))
|
1189
|
-
EOS
|
1190
|
-
).should ==
|
1191
|
-
"(begin (twice (inc a)) (twice (inc a)))"
|
1192
|
-
@nendo.evalStr( <<EOS
|
1193
|
-
(macroexpand-1
|
1194
|
-
(macroexpand-1
|
1195
|
-
'(twice (twice (inc a)))))
|
1196
|
-
EOS
|
1197
|
-
).should ==
|
1198
|
-
"(begin (begin (inc a) (inc a)) (twice (inc a)))"
|
1199
|
-
@nendo.evalStr( <<EOS
|
1200
|
-
(macroexpand-1
|
1201
|
-
(macroexpand-1
|
1202
|
-
(macroexpand-1
|
1203
|
-
'(twice (twice (inc a))))))
|
1204
|
-
EOS
|
1205
|
-
).should ==
|
1206
|
-
"(begin (begin (set! a (+ a 1)) (inc a)) (twice (inc a)))"
|
1207
|
-
@nendo.evalStr( <<EOS
|
1208
|
-
(macroexpand-1
|
1209
|
-
(macroexpand-1
|
1210
|
-
(macroexpand-1
|
1211
|
-
(macroexpand-1
|
1212
|
-
'(twice (twice (inc a)))))))
|
1213
|
-
EOS
|
1214
|
-
).should ==
|
1215
|
-
"(begin (begin (set! a (+ a 1)) (set! a (+ a 1))) (twice (inc a)))"
|
1216
|
-
@nendo.evalStr( " (set! a 10) (twice (twice (inc a)))" ).should == "14"
|
1217
|
-
end
|
1218
|
-
end
|
1219
|
-
|
1220
|
-
|
1221
|
-
describe Nendo, "when use #xxxx syntax " do
|
1222
|
-
before do
|
1223
|
-
@nendo = Nendo::Core.new()
|
1224
|
-
@nendo.setDisplayErrors( false )
|
1225
|
-
@nendo.loadInitFile
|
1226
|
-
end
|
1227
|
-
it "should" do
|
1228
|
-
@nendo.evalStr( " #t " ).should == "#t"
|
1229
|
-
@nendo.evalStr( " #f " ).should == "#f"
|
1230
|
-
@nendo.evalStr( " '#( 1 ) " ).should == "#(1)"
|
1231
|
-
@nendo.evalStr( " '#() " ).should == "#()"
|
1232
|
-
@nendo.evalStr( " #! \n #t" ).should == "#t"
|
1233
|
-
@nendo.evalStr( " #! \n 100" ).should == "100"
|
1234
|
-
@nendo.evalStr( " #! 123 \n 100" ).should == "100"
|
1235
|
-
@nendo.evalStr( " '#?=1" ).should == "(debug-print 1 \"(string)\" 1 (quote 1))"
|
1236
|
-
@nendo.evalStr( " '#?." ).should == '"(string):1"'
|
1237
|
-
@nendo.evalStr( " '#?." ).should == '"(string):1"'
|
1238
|
-
@nendo.evalStr( " (begin #?. (+ 1 1))" ).should == "2"
|
1239
|
-
@nendo.evalStr( " (rxmatch #/[a-z]/ \"abc\")" ).should == "a"
|
1240
|
-
@nendo.evalStr( " (quote #?=(rxmatch #/[a-z]/ \"abc\"))" ).should == '(debug-print (rxmatch #/[a-z]/ "abc") "(string)" 1 (quote (rxmatch #/[a-z]/ "abc")))'
|
1241
|
-
@nendo.evalStr( <<EOS
|
1242
|
-
(begin
|
1243
|
-
#?.
|
1244
|
-
(+ 1 1)
|
1245
|
-
#?. )
|
1246
|
-
EOS
|
1247
|
-
).should == '"(string):4"'
|
1248
|
-
@nendo.evalStr( " #b0 " ).should == Integer("0b0").to_s
|
1249
|
-
@nendo.evalStr( " #b01 " ).should == Integer("0b01").to_s
|
1250
|
-
@nendo.evalStr( " #b10 " ).should == Integer("0b10").to_s
|
1251
|
-
@nendo.evalStr( " #b00000001 " ).should == Integer("0b00000001").to_s
|
1252
|
-
@nendo.evalStr( " #b1010101010101010 " ).should == Integer("0b1010101010101010").to_s
|
1253
|
-
lambda { @nendo.evalStr( " #b2 " ) }.should raise_error(RuntimeError)
|
1254
|
-
lambda { @nendo.evalStr( " #b02 " ) }.should raise_error(RuntimeError)
|
1255
|
-
lambda { @nendo.evalStr( " #bF " ) }.should raise_error(RuntimeError)
|
1256
|
-
@nendo.evalStr( " #o0 " ).should == Integer("0o0").to_s
|
1257
|
-
@nendo.evalStr( " #o7 " ).should == Integer("0o7").to_s
|
1258
|
-
@nendo.evalStr( " #o01 " ).should == Integer("0o01").to_s
|
1259
|
-
@nendo.evalStr( " #o10 " ).should == Integer("0o10").to_s
|
1260
|
-
@nendo.evalStr( " #o777 " ).should == Integer("0o777").to_s
|
1261
|
-
@nendo.evalStr( " #o00000007 " ).should == Integer("0o00000007").to_s
|
1262
|
-
@nendo.evalStr( " #o0123456701234567 " ).should == Integer("0o0123456701234567").to_s
|
1263
|
-
lambda { @nendo.evalStr( " #o8 " ) }.should raise_error(RuntimeError)
|
1264
|
-
lambda { @nendo.evalStr( " #o08 " ) }.should raise_error(RuntimeError)
|
1265
|
-
lambda { @nendo.evalStr( " #oA " ) }.should raise_error(RuntimeError)
|
1266
|
-
@nendo.evalStr( " #d0 " ).should == Integer("0d0").to_s
|
1267
|
-
@nendo.evalStr( " #d9 " ).should == Integer("0d9").to_s
|
1268
|
-
@nendo.evalStr( " #d01 " ).should == Integer("0d01").to_s
|
1269
|
-
@nendo.evalStr( " #d10 " ).should == Integer("0d10").to_s
|
1270
|
-
@nendo.evalStr( " #d999 " ).should == Integer("0d999").to_s
|
1271
|
-
@nendo.evalStr( " #d00000009 " ).should == Integer("0d00000009").to_s
|
1272
|
-
@nendo.evalStr( " #d0123456701234567 " ).should == Integer("0d0123456701234567").to_s
|
1273
|
-
lambda { @nendo.evalStr( " #dA " ) }.should raise_error(RuntimeError)
|
1274
|
-
lambda { @nendo.evalStr( " #dF " ) }.should raise_error(RuntimeError)
|
1275
|
-
@nendo.evalStr( " #x0 " ).should == Integer("0x0").to_s
|
1276
|
-
@nendo.evalStr( " #x9 " ).should == Integer("0x9").to_s
|
1277
|
-
@nendo.evalStr( " #xA " ).should == Integer("0xA").to_s
|
1278
|
-
@nendo.evalStr( " #xF " ).should == Integer("0xF").to_s
|
1279
|
-
@nendo.evalStr( " #x01 " ).should == Integer("0x01").to_s
|
1280
|
-
@nendo.evalStr( " #x10 " ).should == Integer("0x10").to_s
|
1281
|
-
@nendo.evalStr( " #xFFF " ).should == Integer("0xFFF").to_s
|
1282
|
-
@nendo.evalStr( " #x0000000F " ).should == Integer("0x0000000F").to_s
|
1283
|
-
@nendo.evalStr( " #x0123456789ABCDEF0123456789ABCDEF " ).should == Integer("0x0123456789ABCDEF0123456789ABCDEF").to_s
|
1284
|
-
lambda { @nendo.evalStr( " #xg " ) }.should raise_error(RuntimeError)
|
1285
|
-
lambda { @nendo.evalStr( " #xh " ) }.should raise_error(RuntimeError)
|
1286
|
-
lambda { @nendo.evalStr( " #xz " ) }.should raise_error(RuntimeError)
|
1287
|
-
lambda { @nendo.evalStr( " #xG " ) }.should raise_error(RuntimeError)
|
1288
|
-
lambda { @nendo.evalStr( " #xH " ) }.should raise_error(RuntimeError)
|
1289
|
-
lambda { @nendo.evalStr( " #xZ " ) }.should raise_error(RuntimeError)
|
1290
|
-
lambda { @nendo.evalStr( " #a " ) }.should raise_error(NameError)
|
1291
|
-
lambda { @nendo.evalStr( " #c " ) }.should raise_error(NameError)
|
1292
|
-
lambda { @nendo.evalStr( " #e " ) }.should raise_error(NameError)
|
1293
|
-
lambda { @nendo.evalStr( " #tt " ) }.should raise_error(NameError)
|
1294
|
-
lambda { @nendo.evalStr( " #ff " ) }.should raise_error(NameError)
|
1295
|
-
lambda { @nendo.evalStr( " #abc " ) }.should raise_error(NameError)
|
1296
|
-
lambda { @nendo.evalStr( " #? " ) }.should raise_error(NameError)
|
1297
|
-
lambda { @nendo.evalStr( " #?a " ) }.should raise_error(NameError)
|
1298
|
-
lambda { @nendo.evalStr( " #= " ) }.should raise_error(NameError)
|
1299
|
-
lambda { @nendo.evalStr( " #?? " ) }.should raise_error(NameError)
|
1300
|
-
end
|
1301
|
-
end
|
1302
|
-
|
1303
|
-
describe Nendo, "when use regexp litteral and library functions " do
|
1304
|
-
before do
|
1305
|
-
@nendo = Nendo::Core.new()
|
1306
|
-
@nendo.setDisplayErrors( false )
|
1307
|
-
@nendo.loadInitFile
|
1308
|
-
end
|
1309
|
-
it "should" do
|
1310
|
-
@nendo.evalStr( " #/abc/ " ).should == "#/abc/"
|
1311
|
-
@nendo.evalStr( " #/[a-z]/ " ).should == "#/[a-z]/"
|
1312
|
-
@nendo.evalStr( " #/[a-zA-Z0-9]+/ " ).should == "#/[a-zA-Z0-9]+/"
|
1313
|
-
@nendo.evalStr( ' #/\d/ ' ).should == '#/\d/'
|
1314
|
-
@nendo.evalStr( ' #/[\/]/ ' ).should == '#/[\/]/'
|
1315
|
-
@nendo.evalStr( ' #/\]/ ' ).should == '#/\]/'
|
1316
|
-
@nendo.evalStr( ' #/^\]/ ' ).should == '#/^\]/'
|
1317
|
-
@nendo.evalStr( ' #/\[/ ' ).should == '#/\[/'
|
1318
|
-
@nendo.evalStr( ' #/^\[/ ' ).should == '#/^\[/'
|
1319
|
-
@nendo.evalStr( ' #/\.\^\$\/\+\-\(\)\|/ ' ).should == '#/\.\^\$\/\+\-\(\)\|/'
|
1320
|
-
@nendo.evalStr( " #/abc/i " ).should == "#/abc/i"
|
1321
|
-
@nendo.evalStr( " #/[a-z]/i " ).should == "#/[a-z]/i"
|
1322
|
-
lambda { @nendo.evalStr( " #/[a-z]/I " ) }.should raise_error(NameError)
|
1323
|
-
lambda { @nendo.evalStr( " #/[a-z]/a " ) }.should raise_error(NameError)
|
1324
|
-
|
1325
|
-
@nendo.evalStr( ' (string->regexp "abc") ' ).should == '#/abc/'
|
1326
|
-
@nendo.evalStr( ' (string->regexp "[a-z]") ' ).should == '#/[a-z]/'
|
1327
|
-
@nendo.evalStr( ' (string->regexp "[a-zA-Z0-9]+" ) ' ).should == '#/[a-zA-Z0-9]+/'
|
1328
|
-
@nendo.evalStr( ' (string->regexp "\\\\d" ) ' ).should == '#/\d/'
|
1329
|
-
@nendo.evalStr( " (regexp? #/str/ ) " ).should == "#t"
|
1330
|
-
@nendo.evalStr( " (regexp? #/str/i ) " ).should == "#t"
|
1331
|
-
@nendo.evalStr( " (regexp? \"str\" ) " ).should == "#f"
|
1332
|
-
@nendo.evalStr( " (regexp? 'str) " ).should == "#f"
|
1333
|
-
@nendo.evalStr( " (regexp? (. \"str\" intern)) " ).should == "#f"
|
1334
|
-
@nendo.evalStr( " (regexp? 100) " ).should == "#f"
|
1335
|
-
|
1336
|
-
@nendo.evalStr( " (regexp->string #/abc/ ) " ).should == '"abc"'
|
1337
|
-
@nendo.evalStr( " (regexp->string #/[a-z]/ ) " ).should == '"[a-z]"'
|
1338
|
-
@nendo.evalStr( " (regexp->string #/[a-zA-Z0-9]+/ ) " ).should == '"[a-zA-Z0-9]+"'
|
1339
|
-
@nendo.evalStr( ' (regexp->string #/\d+/ ) ' ).should == '"\\\\d+"'
|
1340
|
-
|
1341
|
-
@nendo.evalStr( ' (define matchdata (rxmatch #/(\d+):(\d+)/ "foo314:2000bar")) ' ).should == '314:2000'
|
1342
|
-
@nendo.evalStr( ' (rxmatch-start matchdata) ' ).should == '3'
|
1343
|
-
@nendo.evalStr( ' (rxmatch-start matchdata 0) ' ).should == '3'
|
1344
|
-
@nendo.evalStr( ' (rxmatch-start matchdata 1) ' ).should == '3'
|
1345
|
-
@nendo.evalStr( ' (rxmatch-start matchdata 2) ' ).should == '7'
|
1346
|
-
@nendo.evalStr( ' (rxmatch-end matchdata) ' ).should == '11'
|
1347
|
-
@nendo.evalStr( ' (rxmatch-end matchdata 0) ' ).should == '11'
|
1348
|
-
@nendo.evalStr( ' (rxmatch-end matchdata 1) ' ).should == '6'
|
1349
|
-
@nendo.evalStr( ' (rxmatch-end matchdata 2) ' ).should == '11'
|
1350
|
-
@nendo.evalStr( ' (rxmatch-substring matchdata) ' ).should == '"314:2000"'
|
1351
|
-
@nendo.evalStr( ' (rxmatch-substring matchdata 0) ' ).should == '"314:2000"'
|
1352
|
-
@nendo.evalStr( ' (rxmatch-substring matchdata 1) ' ).should == '"314"'
|
1353
|
-
@nendo.evalStr( ' (rxmatch-substring matchdata 2) ' ).should == '"2000"'
|
1354
|
-
@nendo.evalStr( ' (rxmatch-num-matches matchdata) ' ).should == '3'
|
1355
|
-
|
1356
|
-
@nendo.evalStr( ' (define matchdata (rxmatch #/(\w+)@([\w.]+)/ "foo@example.com")) ' ).should == 'foo@example.com'
|
1357
|
-
@nendo.evalStr( ' (rxmatch-substring matchdata) ' ).should == '"foo@example.com"'
|
1358
|
-
@nendo.evalStr( ' (rxmatch-substring matchdata 0) ' ).should == '"foo@example.com"'
|
1359
|
-
@nendo.evalStr( ' (rxmatch-substring matchdata 1) ' ).should == '"foo"'
|
1360
|
-
@nendo.evalStr( ' (rxmatch-substring matchdata 2) ' ).should == '"example.com"'
|
1361
|
-
|
1362
|
-
@nendo.evalStr( ' (rxmatch->string #/(\w+)@([\w.]+)/ "foo@example.com")' ).should == '"foo@example.com"'
|
1363
|
-
@nendo.evalStr( ' (rxmatch->string #/(\w+)@([\w.]+)/ "foo@example.com" 0)' ).should == '"foo@example.com"'
|
1364
|
-
@nendo.evalStr( ' (rxmatch->string #/(\w+)@([\w.]+)/ "foo@example.com" 1)' ).should == '"foo"'
|
1365
|
-
@nendo.evalStr( ' (rxmatch->string #/(\w+)@([\w.]+)/ "foo@example.com" 2)' ).should == '"example.com"'
|
1366
|
-
|
1367
|
-
@nendo.evalStr( ' (rxmatch->string #/abc/ "000abc00ABC000")' ).should == '"abc"'
|
1368
|
-
@nendo.evalStr( ' (rxmatch->string #/ABC/ "000abc00ABC000")' ).should == '"ABC"'
|
1369
|
-
@nendo.evalStr( ' (rxmatch->string #/abc/i "abc")' ).should == '"abc"'
|
1370
|
-
@nendo.evalStr( ' (rxmatch->string #/abc/i "ABC")' ).should == '"ABC"'
|
1371
|
-
@nendo.evalStr( ' (rxmatch->string #/ABC/i "abc")' ).should == '"abc"'
|
1372
|
-
@nendo.evalStr( ' (rxmatch->string #/abc/i "AbC")' ).should == '"AbC"'
|
1373
|
-
|
1374
|
-
@nendo.evalStr( ' (rxmatch #/abc/i "xxx")' ).should == '#f'
|
1375
|
-
@nendo.evalStr( ' (rxmatch #/XXX/ "xxx")' ).should == '#f'
|
1376
|
-
@nendo.evalStr( ' (rxmatch->string #/abc/i "xxx")' ).should == '#f'
|
1377
|
-
@nendo.evalStr( ' (rxmatch->string #/XXX/ "xxx")' ).should == '#f'
|
1378
|
-
|
1379
|
-
pending( "JRuby can't compute correctly" ) if defined? JRUBY_VERSION
|
1380
|
-
@nendo.evalStr( <<EOS
|
1381
|
-
(define matchdata
|
1382
|
-
(rxmatch #/([あ-ん])([あ-ん])([あ-ん])([あ-ん])([あ-ん])/
|
1383
|
-
"ABC漢字あいうえお漢字ABC"))
|
1384
|
-
EOS
|
1385
|
-
).should == 'あいうえお'
|
1386
|
-
@nendo.evalStr( ' (rxmatch-start matchdata) ' ).should == '5'
|
1387
|
-
@nendo.evalStr( ' (rxmatch-end matchdata) ' ).should == '10'
|
1388
|
-
@nendo.evalStr( ' (rxmatch-substring matchdata) ' ).should == '"あいうえお"'
|
1389
|
-
@nendo.evalStr( ' (rxmatch-substring matchdata 1) ' ).should == '"あ"'
|
1390
|
-
@nendo.evalStr( ' (rxmatch-substring matchdata 2) ' ).should == '"い"'
|
1391
|
-
@nendo.evalStr( ' (rxmatch-substring matchdata 3) ' ).should == '"う"'
|
1392
|
-
end
|
1393
|
-
end
|
1394
|
-
|
1395
|
-
|
1396
|
-
describe Nendo, "when call functions in init.nnd " do
|
1397
|
-
before do
|
1398
|
-
@nendo = Nendo::Core.new()
|
1399
|
-
@nendo.loadInitFile
|
1400
|
-
@nendo.loadInitFile # to self optimizing. The init.nnd file will be loaded twice, so `map' can be optimized on second loading phase.
|
1401
|
-
end
|
1402
|
-
it "should" do
|
1403
|
-
@nendo.evalStr( " (cadr '(1 2 3 4)) " ).should == "2"
|
1404
|
-
@nendo.evalStr( " (caddr '(1 2 3 4)) " ).should == "3"
|
1405
|
-
@nendo.evalStr( " (cadddr '(1 2 3 4)) " ).should == "4"
|
1406
|
-
@nendo.evalStr( " (caar '((5 6 7 8))) " ).should == "5"
|
1407
|
-
@nendo.evalStr( " (cdar '((5 6 7 8))) " ).should == "(6 7 8)"
|
1408
|
-
@nendo.evalStr( " (cadar '((5 6 7 8))) " ).should == "6"
|
1409
|
-
@nendo.evalStr( " (cddar '((5 6 7 8))) " ).should == "(7 8)"
|
1410
|
-
@nendo.evalStr( " (iota 1) " ).should == "(0)"
|
1411
|
-
@nendo.evalStr( " (iota 3) " ).should == "(0 1 2)"
|
1412
|
-
@nendo.evalStr( " (append '() '()) " ).should == "()"
|
1413
|
-
@nendo.evalStr( " (append '(1) '()) " ).should == "(1)"
|
1414
|
-
@nendo.evalStr( " (append '() '(2)) " ).should == "(2)"
|
1415
|
-
@nendo.evalStr( " (append '(1) '(2)) " ).should == "(1 2)"
|
1416
|
-
@nendo.evalStr( " (append '(1 2) '(3 4)) " ).should == "(1 2 3 4)"
|
1417
|
-
@nendo.evalStr( " (append '(1 2) (cdr '(200))) " ).should == "(1 2)"
|
1418
|
-
@nendo.evalStr( " (append (cdr '(100)) '(10 20)) " ).should == "(10 20)"
|
1419
|
-
@nendo.evalStr( " (define lst '()) " ).should == "()"
|
1420
|
-
@nendo.evalStr( " (push! lst 1) " ).should == "(1)"
|
1421
|
-
@nendo.evalStr( " lst " ).should == "(1)"
|
1422
|
-
@nendo.evalStr( " (push! lst 2) " ).should == "(2 1)"
|
1423
|
-
@nendo.evalStr( " lst " ).should == "(2 1)"
|
1424
|
-
@nendo.evalStr( " (push! lst 3) " ).should == "(3 2 1)"
|
1425
|
-
@nendo.evalStr( " lst " ).should == "(3 2 1)"
|
1426
|
-
@nendo.evalStr( ' (push! lst "str") ' ).should == '("str" 3 2 1)'
|
1427
|
-
@nendo.evalStr( " lst " ).should == '("str" 3 2 1)'
|
1428
|
-
@nendo.evalStr( " (pair? '()) " ).should == "#f"
|
1429
|
-
@nendo.evalStr( " (pair? '(1)) " ).should == "#t"
|
1430
|
-
@nendo.evalStr( " (pair? '(1 2)) " ).should == "#t"
|
1431
|
-
@nendo.evalStr( " (pair? '(1 2 3)) " ).should == "#t"
|
1432
|
-
@nendo.evalStr( " (pair? '(1 . 2)) " ).should == "#t"
|
1433
|
-
@nendo.evalStr( " (pair? '(())) " ).should == "#t"
|
1434
|
-
@nendo.evalStr( " (pair? 1) " ).should == "#f"
|
1435
|
-
@nendo.evalStr( " (pair? \"str\") " ).should == "#f"
|
1436
|
-
@nendo.evalStr( " (list? '()) " ).should == "#t"
|
1437
|
-
@nendo.evalStr( " (list? '(1)) " ).should == "#t"
|
1438
|
-
@nendo.evalStr( " (list? '(1 2)) " ).should == "#t"
|
1439
|
-
@nendo.evalStr( " (list? '(1 2 3)) " ).should == "#t"
|
1440
|
-
@nendo.evalStr( " (list? '(1 . 2)) " ).should == "#f"
|
1441
|
-
@nendo.evalStr( " (list? '(1 2 . 3)) " ).should == "#f"
|
1442
|
-
@nendo.evalStr( " (list? '(())) " ).should == "#t"
|
1443
|
-
@nendo.evalStr( " (list? 1) " ).should == "#f"
|
1444
|
-
@nendo.evalStr( " (list? \"str\") " ).should == "#f"
|
1445
|
-
@nendo.evalStr( " (even? 2) " ).should == "#t"
|
1446
|
-
@nendo.evalStr( " (even? 1) " ).should == "#f"
|
1447
|
-
@nendo.evalStr( " (even? 0) " ).should == "#t"
|
1448
|
-
@nendo.evalStr( " (even? -1) " ).should == "#f"
|
1449
|
-
@nendo.evalStr( " (even? -2) " ).should == "#t"
|
1450
|
-
@nendo.evalStr( " (odd? 2) " ).should == "#f"
|
1451
|
-
@nendo.evalStr( " (odd? 1) " ).should == "#t"
|
1452
|
-
@nendo.evalStr( " (odd? 0) " ).should == "#f"
|
1453
|
-
@nendo.evalStr( " (odd? -1) " ).should == "#t"
|
1454
|
-
@nendo.evalStr( " (odd? -2) " ).should == "#f"
|
1455
|
-
@nendo.evalStr( " (zero? 0) " ).should == "#t"
|
1456
|
-
@nendo.evalStr( " (zero? #f) " ).should == "#f"
|
1457
|
-
@nendo.evalStr( " (zero? #t) " ).should == "#f"
|
1458
|
-
@nendo.evalStr( " (zero? 1) " ).should == "#f"
|
1459
|
-
@nendo.evalStr( " (zero? 2) " ).should == "#f"
|
1460
|
-
@nendo.evalStr( " (zero? -1) " ).should == "#f"
|
1461
|
-
@nendo.evalStr( " (zero? \"str\") " ).should == "#f"
|
1462
|
-
@nendo.evalStr( " (zero? zero?) " ).should == "#f"
|
1463
|
-
@nendo.evalStr( " (positive? 1) " ).should == "#t"
|
1464
|
-
@nendo.evalStr( " (positive? 0) " ).should == "#f"
|
1465
|
-
@nendo.evalStr( " (positive? -1) " ).should == "#f"
|
1466
|
-
@nendo.evalStr( " (negative? 1) " ).should == "#f"
|
1467
|
-
@nendo.evalStr( " (negative? 0) " ).should == "#f"
|
1468
|
-
@nendo.evalStr( " (negative? -1) " ).should == "#t"
|
1469
|
-
@nendo.evalStr( " (abs -1) " ).should == "1"
|
1470
|
-
@nendo.evalStr( " (abs 1) " ).should == "1"
|
1471
|
-
@nendo.evalStr( " (abs -1000) " ).should == "1000"
|
1472
|
-
@nendo.evalStr( " (abs 1000) " ).should == "1000"
|
1473
|
-
@nendo.evalStr( " (max -2 1 0 1 2 3 4 5) " ).should == "5"
|
1474
|
-
@nendo.evalStr( " (max 5 4 3 2 1 0 -1 -2) " ).should == "5"
|
1475
|
-
@nendo.evalStr( " (max 1000000000 10 -10000) " ).should == "1000000000"
|
1476
|
-
@nendo.evalStr( " (min -2 1 0 1 2 3 4 5) " ).should == "-2"
|
1477
|
-
@nendo.evalStr( " (min 5 4 3 2 1 0 -1 -2) " ).should == "-2"
|
1478
|
-
@nendo.evalStr( " (min 1000000000 10 -10000) " ).should == "-10000"
|
1479
|
-
@nendo.evalStr( " (succ -1) " ).should == "0"
|
1480
|
-
@nendo.evalStr( " (succ 0) " ).should == "1"
|
1481
|
-
@nendo.evalStr( " (succ 1) " ).should == "2"
|
1482
|
-
@nendo.evalStr( " (pred -1) " ).should == "-2"
|
1483
|
-
@nendo.evalStr( " (pred 0) " ).should == "-1"
|
1484
|
-
@nendo.evalStr( " (pred 1) " ).should == "0"
|
1485
|
-
@nendo.evalStr( " (pred 2) " ).should == "1"
|
1486
|
-
@nendo.evalStr( " (min 1000000000 10 -10000) " ).should == "-10000"
|
1487
|
-
@nendo.evalStr( " (nth 0 '(100 200 300)) " ).should == "100"
|
1488
|
-
@nendo.evalStr( " (nth 1 '(100 200 300)) " ).should == "200"
|
1489
|
-
@nendo.evalStr( " (nth 2 '(100 200 300)) " ).should == "300"
|
1490
|
-
@nendo.evalStr( " (nth 3 '(100 200 300)) " ).should == "()"
|
1491
|
-
@nendo.evalStr( " (nth -1 '(100 200 300)) " ).should == "()"
|
1492
|
-
@nendo.evalStr( " (first '(100 200 300 400 500 600 700 800 900 1000)) " ).should == "100"
|
1493
|
-
@nendo.evalStr( " (second '(100 200 300 400 500 600 700 800 900 1000)) " ).should == "200"
|
1494
|
-
@nendo.evalStr( " (third '(100 200 300 400 500 600 700 800 900 1000)) " ).should == "300"
|
1495
|
-
@nendo.evalStr( " (fourth '(100 200 300 400 500 600 700 800 900 1000)) " ).should == "400"
|
1496
|
-
@nendo.evalStr( " (fifth '(100 200 300 400 500 600 700 800 900 1000)) " ).should == "500"
|
1497
|
-
@nendo.evalStr( " (sixth '(100 200 300 400 500 600 700 800 900 1000)) " ).should == "600"
|
1498
|
-
@nendo.evalStr( " (seventh '(100 200 300 400 500 600 700 800 900 1000)) " ).should == "700"
|
1499
|
-
@nendo.evalStr( " (eighth '(100 200 300 400 500 600 700 800 900 1000)) " ).should == "800"
|
1500
|
-
@nendo.evalStr( " (ninth '(100 200 300 400 500 600 700 800 900 1000)) " ).should == "900"
|
1501
|
-
@nendo.evalStr( " (tenth '(100 200 300 400 500 600 700 800 900 1000)) " ).should == "1000"
|
1502
|
-
@nendo.evalStr( " (first '()) " ).should == "()"
|
1503
|
-
@nendo.evalStr( " (tenth '()) " ).should == "()"
|
1504
|
-
@nendo.evalStr( " (to-s 10) " ).should == '"10"'
|
1505
|
-
@nendo.evalStr( " (to_s 10) " ).should == '"10"'
|
1506
|
-
@nendo.evalStr( " (x->string 10) " ).should == '"10"'
|
1507
|
-
@nendo.evalStr( " (number->string 11) " ).should == '"11"'
|
1508
|
-
@nendo.evalStr( " (to-s 2.1) " ).should == '"2.1"'
|
1509
|
-
@nendo.evalStr( " (to_s 2.1) " ).should == '"2.1"'
|
1510
|
-
@nendo.evalStr( " (x->string 2.1) " ).should == '"2.1"'
|
1511
|
-
@nendo.evalStr( " (number->string 2.2) " ).should == '"2.2"'
|
1512
|
-
@nendo.evalStr( ' (string-append) ' ).should == '""'
|
1513
|
-
@nendo.evalStr( ' (string-append "a") ' ).should == '"a"'
|
1514
|
-
@nendo.evalStr( ' (string-append "a" "b") ' ).should == '"ab"'
|
1515
|
-
@nendo.evalStr( ' (string-append "a" "B" "c" "D" "e") ' ).should == '"aBcDe"'
|
1516
|
-
@nendo.evalStr( ' (string=? "ABC" "ABC") ' ).should == '#t'
|
1517
|
-
@nendo.evalStr( ' (string=? "ABC" "ABc") ' ).should == '#f'
|
1518
|
-
@nendo.evalStr( ' (string=? "ABC" "abc") ' ).should == '#f'
|
1519
|
-
@nendo.evalStr( ' (string=? 100 100) ' ).should == '#t'
|
1520
|
-
@nendo.evalStr( ' (string=? (+ "A" "B") "AB") ' ).should == '#t'
|
1521
|
-
@nendo.evalStr( " (to_i \"22\") " ).should == '22'
|
1522
|
-
@nendo.evalStr( " (to-i \"22\") " ).should == '22'
|
1523
|
-
@nendo.evalStr( " (to_i \"10000\") " ).should == '10000'
|
1524
|
-
@nendo.evalStr( " (to-i \"10000\") " ).should == '10000'
|
1525
|
-
@nendo.evalStr( " (let1 aaa 111 aaa) " ).should == "111"
|
1526
|
-
@nendo.evalStr( " (let1 aaa (+ 2 3) aaa) " ).should == "5"
|
1527
|
-
@nendo.evalStr( " (let1 aaa 333 (let1 bbb 444 (+ aaa bbb))) " ).should == "777"
|
1528
|
-
@nendo.evalStr( " (let1 aaa 333 (let1 bbb 444 (set! bbb 555) (+ aaa bbb))) " ).should == "888"
|
1529
|
-
@nendo.evalStr( " (memq 'b '(a b c d)) " ).should == "(b c d)"
|
1530
|
-
@nendo.evalStr( " (memq 'c '(a b c d)) " ).should == "(c d)"
|
1531
|
-
@nendo.evalStr( " (memq 'd '(a b c d)) " ).should == "(d)"
|
1532
|
-
@nendo.evalStr( " (memq 'e '(a b c d)) " ).should == "#f"
|
1533
|
-
@nendo.evalStr( " (memq 'e '(a b c d . e)) " ).should == "#f"
|
1534
|
-
@nendo.evalStr( ' (memq "b" \'("a" "b" "c" "d")) ' ).should == '("b" "c" "d")'
|
1535
|
-
@nendo.evalStr( ' (memv "b" \'("a" "b" "c" "d")) ' ).should == '("b" "c" "d")'
|
1536
|
-
@nendo.evalStr( ' (memv "c" \'("a" "b" "c" "d")) ' ).should == '("c" "d")'
|
1537
|
-
@nendo.evalStr( ' (memv "d" \'("a" "b" "c" "d")) ' ).should == '("d")'
|
1538
|
-
@nendo.evalStr( ' (memv "e" \'("a" "b" "c" "d")) ' ).should == '#f'
|
1539
|
-
@nendo.evalStr( ' (memv "e" \'("a" "b" "c" "d" . "e")) ' ).should == '#f'
|
1540
|
-
@nendo.evalStr( ' (memv \'("b") \'(("a") ("b") ("c") ("d"))) ' ).should == '#f'
|
1541
|
-
@nendo.evalStr( ' (member \'("b") \'(("a") ("b") ("c") ("d"))) ' ).should == '(("b") ("c") ("d"))'
|
1542
|
-
@nendo.evalStr( ' (member \'("c") \'(("a") ("b") ("c") ("d"))) ' ).should == '(("c") ("d"))'
|
1543
|
-
@nendo.evalStr( ' (member \'("d") \'(("a") ("b") ("c") ("d"))) ' ).should == '(("d"))'
|
1544
|
-
@nendo.evalStr( ' (member \'("e") \'(("a") ("b") ("c") ("d"))) ' ).should == '#f'
|
1545
|
-
@nendo.evalStr( ' (member \'("e") \'(("a") ("b") ("c") ("d") . ("e"))) ' ).should == '#f'
|
1546
|
-
@nendo.evalStr( " (let1 v (map (lambda (x) x) '(1 2 3)) v) " ).should == "(1 2 3)"
|
1547
|
-
@nendo.evalStr( " (let ((v (map (lambda (x) x) '(1 2 3)))) v) " ).should == "(1 2 3)"
|
1548
|
-
@nendo.evalStr( " (cond (true 1) (false 2)) " ).should == "1"
|
1549
|
-
@nendo.evalStr( " (cond (true ) (false )) " ).should == "#t"
|
1550
|
-
@nendo.evalStr( " (cond (false 1) (true 2)) " ).should == "2"
|
1551
|
-
@nendo.evalStr( " (cond (true 1) (true 2)) " ).should == "1"
|
1552
|
-
@nendo.evalStr( " (cond (false 1) (false 2)) " ).should == "()"
|
1553
|
-
@nendo.evalStr( " (cond (false 1) (false 2) (else 3)) " ).should == "3"
|
1554
|
-
@nendo.evalStr( <<EOS
|
1555
|
-
(cond
|
1556
|
-
((- 10 9)
|
1557
|
-
=>
|
1558
|
-
(lambda (x)
|
1559
|
-
(+ \"<\" (to_s x) \">\")))
|
1560
|
-
(else
|
1561
|
-
2))
|
1562
|
-
EOS
|
1563
|
-
).should == '"<1>"'
|
1564
|
-
@nendo.evalStr( <<EOS
|
1565
|
-
(cond
|
1566
|
-
(true 1)
|
1567
|
-
((- 10 8)
|
1568
|
-
=>
|
1569
|
-
(lambda (x)
|
1570
|
-
(+ \"<\" (to_s x) \">\")))
|
1571
|
-
(else
|
1572
|
-
3))
|
1573
|
-
EOS
|
1574
|
-
).should == "1"
|
1575
|
-
@nendo.evalStr( " (or) " ).should == "#f"
|
1576
|
-
@nendo.evalStr( " (or true) " ).should == "#t"
|
1577
|
-
@nendo.evalStr( " (or false) " ).should == "#f"
|
1578
|
-
@nendo.evalStr( " (or nil) " ).should == "#f"
|
1579
|
-
@nendo.evalStr( " (or '(1)) " ).should == "(1)"
|
1580
|
-
@nendo.evalStr( " (or '()) " ).should == "()"
|
1581
|
-
@nendo.evalStr( " (or true true true) " ).should == "#t"
|
1582
|
-
@nendo.evalStr( " (or 1 2 3) " ).should == "1"
|
1583
|
-
@nendo.evalStr( " (or false 2) " ).should == "2"
|
1584
|
-
@nendo.evalStr( " (or false false 3) " ).should == "3"
|
1585
|
-
@nendo.evalStr( " (or false '(2) false) " ).should == "(2)"
|
1586
|
-
@nendo.evalStr( " (and) " ).should == "#t"
|
1587
|
-
@nendo.evalStr( " (and true) " ).should == "#t"
|
1588
|
-
@nendo.evalStr( " (and false) " ).should == "#f"
|
1589
|
-
@nendo.evalStr( " (and nil) " ).should == "nil"
|
1590
|
-
@nendo.evalStr( " (and '(1)) " ).should == "(1)"
|
1591
|
-
@nendo.evalStr( " (and '()) " ).should == "()"
|
1592
|
-
@nendo.evalStr( " (and true true true) " ).should == "#t"
|
1593
|
-
@nendo.evalStr( " (and 1 2 3) " ).should == "3"
|
1594
|
-
@nendo.evalStr( " (and false 2) " ).should == "#f"
|
1595
|
-
@nendo.evalStr( " (and false false 3) " ).should == "#f"
|
1596
|
-
@nendo.evalStr( " (and true 2) " ).should == "2"
|
1597
|
-
@nendo.evalStr( " (and true true 3) " ).should == "3"
|
1598
|
-
@nendo.evalStr( " (and true true 3 false) " ).should == "#f"
|
1599
|
-
@nendo.evalStr( " (and true '(2) true) " ).should == "#t"
|
1600
|
-
@nendo.evalStr( " (and true true '(2)) " ).should == "(2)"
|
1601
|
-
@nendo.evalStr( " (and true '(2) false) " ).should == "#f"
|
1602
|
-
@nendo.evalStr( <<EOS
|
1603
|
-
(define total 0)
|
1604
|
-
(and 1
|
1605
|
-
2
|
1606
|
-
(set! total (+ total 1))
|
1607
|
-
(set! total (+ total 2))
|
1608
|
-
5)
|
1609
|
-
total
|
1610
|
-
EOS
|
1611
|
-
).should == "3"
|
1612
|
-
@nendo.evalStr( <<EOS
|
1613
|
-
(define total 1)
|
1614
|
-
(and 1
|
1615
|
-
2
|
1616
|
-
false
|
1617
|
-
(set! total (+ total 2))
|
1618
|
-
(set! total (+ total 3))
|
1619
|
-
5)
|
1620
|
-
total
|
1621
|
-
EOS
|
1622
|
-
).should == "1"
|
1623
|
-
@nendo.evalStr( " (apply + 100 '()) " ).should == "100"
|
1624
|
-
@nendo.evalStr( " (apply + '(1 2)) " ).should == "3"
|
1625
|
-
@nendo.evalStr( " (apply + 1 2 '(3)) " ).should == "6"
|
1626
|
-
@nendo.evalStr( " (apply + 1 2 '(3 4)) " ).should == "10"
|
1627
|
-
@nendo.evalStr( " (apply + 1 2 3 '(4)) " ).should == "10"
|
1628
|
-
@nendo.evalStr( ' (apply + \'("a" "b" "c")) ' ).should == '"abc"'
|
1629
|
-
@nendo.evalStr( " (range 5) " ).should == "(0 1 2 3 4)"
|
1630
|
-
@nendo.evalStr( " (range 5 1) " ).should == "(1 2 3 4 5)"
|
1631
|
-
@nendo.evalStr( " (range 5 2) " ).should == "(2 3 4 5 6)"
|
1632
|
-
@nendo.evalStr( " (iota 5 2) " ).should == "(2 3 4 5 6)"
|
1633
|
-
@nendo.evalStr( " (apply + (range 11)) " ).should == "55"
|
1634
|
-
@nendo.evalStr( " (apply + (map (lambda (x) (+ x 1)) (range 10))) " ).should == "55"
|
1635
|
-
@nendo.evalStr( " (apply + (append (range 11) '(100))) " ).should == "155"
|
1636
|
-
@nendo.evalStr( " (apply cons '(1 2)) " ).should == "(1 . 2)"
|
1637
|
-
@nendo.evalStr( " (apply list '(1 2)) " ).should == "(1 2)"
|
1638
|
-
@nendo.evalStr( " (apply list (list 1 '())) " ).should == "(1 ())"
|
1639
|
-
@nendo.evalStr( " (apply list (list 1 (cdr '(100)))) " ).should == "(1 ())"
|
1640
|
-
@nendo.evalStr( " (map (lambda (x) 1) '()) " ).should == "()"
|
1641
|
-
@nendo.evalStr( " (map (lambda (x) 1) (to-list '#())) " ).should == "()"
|
1642
|
-
@nendo.evalStr( " (map (lambda (x) (* x 2)) '(1 2 3)) " ).should == "(2 4 6)"
|
1643
|
-
@nendo.evalStr( " (map (lambda (x) (+ x 1)) '(1 2 3)) " ).should == "(2 3 4)"
|
1644
|
-
@nendo.evalStr( <<EOS
|
1645
|
-
(map
|
1646
|
-
(lambda (a b) (+ a b))
|
1647
|
-
'(1 2 3)
|
1648
|
-
'(10 20 30))
|
1649
|
-
EOS
|
1650
|
-
).should == "(11 22 33)"
|
1651
|
-
@nendo.evalStr( <<EOS
|
1652
|
-
(map
|
1653
|
-
(lambda (a b)
|
1654
|
-
(- b a))
|
1655
|
-
'(1 2 3)
|
1656
|
-
'(10 20 30))
|
1657
|
-
EOS
|
1658
|
-
).should == "(9 18 27)"
|
1659
|
-
@nendo.evalStr( <<EOS
|
1660
|
-
(map
|
1661
|
-
(lambda (a b c)
|
1662
|
-
(+ a b c))
|
1663
|
-
'(1 2 3)
|
1664
|
-
'(10 20 30)
|
1665
|
-
'(100 200 300))
|
1666
|
-
EOS
|
1667
|
-
).should == "(111 222 333)"
|
1668
|
-
@nendo.evalStr( <<EOS
|
1669
|
-
(define _result
|
1670
|
-
(map
|
1671
|
-
(lambda (x)
|
1672
|
-
(* x 2))
|
1673
|
-
(range 10000 1)))
|
1674
|
-
(list
|
1675
|
-
(first _result)
|
1676
|
-
(second _result)
|
1677
|
-
(last-pair _result))
|
1678
|
-
EOS
|
1679
|
-
).should == "(2 4 (20000))"
|
1680
|
-
|
1681
|
-
@nendo.evalStr( <<EOS
|
1682
|
-
(list
|
1683
|
-
(list* 1)
|
1684
|
-
(list* 1 2)
|
1685
|
-
(list* 1 2 3)
|
1686
|
-
(list* 1 2 3 4))
|
1687
|
-
EOS
|
1688
|
-
).should == "(1 (1 . 2) (1 2 . 3) (1 2 3 . 4))"
|
1689
|
-
|
1690
|
-
@nendo.evalStr( <<EOS
|
1691
|
-
(list
|
1692
|
-
(list* '())
|
1693
|
-
(list* 1 '())
|
1694
|
-
(list* 1 2 '())
|
1695
|
-
(list* 1 2 3 '()))
|
1696
|
-
EOS
|
1697
|
-
).should == "(() (1) (1 2) (1 2 3))"
|
1698
|
-
|
1699
|
-
@nendo.evalStr( <<EOS
|
1700
|
-
(list
|
1701
|
-
(list* (cdr '(100)))
|
1702
|
-
(list* 1 (cdr '(100)))
|
1703
|
-
(list* 1 2 (cdr '(100)))
|
1704
|
-
(list* 1 2 3 (cdr '(100))))
|
1705
|
-
EOS
|
1706
|
-
).should == "(() (1) (1 2) (1 2 3))"
|
1707
|
-
|
1708
|
-
@nendo.evalStr( <<EOS
|
1709
|
-
(list
|
1710
|
-
(list* '())
|
1711
|
-
(list* '() '())
|
1712
|
-
(list* '() '() '())
|
1713
|
-
(list* '() '() '() '()))
|
1714
|
-
EOS
|
1715
|
-
).should == "(() (()) (() ()) (() () ()))"
|
1716
|
-
|
1717
|
-
@nendo.evalStr( <<EOS
|
1718
|
-
(define _lst '())
|
1719
|
-
(for-each
|
1720
|
-
(lambda (x)
|
1721
|
-
(set! _lst (cons 1 _lst)))
|
1722
|
-
'())
|
1723
|
-
_lst
|
1724
|
-
EOS
|
1725
|
-
).should == "()"
|
1726
|
-
@nendo.evalStr( <<EOS
|
1727
|
-
(define _lst '())
|
1728
|
-
(for-each
|
1729
|
-
(lambda (x)
|
1730
|
-
(set! _lst (cons (* x 2) _lst)))
|
1731
|
-
'(1 2 3))
|
1732
|
-
_lst
|
1733
|
-
EOS
|
1734
|
-
).should == "(6 4 2)"
|
1735
|
-
@nendo.evalStr( <<EOS
|
1736
|
-
(define _lst '())
|
1737
|
-
(for-each
|
1738
|
-
(lambda (x)
|
1739
|
-
(set! _lst (cons (+ x 1) _lst)))
|
1740
|
-
'(1 2 3))
|
1741
|
-
_lst
|
1742
|
-
EOS
|
1743
|
-
).should == "(4 3 2)"
|
1744
|
-
@nendo.evalStr( <<EOS
|
1745
|
-
(define _lst '())
|
1746
|
-
(for-each
|
1747
|
-
(lambda (a b)
|
1748
|
-
(set! _lst (cons (cons a b) _lst)))
|
1749
|
-
'(1 2 3)
|
1750
|
-
'(10 20 30))
|
1751
|
-
_lst
|
1752
|
-
EOS
|
1753
|
-
).should ==
|
1754
|
-
"((3 . 30) (2 . 20) (1 . 10))"
|
1755
|
-
@nendo.evalStr( <<EOS
|
1756
|
-
(define _cnt 0)
|
1757
|
-
(for-each
|
1758
|
-
(lambda (x)
|
1759
|
-
(set! _cnt (+ _cnt 1)))
|
1760
|
-
(range 10000))
|
1761
|
-
_cnt
|
1762
|
-
EOS
|
1763
|
-
).should == "10000"
|
1764
|
-
@nendo.evalStr( " (filter (lambda (x) x) '()) " ).should == "()"
|
1765
|
-
@nendo.evalStr( " (filter (lambda (x) (= x 100)) '(1 2 3)) " ).should == "()"
|
1766
|
-
@nendo.evalStr( " (filter (lambda (x) (= x 2)) '(1 2 3)) " ).should == "(2)"
|
1767
|
-
@nendo.evalStr( " (filter (lambda (x) (not (= x 2))) '(1 2 3)) " ).should == "(1 3)"
|
1768
|
-
@nendo.evalStr( " (filter (lambda (x) (if (= x 2) (* x 100) false)) '(1 2 3)) " ).should == "(2)"
|
1769
|
-
@nendo.evalStr( " (find (lambda (x) (= x 100)) '(1 2 3)) " ).should == "#f"
|
1770
|
-
@nendo.evalStr( " (find (lambda (x) (= x 2)) '(1 2 3)) " ).should == "2"
|
1771
|
-
@nendo.evalStr( " (find (lambda (x) (not (= x 2))) '(1 2 3)) " ).should == "1"
|
1772
|
-
@nendo.evalStr( " (find (lambda (x) (if (= x 2) (* x 100) false)) '(1 2 3)) " ).should == "2"
|
1773
|
-
@nendo.evalStr( " (eq? find any)" ).should == "#f"
|
1774
|
-
@nendo.evalStr( " (find even? '(1 2 3)) " ).should == "2"
|
1775
|
-
@nendo.evalStr( " (filter-map (lambda (x) x) '()) " ).should == "()"
|
1776
|
-
@nendo.evalStr( " (filter-map (lambda (x) (= x 100)) '(1 2 3)) " ).should == "()"
|
1777
|
-
@nendo.evalStr( " (filter-map (lambda (x) (= x 2)) '(1 2 3)) " ).should == "(#t)"
|
1778
|
-
@nendo.evalStr( " (filter-map (lambda (x) (not (= x 2))) '(1 2 3)) " ).should == "(#t #t)"
|
1779
|
-
@nendo.evalStr( " (fold (lambda (x y) x y) 0 '()) " ).should == "0"
|
1780
|
-
@nendo.evalStr( " (fold (lambda (x y) (+ x y)) 0 '(1 2 3)) " ).should == "6"
|
1781
|
-
@nendo.evalStr( " (fold (lambda (x y) (+ x y)) 1 '(2 3 4)) " ).should == "10"
|
1782
|
-
@nendo.evalStr( " (fold (lambda (x y) (* x y)) 1 '(2 3 4 5)) " ).should == "120"
|
1783
|
-
@nendo.evalStr( " (fold (lambda (x y) (* x y)) 0 '(2 3 4 5)) " ).should == "0"
|
1784
|
-
@nendo.evalStr( <<EOS
|
1785
|
-
(filter-map
|
1786
|
-
(lambda (x)
|
1787
|
-
(if (= x 2) (* x 10) false))
|
1788
|
-
'(1 2 3))
|
1789
|
-
EOS
|
1790
|
-
).should == "(20)"
|
1791
|
-
@nendo.evalStr( <<EOS
|
1792
|
-
(filter-map
|
1793
|
-
(lambda (x)
|
1794
|
-
(if (not (= x 2)) (* x 10) false))
|
1795
|
-
'(1 2 3))
|
1796
|
-
EOS
|
1797
|
-
).should == "(10 30)"
|
1798
|
-
@nendo.evalStr( " (any even? '(1 2 3)) " ).should == "#t"
|
1799
|
-
@nendo.evalStr( " (any even? '(1 3)) " ).should == "#f"
|
1800
|
-
@nendo.evalStr( " (any odd? '(1 3)) " ).should == "#t"
|
1801
|
-
@nendo.evalStr( " (any (lambda (x) x) '(1 2 3)) " ).should == "1"
|
1802
|
-
@nendo.evalStr( <<EOS
|
1803
|
-
(let1 result '()
|
1804
|
-
(do
|
1805
|
-
((i 0 (+ i 1)))
|
1806
|
-
((< 10 i) #f)
|
1807
|
-
(set! result (cons i result)))
|
1808
|
-
(reverse result))
|
1809
|
-
EOS
|
1810
|
-
).should == "(0 1 2 3 4 5 6 7 8 9 10)"
|
1811
|
-
@nendo.evalStr( <<EOS
|
1812
|
-
(let1 result '()
|
1813
|
-
(do
|
1814
|
-
((i 0 (+ i 3)))
|
1815
|
-
((< (* 3 10) i) #f)
|
1816
|
-
(set! result (cons i result)))
|
1817
|
-
(reverse result))
|
1818
|
-
EOS
|
1819
|
-
).should == "(0 3 6 9 12 15 18 21 24 27 30)"
|
1820
|
-
end
|
1821
|
-
end
|
1822
|
-
|
1823
|
-
describe Nendo, "when use raise function " do
|
1824
|
-
before do
|
1825
|
-
@nendo = Nendo::Core.new()
|
1826
|
-
@nendo.setDisplayErrors( false )
|
1827
|
-
@nendo.loadInitFile
|
1828
|
-
end
|
1829
|
-
it "should" do
|
1830
|
-
lambda { @nendo.evalStr( ' (%raise TypeError "typeError" "nendo_spec.rb:1 typeError" ) ' ) }.should raise_error( TypeError )
|
1831
|
-
lambda { @nendo.evalStr( ' (%raise ArgumentError "argumentError" "nendo_spec.rb:1 argumentError") ' ) }.should raise_error( ArgumentError )
|
1832
|
-
lambda { @nendo.evalStr( ' (raise TypeError "typeError" ) ' ) }.should raise_error( TypeError )
|
1833
|
-
lambda { @nendo.evalStr( ' (raise ArgumentError "argumentError" ) ' ) }.should raise_error( ArgumentError )
|
1834
|
-
lambda { @nendo.evalStr( ' (raise TypeError ) ' ) }.should raise_error( TypeError )
|
1835
|
-
lambda { @nendo.evalStr( ' (raise ArgumentError ) ' ) }.should raise_error( ArgumentError )
|
1836
|
-
end
|
1837
|
-
end
|
1838
|
-
|
1839
|
-
describe Nendo, "when use values " do
|
1840
|
-
before do
|
1841
|
-
@nendo = Nendo::Core.new()
|
1842
|
-
@nendo.setDisplayErrors( false )
|
1843
|
-
@nendo.loadInitFile
|
1844
|
-
end
|
1845
|
-
it "should" do
|
1846
|
-
@nendo.evalStr( " (values? (make-values '())) " ).should == "#t"
|
1847
|
-
lambda { @nendo.evalStr( " (make-values '(1))) " ) }.should raise_error(ArgumentError)
|
1848
|
-
@nendo.evalStr( " (values? (make-values '(1 2))) " ).should == "#t"
|
1849
|
-
@nendo.evalStr( " (values? (make-values '(1 2 3))) " ).should == "#t"
|
1850
|
-
@nendo.evalStr( " (values? (values)) " ).should == "#t"
|
1851
|
-
@nendo.evalStr( " (values? (values 1)) " ).should == "#f"
|
1852
|
-
@nendo.evalStr( " (values 1) " ).should == "1"
|
1853
|
-
@nendo.evalStr( " (values? (values 1 2)) " ).should == "#t"
|
1854
|
-
@nendo.evalStr( " (values? (values 1 2 3)) " ).should == "#t"
|
1855
|
-
@nendo.evalStr( " (values? (values '(a) \"b\" '(\"C\"))) " ).should == "#t"
|
1856
|
-
@nendo.evalStr( " (values-values (values)) " ).should == "()"
|
1857
|
-
lambda { @nendo.evalStr( " (values-values (values 1)) " ) }.should raise_error(TypeError)
|
1858
|
-
@nendo.evalStr( " (values-values (values 1 2)) " ).should == "(1 2)"
|
1859
|
-
@nendo.evalStr( " (values-values (values 1 2 3)) " ).should == "(1 2 3)"
|
1860
|
-
@nendo.evalStr( " (values-values (values '(a) \"b\" '(\"C\"))) " ).should == '((a) "b" ("C"))'
|
1861
|
-
@nendo.evalStr( <<EOS
|
1862
|
-
(call-with-values
|
1863
|
-
(lambda () (values 4 5))
|
1864
|
-
(lambda (a b) b))
|
1865
|
-
EOS
|
1866
|
-
).should == "5"
|
1867
|
-
@nendo.evalStr( <<EOS
|
1868
|
-
(call-with-values
|
1869
|
-
(lambda () (values 1 2))
|
1870
|
-
cons)
|
1871
|
-
EOS
|
1872
|
-
).should == "(1 . 2)"
|
1873
|
-
@nendo.evalStr( <<EOS
|
1874
|
-
(call-with-values
|
1875
|
-
(lambda () (values 10))
|
1876
|
-
list)
|
1877
|
-
EOS
|
1878
|
-
).should == "(10)"
|
1879
|
-
@nendo.evalStr( <<EOS
|
1880
|
-
(call-with-values
|
1881
|
-
(lambda () (values))
|
1882
|
-
list)
|
1883
|
-
EOS
|
1884
|
-
).should == "()"
|
1885
|
-
@nendo.evalStr( " (call-with-values * -) " ).should == "-1"
|
1886
|
-
@nendo.evalStr( " (receive (a) (values 10) (list a)) " ).should == "(10)"
|
1887
|
-
@nendo.evalStr( " (receive (a b) (values 10 20) (list a b)) " ).should == "(10 20)"
|
1888
|
-
@nendo.evalStr( " (receive (a b c) (values 10 20 30) (list a b c)) " ).should == "(10 20 30)"
|
1889
|
-
@nendo.evalStr( " (receive (a . b) (values 10) (list a b)) " ).should == "(10 ())"
|
1890
|
-
@nendo.evalStr( " (receive (a . b) (values 10 20) (list a b)) " ).should == "(10 (20))"
|
1891
|
-
@nendo.evalStr( " (receive (a . b) (values 10 20 30) (list a b)) " ).should == "(10 (20 30))"
|
1892
|
-
@nendo.evalStr( " (receive all (values) all) " ).should == "()"
|
1893
|
-
@nendo.evalStr( " (receive all (values 10) all) " ).should == "(10)"
|
1894
|
-
@nendo.evalStr( " (receive all (values 10 20) all) " ).should == "(10 20)"
|
1895
|
-
@nendo.evalStr( " (receive all (values 10 20 30) all) " ).should == "(10 20 30)"
|
1896
|
-
@nendo.evalStr( " (receive (a b) (values '(1) '(2)) (list a b)) " ).should == "((1) (2))"
|
1897
|
-
@nendo.evalStr( " (receive (a b) (values '() '(2)) (list a b)) " ).should == "(() (2))"
|
1898
|
-
@nendo.evalStr( " (receive (a b) (values '(1) '()) (list a b)) " ).should == "((1) ())"
|
1899
|
-
@nendo.evalStr( " (receive (a b) (values #t #t) (cons a b)) " ).should == "(#t . #t)"
|
1900
|
-
@nendo.evalStr( " (receive (a b) (values #t #f) (cons a b)) " ).should == "(#t . #f)"
|
1901
|
-
@nendo.evalStr( " (receive (a b) (values nil #t) (cons a b)) " ).should == "(nil . #t)"
|
1902
|
-
@nendo.evalStr( " (receive (a b) (values nil #f) (cons a b)) " ).should == "(nil . #f)"
|
1903
|
-
@nendo.evalStr( " (receive (a b) (values nil nil) (cons a b)) " ).should == "(nil . nil)"
|
1904
|
-
lambda { @nendo.evalStr( " (receive (a) (values) (list a)) " ) }.should raise_error( ArgumentError, /wrong number of arguments/ )
|
1905
|
-
lambda { @nendo.evalStr( <<EOS
|
1906
|
-
(map
|
1907
|
-
(lambda (a) a))
|
1908
|
-
EOS
|
1909
|
-
) }.should raise_error( ArgumentError, /wrong number of arguments/ )
|
1910
|
-
lambda { @nendo.evalStr( <<EOS
|
1911
|
-
(map
|
1912
|
-
(lambda () 1)
|
1913
|
-
'(1 2 3))
|
1914
|
-
EOS
|
1915
|
-
) }.should raise_error( ArgumentError, /wrong number of arguments/ )
|
1916
|
-
lambda { @nendo.evalStr( <<EOS
|
1917
|
-
(map
|
1918
|
-
(lambda (a) a)
|
1919
|
-
'(1 2 3)
|
1920
|
-
'(10 20 30))
|
1921
|
-
EOS
|
1922
|
-
) }.should raise_error( ArgumentError, /wrong number of arguments/ )
|
1923
|
-
lambda { @nendo.evalStr( <<EOS
|
1924
|
-
(map
|
1925
|
-
(lambda (a b) (+ a b))
|
1926
|
-
'(1 2 3))
|
1927
|
-
EOS
|
1928
|
-
) }.should raise_error( ArgumentError, /wrong number of arguments/ )
|
1929
|
-
end
|
1930
|
-
end
|
1931
|
-
|
1932
|
-
describe Nendo, "when toplevel variable was overwritten " do
|
1933
|
-
before do
|
1934
|
-
@nendo = Nendo::Core.new()
|
1935
|
-
@nendo.setDisplayErrors( false )
|
1936
|
-
@nendo.loadInitFile
|
1937
|
-
end
|
1938
|
-
it "should" do
|
1939
|
-
@nendo.evalStr( " (define a 1) a" ).should == "1"
|
1940
|
-
lambda { @nendo.evalStr( " (define (c-func) (+ a b)) (c-func)" ) }.should raise_error( NameError )
|
1941
|
-
@nendo.evalStr( " (define b 2) b" ).should == "2"
|
1942
|
-
@nendo.evalStr( " (c-func) " ).should == "3"
|
1943
|
-
@nendo.evalStr( " (define b 20) " ).should == "20"
|
1944
|
-
@nendo.evalStr( " (c-func) " ).should == "21"
|
1945
|
-
|
1946
|
-
@nendo.evalStr( " (define (a-func) 10) (a-func)" ).should == "10"
|
1947
|
-
lambda { @nendo.evalStr( " (define (c-func) (* (a-func) (b-func))) (c-func)" ) }.should raise_error( NameError )
|
1948
|
-
@nendo.evalStr( " (define (b-func) 20) (b-func)" ).should == "20"
|
1949
|
-
@nendo.evalStr( " (c-func) " ).should == "200"
|
1950
|
-
@nendo.evalStr( " (define (b-func) 200) (b-func)" ).should == "200"
|
1951
|
-
@nendo.evalStr( " (c-func) " ).should == "2000"
|
1952
|
-
end
|
1953
|
-
end
|
1954
|
-
|
1955
|
-
describe Nendo, "when use quasiquote macro " do
|
1956
|
-
before do
|
1957
|
-
@nendo = Nendo::Core.new()
|
1958
|
-
@nendo.loadInitFile
|
1959
|
-
end
|
1960
|
-
it "should" do
|
1961
|
-
@nendo.evalStr( " '(a b c) " ).should == "(a b c)"
|
1962
|
-
@nendo.evalStr( " `(a b c) " ).should == "(a b c)"
|
1963
|
-
@nendo.evalStr( " `(1 2 3) " ).should == "(1 2 3)"
|
1964
|
-
@nendo.evalStr( " (set! a 3) `(1 2 ,a) " ).should == "(1 2 3)"
|
1965
|
-
@nendo.evalStr( " (set! a 3) `(1 2 ,@(list a)) " ).should == "(1 2 3)"
|
1966
|
-
@nendo.evalStr( " (set! a 3) `(1 ,@(list 2 a)) " ).should == "(1 2 3)"
|
1967
|
-
@nendo.evalStr( " (set! a 11) `,a " ).should == "11"
|
1968
|
-
@nendo.evalStr( " (set! a 12) ``,a " ).should == "(quasiquote (unquote a))"
|
1969
|
-
@nendo.evalStr( ' (define str "string") str ' ).should == '"string"'
|
1970
|
-
@nendo.evalStr( ' `(,str) ' ).should == '("string")'
|
1971
|
-
@nendo.evalStr( ' `("STRING") ' ).should == '("STRING")'
|
1972
|
-
@nendo.evalStr( ' `(,str "STRING") ' ).should == '("string" "STRING")'
|
1973
|
-
@nendo.evalStr( ' `("STRING" ,str) ' ).should == '("STRING" "string")'
|
1974
|
-
@nendo.evalStr( ' (car `("STRING" ,str)) ' ).should == '"STRING"'
|
1975
|
-
@nendo.evalStr( ' (second `("STRING" ,str)) ' ).should == '"string"'
|
1976
|
-
@nendo.evalStr( ' (caar `(("STRING" ,str))) ' ).should == '"STRING"'
|
1977
|
-
@nendo.evalStr( ' (string-join `("A" "B" "C" "D")) ' ).should == '"ABCD"'
|
1978
|
-
@nendo.evalStr( " `(list ,(+ 1 2) 4) " ).should == "(list 3 4)"
|
1979
|
-
@nendo.evalStr( " (let ((name 'a)) `(list ,name ',name)) " ).should == "(list a (quote a))"
|
1980
|
-
@nendo.evalStr( " `(a `(b ,(+ 1 2) ,(foo ,(+ 1 3) d) e) f) " ).should == "(a (quasiquote (b (unquote (+ 1 2)) (unquote (foo 4 d)) e)) f)"
|
1981
|
-
@nendo.evalStr( " `(( foo ,(- 10 3)) ,@(cdr '(c)) . ,(car '(cons))) " ).should == "((foo 7) . cons)"
|
1982
|
-
end
|
1983
|
-
end
|
1984
|
-
|
1985
|
-
describe Nendo, "when use macros made by quasiquote. " do
|
1986
|
-
before do
|
1987
|
-
@nendo = Nendo::Core.new()
|
1988
|
-
@nendo.loadInitFile
|
1989
|
-
end
|
1990
|
-
it "should" do
|
1991
|
-
@nendo.evalStr( " (case (length '(1 )) ((1) \"one\") ((2) \"two\") (else \"else\")) " ).should == '"one"'
|
1992
|
-
@nendo.evalStr( " (case (length '(1 2 )) ((1) \"one\") ((2) \"two\") (else \"else\")) " ).should == '"two"'
|
1993
|
-
@nendo.evalStr( " (case (length '(1 2 3 )) ((1) \"one\") ((2) \"two\") (else \"else\")) " ).should == '"else"'
|
1994
|
-
@nendo.evalStr( " (case (length '(1 2 3 4)) ((1) \"one\") ((2) \"two\") (else \"else\")) " ).should == '"else"'
|
1995
|
-
@nendo.evalStr( " (case 100 ((1) \"one\") ((2) \"two\") (else \"else\")) " ).should == '"else"'
|
1996
|
-
@nendo.evalStr( " (case (car '(a b 1)) ((a) 'a) ((b) 'b) (else 'else)) " ).should == 'a'
|
1997
|
-
@nendo.evalStr( " (case (cadr '(a b 1)) ((a) 'a) ((b) 'b) (else 'else)) " ).should == 'b'
|
1998
|
-
@nendo.evalStr( " (case (caddr '(a b 1)) ((a b) 'a) ((1 2) 'number) (else 'else)) " ).should == 'number'
|
1999
|
-
@nendo.evalStr( " (case (cadddr '(a b 1 2)) ((a b) 'a) ((1 2) 'number) (else 'else)) " ).should == 'number'
|
2000
|
-
@nendo.evalStr( " (let* ((a 1) (b (+ a 2))) (cons a b)) " ).should == "(1 . 3)"
|
2001
|
-
@nendo.evalStr( " (let* ((a 10) (b (* a 2))) (cons a b)) " ).should == "(10 . 20)"
|
2002
|
-
@nendo.evalStr( " (let* ((a 10) (b (* a 2)) (c (* b 3))) (list a b c)) " ).should == "(10 20 60)"
|
2003
|
-
@nendo.evalStr( " (begin0 1 2 3) " ).should == "1"
|
2004
|
-
@nendo.evalStr( <<EOS
|
2005
|
-
(define a 2)
|
2006
|
-
(begin0 (set! a (* a 2))
|
2007
|
-
(set! a (* a 2))
|
2008
|
-
(set! a (* a 2)))
|
2009
|
-
EOS
|
2010
|
-
).should == "4"
|
2011
|
-
@nendo.evalStr( " (begin0 100) " ).should == "100"
|
2012
|
-
@nendo.evalStr( " (begin0) " ).should == "#f"
|
2013
|
-
@nendo.evalStr( <<EOS
|
2014
|
-
(receive (a b)
|
2015
|
-
(begin0
|
2016
|
-
(values 1 2)
|
2017
|
-
(values 10 20)
|
2018
|
-
(values 100 200))
|
2019
|
-
(cons a b))
|
2020
|
-
EOS
|
2021
|
-
).should == "(1 . 2)"
|
2022
|
-
@nendo.evalStr( " (macroexpand '(when #t (print \"1\") (print \"2\"))) " ).should == '(if #t (begin (print "1") (print "2")))'
|
2023
|
-
@nendo.evalStr( " (macroexpand '(unless #t (print \"1\") (print \"2\"))) " ).should == '(if (not #t) (begin (print "1") (print "2")))'
|
2024
|
-
@nendo.evalStr( " (macroexpand '(if-let1 a #t (print \"T\") (print \"F\"))) " ).should == '(%let ((a #t)) (if a (print "T") (print "F")))'
|
2025
|
-
@nendo.evalStr( " (let1 count 0 (when #t (set! count (+ count 1)) (set! count (+ count 1))) count) " ).should == "2"
|
2026
|
-
@nendo.evalStr( " (let1 count 0 (when #f (set! count (+ count 1)) (set! count (+ count 1))) count) " ).should == "0"
|
2027
|
-
@nendo.evalStr( " (let1 count 0 (unless #t (set! count (+ count 1)) (set! count (+ count 1))) count) " ).should == "0"
|
2028
|
-
@nendo.evalStr( " (let1 count 0 (unless #f (set! count (+ count 1)) (set! count (+ count 1))) count) " ).should == "2"
|
2029
|
-
@nendo.evalStr( " (if-let1 m (rxmatch #/([0-9]+)/ \"abc100abc\") (rxmatch-substring m 1)) " ).should == '"100"'
|
2030
|
-
@nendo.evalStr( " (macroexpand '#?.) " ).should == '"(string):1"'
|
2031
|
-
@nendo.evalStr( " (macroexpand '(begin 1 2 #?. 4 5)) " ).should == '(begin 1 2 "(string):1" 4 5)'
|
2032
|
-
end
|
2033
|
-
end
|
2034
|
-
|
2035
|
-
describe Nendo, "when use define and lambda macro " do
|
2036
|
-
before do
|
2037
|
-
@nendo = Nendo::Core.new()
|
2038
|
-
@nendo.loadInitFile
|
2039
|
-
end
|
2040
|
-
it "should" do
|
2041
|
-
@nendo.evalStr( <<EOS
|
2042
|
-
(macroexpand
|
2043
|
-
'(define (main argv)
|
2044
|
-
(newline)
|
2045
|
-
0))
|
2046
|
-
EOS
|
2047
|
-
).should == "(define main (lambda (argv) (newline) 0))"
|
2048
|
-
@nendo.evalStr( <<EOS
|
2049
|
-
(macroexpand
|
2050
|
-
'(define (main argv)
|
2051
|
-
(define (foo x) x)
|
2052
|
-
(+ 10 20)
|
2053
|
-
0
|
2054
|
-
(foo 111)))
|
2055
|
-
EOS
|
2056
|
-
).should == "(define main (lambda (argv) (letrec ((foo (lambda (x) x))) (+ 10 20) 0 (foo 111))))"
|
2057
|
-
@nendo.evalStr( <<EOS
|
2058
|
-
(macroexpand
|
2059
|
-
'(define (main argv)
|
2060
|
-
(define result '())
|
2061
|
-
(define (foo x) x)
|
2062
|
-
(define val 0)
|
2063
|
-
(define (bar x)
|
2064
|
-
(+ val 10))))
|
2065
|
-
EOS
|
2066
|
-
).should == "(define main (lambda (argv) (letrec ((result (quote ())) (foo (lambda (x) x)) (val 0) (bar (lambda (x) (+ val 10)))))))"
|
2067
|
-
@nendo.evalStr( <<EOS
|
2068
|
-
(define (main . argv)
|
2069
|
-
(define (foo x) x)
|
2070
|
-
(+ 10 20)
|
2071
|
-
0
|
2072
|
-
(foo 111))
|
2073
|
-
(main)
|
2074
|
-
EOS
|
2075
|
-
).should == "111"
|
2076
|
-
@nendo.evalStr( <<EOS
|
2077
|
-
(define (main argv)
|
2078
|
-
(define (foo1 x) (+ 1 x))
|
2079
|
-
(define (foo2 x) (+ 2 x))
|
2080
|
-
(*
|
2081
|
-
(foo1 20)
|
2082
|
-
(foo2 30)))
|
2083
|
-
(main '())
|
2084
|
-
EOS
|
2085
|
-
).should == "672"
|
2086
|
-
@nendo.evalStr( " (macroexpand '(define (main argv) 0)) " ).should == "(define main (lambda (argv) 0))"
|
2087
|
-
end
|
2088
|
-
end
|
2089
|
-
|
2090
|
-
describe Nendo, "when use macro macro " do
|
2091
|
-
before do
|
2092
|
-
@nendo = Nendo::Core.new()
|
2093
|
-
@nendo.loadInitFile
|
2094
|
-
end
|
2095
|
-
it "should" do
|
2096
|
-
@nendo.evalStr( <<EOS
|
2097
|
-
(define inc!-macro
|
2098
|
-
(macro (x)
|
2099
|
-
(+ x 1)))
|
2100
|
-
EOS
|
2101
|
-
).should match( /Nendo::LispMacro/ )
|
2102
|
-
@nendo.evalStr( " (inc!-macro 10) " ).should == "11"
|
2103
|
-
@nendo.evalStr( <<EOS
|
2104
|
-
(define dec!-macro
|
2105
|
-
(macro (x)
|
2106
|
-
(define (dec! v)
|
2107
|
-
(- v 1))
|
2108
|
-
(dec! x)))
|
2109
|
-
EOS
|
2110
|
-
).should match( /Nendo::LispMacro/ )
|
2111
|
-
@nendo.evalStr( " (dec!-macro 10) " ).should == "9"
|
2112
|
-
@nendo.evalStr( " (. (dec!-macro 10) class) " ).should == 'Fixnum'
|
2113
|
-
end
|
2114
|
-
end
|
2115
|
-
|
2116
|
-
describe Nendo, "when use macros expand some syntax. " do
|
2117
|
-
before do
|
2118
|
-
@nendo = Nendo::Core.new()
|
2119
|
-
@nendo.loadInitFile
|
2120
|
-
end
|
2121
|
-
it "should" do
|
2122
|
-
@nendo.evalStr( "" +
|
2123
|
-
" (let1 total 0" +
|
2124
|
-
" (let loop ((cnt 10))" +
|
2125
|
-
" (if (< 0 cnt)" +
|
2126
|
-
" (begin" +
|
2127
|
-
" (set! total (+ total cnt))" +
|
2128
|
-
" (loop (- cnt 1)))))" +
|
2129
|
-
" total)" +
|
2130
|
-
"" ).should == "55"
|
2131
|
-
@nendo.evalStr( "" +
|
2132
|
-
"(let label ((a 2)" +
|
2133
|
-
" (b 3))" +
|
2134
|
-
" (if (<= 9 (+ a b))" +
|
2135
|
-
" (* a b)" +
|
2136
|
-
" (label 4 5)))" +
|
2137
|
-
"" ).should == "20"
|
2138
|
-
@nendo.evalStr( "" +
|
2139
|
-
"(macroexpand '(let loop ((x 1)) "+
|
2140
|
-
" 1"+
|
2141
|
-
" 2"+
|
2142
|
-
" (loop 100)))" ).should == "(letrec ((loop (lambda (x) 1 2 (loop 100)))) (loop 1))"
|
2143
|
-
end
|
2144
|
-
end
|
2145
|
-
|
2146
|
-
describe Nendo, "when occur illegal syntax. " do
|
2147
|
-
before do
|
2148
|
-
@nendo = Nendo::Core.new()
|
2149
|
-
@nendo.loadInitFile
|
2150
|
-
end
|
2151
|
-
it "should" do
|
2152
|
-
|
2153
|
-
lambda { @nendo.evalStr( <<EOS
|
2154
|
-
(let abc 1 ;; let1 style form is illegal syntax for let form.
|
2155
|
-
(print abc))
|
2156
|
-
EOS
|
2157
|
-
) }.should raise_error( SyntaxError, /^named let requires/ )
|
2158
|
-
|
2159
|
-
lambda { @nendo.evalStr( "(let 1)" ) }.should raise_error( SyntaxError, /^let requires/ )
|
2160
|
-
lambda { @nendo.evalStr( "(let ())" ) }.should raise_error( SyntaxError, /^let requires/ )
|
2161
|
-
@nendo.evalStr( "(let () 1)" ).should == '1'
|
2162
|
-
lambda { @nendo.evalStr( "(let loop 1)" ) }.should raise_error( SyntaxError, /^named let requires/ )
|
2163
|
-
lambda { @nendo.evalStr( "(let loop ())" ) }.should raise_error( SyntaxError, /^named let requires/ )
|
2164
|
-
@nendo.evalStr( "(let loop () 1)" ).should == '1'
|
2165
|
-
|
2166
|
-
lambda { @nendo.evalStr( "(let1)" ) }.should raise_error( SyntaxError, /^let1 requires/ )
|
2167
|
-
lambda { @nendo.evalStr( "(let1 a)" ) }.should raise_error( SyntaxError, /^let1 requires/ )
|
2168
|
-
lambda { @nendo.evalStr( "(let1 a 1)" ) }.should raise_error( SyntaxError, /^let1 requires/ )
|
2169
|
-
lambda { @nendo.evalStr( "(let1 (a 1) (print a))" ) }.should raise_error( SyntaxError, /^let1 requires/ )
|
2170
|
-
lambda { @nendo.evalStr( "(let1 ((a 1)) (print a))" ) }.should raise_error( SyntaxError, /^let1 requires/ )
|
2171
|
-
@nendo.evalStr( "(let1 a 123 a)" ).should == '123'
|
2172
|
-
@nendo.evalStr( "(let1 b (+ 100 20 3) b)" ).should == '123'
|
2173
|
-
end
|
2174
|
-
end
|
2175
|
-
|
2176
|
-
|
2177
|
-
describe Nendo, "when use dot-operator (.) macro " do
|
2178
|
-
before do
|
2179
|
-
@nendo = Nendo::Core.new()
|
2180
|
-
@nendo.setDisplayErrors( false )
|
2181
|
-
@nendo.loadInitFile
|
2182
|
-
end
|
2183
|
-
it "should" do
|
2184
|
-
@nendo.evalStr( " (macroexpand '(. a b)) " ).should == "(a.b)"
|
2185
|
-
@nendo.evalStr( " (macroexpand '(. a b c)) " ).should == "(a.b c)"
|
2186
|
-
@nendo.evalStr( " (macroexpand '(. Kernel open)) " ).should == "(Kernel.open)"
|
2187
|
-
lambda { @nendo.evalStr( " (macroexpand '(. open)) " ) }.should raise_error( ArgumentError )
|
2188
|
-
lambda { @nendo.evalStr( " (macroexpand '(. open \"aaa\")) " ) }.should raise_error( TypeError )
|
2189
|
-
@nendo.evalStr( " (macroexpand '(. a size)) " ).should == "(a.size)"
|
2190
|
-
@nendo.evalStr( " (macroexpand '(. (. a size) to_s)) " ).gsub( /_[0-9][0-9][0-9][0-9][0-9]/, "_X0000" ).should == "(%let ((__gensym__fb4e25e49e9fb4e46342224606faf2e3eabf1251_X0000 (a.size))) (__gensym__fb4e25e49e9fb4e46342224606faf2e3eabf1251_X0000.to_s))"
|
2191
|
-
@nendo.evalStr( " (macroexpand '(. (. (. a size) to_s) to_i)) " ).gsub( /_[0-9][0-9][0-9][0-9][0-9]/, "_X0000" ).should == "(%let ((__gensym__fb4e25e49e9fb4e46342224606faf2e3eabf1251_X0000 (%let ((__gensym__fb4e25e49e9fb4e46342224606faf2e3eabf1251_X0000 (a.size))) (__gensym__fb4e25e49e9fb4e46342224606faf2e3eabf1251_X0000.to_s)))) (__gensym__fb4e25e49e9fb4e46342224606faf2e3eabf1251_X0000.to_i))"
|
2192
|
-
lambda { @nendo.evalStr( " (macroexpand '(. (. a size))) " ) }.should raise_error( ArgumentError )
|
2193
|
-
@nendo.evalStr( " (set! str \"str\") str.size " ).should == "3"
|
2194
|
-
@nendo.evalStr( " (set! str \"str\") (. str size) " ).should == "3"
|
2195
|
-
@nendo.evalStr( " (set! str \"str\") (+ 1 (. str size)) " ).should == "4"
|
2196
|
-
@nendo.evalStr( " (set! str \"string\") (. (. str size) to_s) " ).should == '"6"'
|
2197
|
-
@nendo.evalStr( " (to-s str.size) " ).should == '"6"'
|
2198
|
-
@nendo.evalStr( " (to-s 'str.size) " ).should == '"str.size"'
|
2199
|
-
@nendo.evalStr( " (require \"date\") " ).should == "#f"
|
2200
|
-
@nendo.evalStr( " (. (Date.new 0) strftime \"%F %r\") " ).should == '"0000-01-01 12:00:00 AM"'
|
2201
|
-
@nendo.evalStr( " (require \"digest/md5\") " ).should == "#f"
|
2202
|
-
@nendo.evalStr( " (Digest::MD5.hexdigest \"abc\") " ).should == '"900150983cd24fb0d6963f7d28e17f72"'
|
2203
|
-
@nendo.evalStr( " (Digest::MD5.hexdigest \"source text\") " ).should == '"20f79a1416626eeacc0bd9a8db87faa2"'
|
2204
|
-
@nendo.evalStr( " (define a 1) (a.is_a? Fixnum) " ).should == "#t"
|
2205
|
-
@nendo.evalStr( " (define a 1) (a.is_a? Float) " ).should == "#f"
|
2206
|
-
@nendo.evalStr( " (define a 1) (a.is_a? String) " ).should == "#f"
|
2207
|
-
@nendo.evalStr( " (define a 1.1) (a.is_a? Fixnum) " ).should == "#f"
|
2208
|
-
@nendo.evalStr( " (define a 1.1) (a.is_a? Float) " ).should == "#t"
|
2209
|
-
@nendo.evalStr( " (define a 1.1) (a.is_a? String) " ).should == "#f"
|
2210
|
-
@nendo.evalStr( " (define a \"s\") (a.is_a? Fixnum) " ).should == "#f"
|
2211
|
-
@nendo.evalStr( " (define a \"s\") (a.is_a? Float) " ).should == "#f"
|
2212
|
-
@nendo.evalStr( " (define a \"s\") (a.is_a? String) " ).should == "#t"
|
2213
|
-
@nendo.evalStr( ' (equal? (read-from-string "\"100\"") (. 100 to_s)) ' ).should == "#t"
|
2214
|
-
end
|
2215
|
-
end
|
2216
|
-
|
2217
|
-
describe Nendo, "when use dot-operator (.) macro and (&block ...) " do
|
2218
|
-
before do
|
2219
|
-
@nendo = Nendo::Core.new()
|
2220
|
-
@nendo.loadInitFile
|
2221
|
-
end
|
2222
|
-
it "should" do
|
2223
|
-
@nendo.evalStr( " (define arr '#(10 50 40 10000 20 30))" ).should == "#(10 50 40 10000 20 30)"
|
2224
|
-
@nendo.evalStr( " (arr.sort)" ).should == "#(10 20 30 40 50 10000)"
|
2225
|
-
@nendo.evalStr( " (arr.sort (&block (a b) (if (le? a b) 1 -1))) " ).should == "#(10000 50 40 30 20 10)"
|
2226
|
-
@nendo.evalStr( " (arr.sort_by (&block (item) item.to_s)) " ).should == "#(10 10000 20 30 40 50)"
|
2227
|
-
end
|
2228
|
-
end
|
2229
|
-
|
2230
|
-
describe Nendo, "when use sort libraries " do
|
2231
|
-
before do
|
2232
|
-
@nendo = Nendo::Core.new()
|
2233
|
-
@nendo.loadInitFile
|
2234
|
-
end
|
2235
|
-
it "should" do
|
2236
|
-
@nendo.evalStr( " (define lst '(1 50 60 30000 4000 200)) " ).should == "(1 50 60 30000 4000 200)"
|
2237
|
-
@nendo.evalStr( " (sort lst) " ).should == "(1 50 60 200 4000 30000)"
|
2238
|
-
@nendo.evalStr( " (sort '()) " ).should == "()"
|
2239
|
-
@nendo.evalStr( " (sort lst (lambda (a b) (- b a))) " ).should == "(30000 4000 200 60 50 1)"
|
2240
|
-
@nendo.evalStr( " (sort-by lst (lambda (item) item)) " ).should == "(1 50 60 200 4000 30000)"
|
2241
|
-
@nendo.evalStr( " (sort-by '() (lambda (item) item)) " ).should == "()"
|
2242
|
-
@nendo.evalStr( " (define lst2 '((1 . \"ddd\") (2 . \"cc\") (3 . \"bbbb\") (4 . \"a\"))) " ).should == '((1 . "ddd") (2 . "cc") (3 . "bbbb") (4 . "a"))'
|
2243
|
-
@nendo.evalStr( " (sort lst2 (lambda (a b) (- (car a) (car b)))) " ).should == '((1 . "ddd") (2 . "cc") (3 . "bbbb") (4 . "a"))'
|
2244
|
-
@nendo.evalStr( " (sort lst2 (lambda (a b) (if (>= (cdr a) (cdr b)) 1 -1))) " ).should == '((4 . "a") (3 . "bbbb") (2 . "cc") (1 . "ddd"))'
|
2245
|
-
@nendo.evalStr( " (sort-by lst2 (lambda (item) (car item))) " ).should == '((1 . "ddd") (2 . "cc") (3 . "bbbb") (4 . "a"))'
|
2246
|
-
@nendo.evalStr( " (sort-by lst2 (lambda (item) (cdr item))) " ).should == '((4 . "a") (3 . "bbbb") (2 . "cc") (1 . "ddd"))'
|
2247
|
-
@nendo.evalStr( " (sort-by lst2 (lambda (item) (. (cdr item) size))) " ).should == '((4 . "a") (2 . "cc") (1 . "ddd") (3 . "bbbb"))'
|
2248
|
-
end
|
2249
|
-
end
|
2250
|
-
|
2251
|
-
describe Nendo, "when use with-open libraries " do
|
2252
|
-
before do
|
2253
|
-
@nendo = Nendo::Core.new()
|
2254
|
-
@nendo.setDisplayErrors( false )
|
2255
|
-
@nendo.loadInitFile
|
2256
|
-
@fn = "/tmp/for-with-open.dat"
|
2257
|
-
open( @fn, "w" ) { |f|
|
2258
|
-
f.puts( "line1" )
|
2259
|
-
f.puts( "line2" )
|
2260
|
-
f.puts( "line3" )
|
2261
|
-
}
|
2262
|
-
end
|
2263
|
-
it "should" do
|
2264
|
-
@nendo.evalStr( sprintf( " (with-open \"%s\" (lambda (f) (f.readline.chop))) ", @fn )).should == '"line1"'
|
2265
|
-
@nendo.evalStr( sprintf( " (with-open \"%s\" (lambda (f) (f.readline.chop))) ", @fn )).should == '"line1"'
|
2266
|
-
@nendo.evalStr( sprintf( " (with-open \"%s\" (lambda (f) (f.readline.chop) (f.readline.chop))) ", @fn )).should == '"line2"'
|
2267
|
-
@nendo.evalStr( sprintf( " (with-open \"%s\" (lambda (f) (map (lambda (line) (line.chop)) f))) ", @fn )).should == '#("line1" "line2" "line3")'
|
2268
|
-
@nendo.evalStr( sprintf( " (with-open \"%s\" (lambda (f) (f.puts \"Wrote from Nendo.\")) \"w\") #t", @fn )).should == "#t"
|
2269
|
-
@nendo.evalStr( sprintf( " (with-open \"%s\" (lambda (f) (f.readline.chop))) ", @fn )).should == '"Wrote from Nendo."'
|
2270
|
-
lambda { @nendo.evalStr( sprintf( " (with-open \"%s\" (lambda (f) #t) 1 2 ", @fn )) }.should raise_error(RuntimeError)
|
2271
|
-
lambda { @nendo.evalStr( sprintf( " (with-open \"%s\" \"string\" 1 2 ", @fn )) }.should raise_error(RuntimeError)
|
2272
|
-
end
|
2273
|
-
|
2274
|
-
after do
|
2275
|
-
File.unlink( @fn )
|
2276
|
-
end
|
2277
|
-
end
|
2278
|
-
|
2279
|
-
describe Nendo, "when use (use ...) macro " do
|
2280
|
-
before do
|
2281
|
-
@nendo = Nendo::Core.new()
|
2282
|
-
@nendo.setDisplayErrors( false )
|
2283
|
-
@nendo.loadInitFile
|
2284
|
-
end
|
2285
|
-
it "should" do
|
2286
|
-
@nendo.evalStr( " (macroexpand '(use abc)) " ).should == '(load "abc")'
|
2287
|
-
@nendo.evalStr( " (macroexpand '(use a.b)) " ).should == '(load "a/b")'
|
2288
|
-
@nendo.evalStr( " (macroexpand '(use a.b.c)) " ).should == '(load "a/b/c")'
|
2289
|
-
@nendo.evalStr( " (macroexpand '(use a.b.c.d.e.f.g)) " ).should == '(load "a/b/c/d/e/f/g")'
|
2290
|
-
@nendo.evalStr( " (macroexpand '(use srfi-1)) " ).should == '(load "srfi-1")'
|
2291
|
-
@nendo.evalStr( " (macroexpand '(use text.tree)) " ).should == '(load "text/tree")'
|
2292
|
-
@nendo.evalStr( " (macroexpand '(use debug.syslog)) " ).should == '(load "debug/syslog")'
|
2293
|
-
@nendo.evalStr( " (macroexpand `(use ,(string->symbol (+ \"text\" \".\" \"tree\")))) " ).should == '(load "text/tree")'
|
2294
|
-
lambda { @nendo.evalStr( " (macroexpand '(use '(a)) " ) }.should raise_error( RuntimeError )
|
2295
|
-
lambda { @nendo.evalStr( " (macroexpand '(use \"srfi-1\") " ) }.should raise_error( RuntimeError )
|
2296
|
-
lambda { @nendo.evalStr( " (macroexpand '(use 1)) " ) }.should raise_error( RuntimeError )
|
2297
|
-
lambda { @nendo.evalStr( " (macroexpand '(use (+ 10 20))) " ) }.should raise_error( RuntimeError )
|
2298
|
-
end
|
2299
|
-
end
|
2300
|
-
|
2301
|
-
describe Nendo, "when use keyword feature " do
|
2302
|
-
before do
|
2303
|
-
@nendo = Nendo::Core.new()
|
2304
|
-
@nendo.setDisplayErrors( false )
|
2305
|
-
@nendo.loadInitFile
|
2306
|
-
end
|
2307
|
-
it "should" do
|
2308
|
-
@nendo.evalStr( " (keyword? :a) " ).should == "#t"
|
2309
|
-
@nendo.evalStr( ' (keyword? (intern ":a")) ' ).should == "#f"
|
2310
|
-
@nendo.evalStr( ' (symbol? (intern ":a")) ' ).should == "#t"
|
2311
|
-
@nendo.evalStr( " (keyword? ':a) " ).should == "#t"
|
2312
|
-
@nendo.evalStr( " (symbol? ':a) " ).should == "#f"
|
2313
|
-
@nendo.evalStr( " (eq? :a :a) " ).should == "#t"
|
2314
|
-
@nendo.evalStr( " (eqv? :a :a) " ).should == "#t"
|
2315
|
-
@nendo.evalStr( ' (eq? :a (intern ":a")) ' ).should == "#f"
|
2316
|
-
@nendo.evalStr( ' (eqv? :a (intern ":a")) ' ).should == "#f"
|
2317
|
-
@nendo.evalStr( ' (keyword? (make-keyword "a")) ' ).should == "#t"
|
2318
|
-
@nendo.evalStr( " :a " ).should == ":a"
|
2319
|
-
@nendo.evalStr( " ::a " ).should == "::a"
|
2320
|
-
@nendo.evalStr( " :::key " ).should == ":::key"
|
2321
|
-
@nendo.evalStr( ' (make-keyword "a") ' ).should == ":a"
|
2322
|
-
@nendo.evalStr( ' (make-keyword ":a") ' ).should == "::a"
|
2323
|
-
@nendo.evalStr( " (make-keyword 'a) " ).should == ":a"
|
2324
|
-
@nendo.evalStr( " (keyword->string :a) " ).should == '"a"'
|
2325
|
-
@nendo.evalStr( " (keyword->string :abcde) " ).should == '"abcde"'
|
2326
|
-
lambda { @nendo.evalStr( " (keyword->string 'a) " ) }.should raise_error( TypeError )
|
2327
|
-
@nendo.evalStr( " : " ).should == ':'
|
2328
|
-
@nendo.evalStr( " (keyword->string :) " ).should == '""'
|
2329
|
-
@nendo.evalStr( ' (make-keyword "") ' ).should == ":"
|
2330
|
-
@nendo.evalStr( " (get-keyword :y '(:x 1 :y 2 :z 3)) " ).should == "2"
|
2331
|
-
@nendo.evalStr( " (get-keyword 'z '(x 1 y 2 z 3)) " ).should == "3"
|
2332
|
-
lambda { @nendo.evalStr( " (get-keyword 'z '(x 1 y 2 z)) " ) }.should raise_error( RuntimeError )
|
2333
|
-
lambda { @nendo.evalStr( " (get-keyword :t '(:x 1 :y 2 :z 3)) " ) }.should raise_error( RuntimeError )
|
2334
|
-
@nendo.evalStr( " (get-keyword :t '() #f) " ).should == "#f"
|
2335
|
-
@nendo.evalStr( " (get-keyword :t '(:x) #f) " ).should == "#f"
|
2336
|
-
lambda { @nendo.evalStr( " (get-keyword :t '()) " ) }.should raise_error( RuntimeError )
|
2337
|
-
lambda { @nendo.evalStr( " (get-keyword :t '(:x)) " ) }.should raise_error( RuntimeError )
|
2338
|
-
lambda { @nendo.evalStr( " (get-keyword :t 1) " ) }.should raise_error( RuntimeError )
|
2339
|
-
@nendo.evalStr( " (get-keyword :t 1 #f) " ).should == "#f"
|
2340
|
-
end
|
2341
|
-
end
|
2342
|
-
|
2343
|
-
describe Nendo, "when use hash-table feature " do
|
2344
|
-
before do
|
2345
|
-
@nendo = Nendo::Core.new()
|
2346
|
-
@nendo.setDisplayErrors( false )
|
2347
|
-
@nendo.loadInitFile
|
2348
|
-
end
|
2349
|
-
it "should" do
|
2350
|
-
@nendo.evalStr( " (define h (make-hash-table)) " ).should == "{}"
|
2351
|
-
@nendo.evalStr( " (hash-table? 1) " ).should == "#f"
|
2352
|
-
@nendo.evalStr( " (hash-table? '(1)) " ).should == "#f"
|
2353
|
-
@nendo.evalStr( " (hash-table? (Array.new)) " ).should == "#f"
|
2354
|
-
@nendo.evalStr( " (hash-table? (Hash.new)) " ).should == "#t"
|
2355
|
-
@nendo.evalStr( " h " ).should == "{}"
|
2356
|
-
@nendo.evalStr( " (hash-table-put! h 'k1 'v1) h" ).should == "{:k1=>:v1}"
|
2357
|
-
@nendo.evalStr( " (hash-table-put! h 'k2 200) h" ).should == "{:k1=>:v1, :k2=>200}"
|
2358
|
-
@nendo.evalStr( " (hash-table-get h 'k1)" ).should == "v1"
|
2359
|
-
@nendo.evalStr( " (hash-table-get h 'k2)" ).should == "200"
|
2360
|
-
@nendo.evalStr( " (hash-table-exist? h 'k1)" ).should == "#t"
|
2361
|
-
@nendo.evalStr( " (hash-table-exist? h 'k2)" ).should == "#t"
|
2362
|
-
@nendo.evalStr( " (hash-table-exist? h 'k3)" ).should == "#f"
|
2363
|
-
@nendo.evalStr( " (hash-table-exist? h \"k1\")" ).should == "#f"
|
2364
|
-
@nendo.evalStr( " (hash-table-num-entries h)" ).should == "2"
|
2365
|
-
@nendo.evalStr( " (hash-table-delete! h 'k1)" ).should == "v1"
|
2366
|
-
lambda { @nendo.evalStr( " (hash-table-get h 'k1)" ) }.should raise_error( RuntimeError )
|
2367
|
-
@nendo.evalStr( " (hash-table-get h 'k1 #f) " ).should == "#f"
|
2368
|
-
@nendo.evalStr( " (hash-table-num-entries h)" ).should == "1"
|
2369
|
-
@nendo.evalStr( " (hash-table-clear! h)" ).should == "{}"
|
2370
|
-
@nendo.evalStr( " (hash-table-num-entries h)" ).should == "0"
|
2371
|
-
@nendo.evalStr( <<EOS
|
2372
|
-
(set! h (hash-table eq?
|
2373
|
-
'("a" "AAA")
|
2374
|
-
'("b" "BBB")
|
2375
|
-
'("c" "CCC" 100)))
|
2376
|
-
(hash-table-keys h)
|
2377
|
-
EOS
|
2378
|
-
).should == "(\"a\" \"b\" \"c\")"
|
2379
|
-
@nendo.evalStr( <<EOS
|
2380
|
-
(set! h (hash-table eq?
|
2381
|
-
'("a" "AAA")
|
2382
|
-
'("b" "BBB")
|
2383
|
-
'("c" "CCC" 100)))
|
2384
|
-
(hash-table-values h)
|
2385
|
-
EOS
|
2386
|
-
).should == "((\"AAA\") (\"BBB\") (\"CCC\" 100))"
|
2387
|
-
@nendo.evalStr( <<EOS
|
2388
|
-
(set! h (hash-table eq?
|
2389
|
-
'("a" . "AAA")
|
2390
|
-
'("b" . "BBB")
|
2391
|
-
'("c" . "CCC")))
|
2392
|
-
h
|
2393
|
-
EOS
|
2394
|
-
).should == "{\"a\"=>\"AAA\", \"b\"=>\"BBB\", \"c\"=>\"CCC\"}"
|
2395
|
-
@nendo.evalStr( " (hash-table-keys h)" ).should == '("a" "b" "c")'
|
2396
|
-
@nendo.evalStr( " (hash-table-values h)" ).should == '("AAA" "BBB" "CCC")'
|
2397
|
-
@nendo.evalStr( " (hash-table-map h (lambda (a b) (+ a b)))" ).should == '("aAAA" "bBBB" "cCCC")'
|
2398
|
-
@nendo.evalStr( " (hash-table-for-each h (lambda (a b) (+ a b)))" ).should == '("aAAA" "bBBB" "cCCC")'
|
2399
|
-
@nendo.evalStr( " (set! h (make-hash-table)) " ).should == "{}"
|
2400
|
-
@nendo.evalStr( <<EOS
|
2401
|
-
(set! h (hash-table eq?
|
2402
|
-
'(true . 1)
|
2403
|
-
'(false . 2)
|
2404
|
-
'(nil . 3)))
|
2405
|
-
h
|
2406
|
-
EOS
|
2407
|
-
).should == "{true=>1, false=>2, nil=>3}"
|
2408
|
-
@nendo.evalStr( " (hash-table-keys h) " ).should == "(#t #f nil)"
|
2409
|
-
@nendo.evalStr( <<EOS
|
2410
|
-
(set! h (hash-table eq?
|
2411
|
-
'(1 . true)
|
2412
|
-
'(2 . false)
|
2413
|
-
'(3 . nil)))
|
2414
|
-
h
|
2415
|
-
EOS
|
2416
|
-
).should == "{1=>true, 2=>false, 3=>nil}"
|
2417
|
-
@nendo.evalStr( " (hash-table-keys h) " ).should == "(1 2 3)"
|
2418
|
-
end
|
2419
|
-
end
|
2420
|
-
|
2421
|
-
describe Nendo, "when use vector feature " do
|
2422
|
-
before do
|
2423
|
-
@nendo = Nendo::Core.new()
|
2424
|
-
@nendo.setDisplayErrors( false )
|
2425
|
-
@nendo.loadInitFile
|
2426
|
-
end
|
2427
|
-
it "should" do
|
2428
|
-
@nendo.evalStr( " (define v (vector)) v" ).should == "#()"
|
2429
|
-
@nendo.evalStr( " (vector? 1) " ).should == "#f"
|
2430
|
-
@nendo.evalStr( " (vector? (vector)) " ).should == "#t"
|
2431
|
-
@nendo.evalStr( " (vector? (vector 1)) " ).should == "#t"
|
2432
|
-
@nendo.evalStr( " (vector? (vector 1 2)) " ).should == "#t"
|
2433
|
-
@nendo.evalStr( " (vector? '#(1)) " ).should == "#t"
|
2434
|
-
@nendo.evalStr( " (vector? '#(1 2)) " ).should == "#t"
|
2435
|
-
@nendo.evalStr( " (vector? (Array.new)) " ).should == "#t"
|
2436
|
-
@nendo.evalStr( " (vector? (Hash.new)) " ).should == "#f"
|
2437
|
-
@nendo.evalStr( " (vector? 1.1) " ).should == "#f"
|
2438
|
-
@nendo.evalStr( " (vector? \"str\") " ).should == "#f"
|
2439
|
-
@nendo.evalStr( " (define v (make-vector 4))" ).should == "#(nil nil nil nil)"
|
2440
|
-
@nendo.evalStr( " (vector-set! v 0 'v1) v" ).should == "#(v1 nil nil nil)"
|
2441
|
-
@nendo.evalStr( " (vector-set! v 1 '100) v" ).should == "#(v1 100 nil nil)"
|
2442
|
-
@nendo.evalStr( " (vector-set! v 2 '200) v" ).should == "#(v1 100 200 nil)"
|
2443
|
-
@nendo.evalStr( " (vector-set! v 3 '(a b c)) v" ).should == "#(v1 100 200 (a b c))"
|
2444
|
-
@nendo.evalStr( " (vector-length v)" ).should == "4"
|
2445
|
-
@nendo.evalStr( " (vector-ref v 0) " ).should == "v1"
|
2446
|
-
@nendo.evalStr( " (vector-ref v 1) " ).should == "100"
|
2447
|
-
@nendo.evalStr( " (vector-ref v 2) " ).should == "200"
|
2448
|
-
@nendo.evalStr( " (vector-ref v 3) " ).should == "(a b c)"
|
2449
|
-
lambda { @nendo.evalStr( " (vector-ref v -1)" ) }.should raise_error( RuntimeError )
|
2450
|
-
lambda { @nendo.evalStr( " (vector-ref v -2)" ) }.should raise_error( RuntimeError )
|
2451
|
-
lambda { @nendo.evalStr( " (vector-ref v 5)" ) }.should raise_error( RuntimeError )
|
2452
|
-
lambda { @nendo.evalStr( " (vector-ref v 6)" ) }.should raise_error( RuntimeError )
|
2453
|
-
@nendo.evalStr( " (vector-ref v -1 1000)" ).should == "1000"
|
2454
|
-
@nendo.evalStr( " (vector-ref v -2 2000)" ).should == "2000"
|
2455
|
-
@nendo.evalStr( " (vector-ref v 5 3000)" ).should == "3000"
|
2456
|
-
@nendo.evalStr( " (vector-ref v 6 4000)" ).should == "4000"
|
2457
|
-
@nendo.evalStr( " (vector-ref v 7 #f)" ).should == "#f"
|
2458
|
-
@nendo.evalStr( " (define v (make-vector 10)) v" ).should == "#(nil nil nil nil nil nil nil nil nil nil)"
|
2459
|
-
@nendo.evalStr( " (vector->list v)" ).should == "(nil nil nil nil nil nil nil nil nil nil)"
|
2460
|
-
@nendo.evalStr( " (define lst '(a b c (d)))" ).should == "(a b c (d))"
|
2461
|
-
@nendo.evalStr( " (list->vector lst)" ).should == "#(a b c (d))"
|
2462
|
-
@nendo.evalStr( " (list->vector (range 10 1))" ).should == "#(1 2 3 4 5 6 7 8 9 10)"
|
2463
|
-
end
|
2464
|
-
end
|
2465
|
-
|
2466
|
-
describe Nendo, "tail call optimization " do
|
2467
|
-
before do
|
2468
|
-
@nendo = Nendo::Core.new()
|
2469
|
-
@nendo.setDisplayErrors( false )
|
2470
|
-
@nendo.loadInitFile
|
2471
|
-
@nendo.loadInitFile # to self optimizing. The init.nnd file will be loaded twice, so `filter' can be optimized on second loading phase.
|
2472
|
-
end
|
2473
|
-
it "should" do
|
2474
|
-
@nendo.evalStr( " (%setup-%tailcall-mark '(print \"abc\")) " ).should == "(%tailcall (print \"abc\"))"
|
2475
|
-
@nendo.evalStr( " (%setup-%tailcall-mark '(begin (print \"abc\") 1 2 3)) " ).should == "(begin (print \"abc\") 1 2 3)"
|
2476
|
-
@nendo.evalStr( " (%setup-%tailcall-mark '(begin 1 2 (print \"abc\") 3)) " ).should == "(begin 1 2 (print \"abc\") 3)"
|
2477
|
-
@nendo.evalStr( " (%setup-%tailcall-mark '(begin 1 2 3 (print \"abc\"))) " ).should == "(begin 1 2 3 (%tailcall (print \"abc\")))"
|
2478
|
-
@nendo.evalStr( " (%setup-%tailcall-mark '(lambda (x) x)) " ).should == "(lambda (x) x)"
|
2479
|
-
@nendo.evalStr( " (%setup-%tailcall-mark '(macro (x) x)) " ).should == "(macro (x) x)"
|
2480
|
-
@nendo.evalStr( " (%setup-%tailcall-mark '(%syntax (x) x)) " ).should == "(%syntax (x) x)"
|
2481
|
-
@nendo.evalStr( " (%setup-%tailcall-mark '(%syntax (a b c) (begin a b c))) " ).should == "(%syntax (a b c) (begin a b c))"
|
2482
|
-
@nendo.evalStr( " (%setup-%tailcall-mark '(lambda (x) (%syntax (y) x))) " ).should == "(lambda (x) (%syntax (y) x))"
|
2483
|
-
@nendo.evalStr( " (%setup-%tailcall-mark '(lambda (x) (syntax-quote x))) " ).should == "(lambda (x) (quote x))"
|
2484
|
-
@nendo.evalStr( " (%setup-%tailcall-mark '(lambda (x) (quote x))) " ).should == "(lambda (x) (quote x))"
|
2485
|
-
@nendo.evalStr( <<EOS
|
2486
|
-
(%setup-%tailcall-mark
|
2487
|
-
'(lambda '(x)
|
2488
|
-
1
|
2489
|
-
2
|
2490
|
-
(print \"abc\")))
|
2491
|
-
EOS
|
2492
|
-
).should == "(lambda (quote (x)) 1 2 (%tailcall (print \"abc\")))"
|
2493
|
-
@nendo.evalStr( <<EOS
|
2494
|
-
(%setup-%tailcall-mark
|
2495
|
-
'(lambda (x)
|
2496
|
-
1
|
2497
|
-
2
|
2498
|
-
(if #t
|
2499
|
-
(begin 1 2 (print "abc"))
|
2500
|
-
(begin 1 2 (print "ABC")))))
|
2501
|
-
EOS
|
2502
|
-
).should == "(lambda (x) 1 2 (if #t (begin 1 2 (%tailcall (print \"abc\"))) (begin 1 2 (%tailcall (print \"ABC\")))))"
|
2503
|
-
@nendo.evalStr( <<EOS
|
2504
|
-
(%setup-%tailcall-mark (macroexpand
|
2505
|
-
'(define (foo) (foo))
|
2506
|
-
))
|
2507
|
-
EOS
|
2508
|
-
).should == "(define foo (lambda () (%tailcall (foo))))"
|
2509
|
-
@nendo.evalStr( <<EOS
|
2510
|
-
(%setup-%tailcall-mark (macroexpand
|
2511
|
-
'(values? (make-values '()))
|
2512
|
-
))
|
2513
|
-
EOS
|
2514
|
-
).should == "(%tailcall (values? (make-values (quote ()))))"
|
2515
|
-
@nendo.evalStr( <<EOS
|
2516
|
-
(%setup-%tailcall-mark (macroexpand
|
2517
|
-
'(cond
|
2518
|
-
(false 1)
|
2519
|
-
(false 2))
|
2520
|
-
))
|
2521
|
-
EOS
|
2522
|
-
).should == "(if #f (begin 1) (if #f (begin 2) ()))"
|
2523
|
-
@nendo.evalStr( <<EOS
|
2524
|
-
(%setup-%tailcall-mark (macroexpand
|
2525
|
-
'(cond
|
2526
|
-
(false 1)
|
2527
|
-
(false 2)
|
2528
|
-
(else 3))
|
2529
|
-
))
|
2530
|
-
EOS
|
2531
|
-
).should == "(if #f (begin 1) (if #f (begin 2) (if #t (begin 3) ())))"
|
2532
|
-
@nendo.evalStr( <<EOS
|
2533
|
-
(%setup-%tailcall-mark (macroexpand
|
2534
|
-
'(and
|
2535
|
-
(foo 1)
|
2536
|
-
(bar 2))
|
2537
|
-
))
|
2538
|
-
EOS
|
2539
|
-
).should == "(if (not (eq? #f (foo 1))) (%tailcall (bar 2)) #f)"
|
2540
|
-
@nendo.evalStr( <<EOS
|
2541
|
-
(%setup-%tailcall-mark (macroexpand
|
2542
|
-
'(or
|
2543
|
-
(foo 1)
|
2544
|
-
(bar 2))
|
2545
|
-
))
|
2546
|
-
EOS
|
2547
|
-
).gsub( /_[0-9][0-9][0-9][0-9][0-9][ ]/, "_X0000 " ).should == "(%let ((__gensym__fb4e25e49e9fb4e46342224606faf2e3eabf1251_X0000 (foo 1))) (if __gensym__fb4e25e49e9fb4e46342224606faf2e3eabf1251_X0000 __gensym__fb4e25e49e9fb4e46342224606faf2e3eabf1251_X0000 (%let ((__gensym__fb4e25e49e9fb4e46342224606faf2e3eabf1251_X0000 (bar 2))) (if __gensym__fb4e25e49e9fb4e46342224606faf2e3eabf1251_X0000 __gensym__fb4e25e49e9fb4e46342224606faf2e3eabf1251_X0000 #f))))"
|
2548
|
-
@nendo.evalStr( <<EOS
|
2549
|
-
(%setup-%tailcall-mark (macroexpand
|
2550
|
-
'(let loop ((x 1))
|
2551
|
-
1
|
2552
|
-
2
|
2553
|
-
(loop 100))
|
2554
|
-
))
|
2555
|
-
EOS
|
2556
|
-
).should == "(letrec ((loop (lambda (x) 1 2 (%tailcall (loop 100))))) (%tailcall (loop 1)))"
|
2557
|
-
@nendo.evalStr( "(%setup-%tailcall-mark (macroexpand "+
|
2558
|
-
" '(let1 aaa 111 aaa)"+
|
2559
|
-
" ))" ).should == "(%let ((aaa 111)) aaa)"
|
2560
|
-
@nendo.evalStr( <<EOS
|
2561
|
-
(%setup-%tailcall-mark
|
2562
|
-
'(letrec ((func1
|
2563
|
-
(lambda (x)
|
2564
|
-
1
|
2565
|
-
(func2)))
|
2566
|
-
(func2
|
2567
|
-
(lambda (x)
|
2568
|
-
2
|
2569
|
-
(func1))))
|
2570
|
-
(func1 100)))
|
2571
|
-
EOS
|
2572
|
-
).should == "(letrec ((func1 (lambda (x) 1 (%tailcall (func2)))) (func2 (lambda (x) 2 (%tailcall (func1))))) (%tailcall (func1 100)))"
|
2573
|
-
@nendo.evalStr( "(set-optimize-level 0) " ).should == "0"
|
2574
|
-
lambda { @nendo.evalStr( <<EOS
|
2575
|
-
(filter
|
2576
|
-
(lambda (x) (< x 10))
|
2577
|
-
(range 10000))
|
2578
|
-
EOS
|
2579
|
-
) }.should raise_error(SystemStackError)
|
2580
|
-
@nendo.evalStr( "(set-optimize-level 1) " ).should == "1"
|
2581
|
-
@nendo.evalStr( <<EOS
|
2582
|
-
(apply +
|
2583
|
-
(map
|
2584
|
-
(lambda (x) (* x 2))
|
2585
|
-
(range 10000)))
|
2586
|
-
EOS
|
2587
|
-
).should == "99990000"
|
2588
|
-
@nendo.evalStr( <<EOS
|
2589
|
-
(filter
|
2590
|
-
(lambda (x) (< x 10))
|
2591
|
-
(range 1000))
|
2592
|
-
EOS
|
2593
|
-
).should == "(0 1 2 3 4 5 6 7 8 9)"
|
2594
|
-
@nendo.evalStr( <<EOS
|
2595
|
-
(filter-map
|
2596
|
-
(lambda (x)
|
2597
|
-
(when (< x 10) (- x)))
|
2598
|
-
(range 1000))
|
2599
|
-
EOS
|
2600
|
-
).should == "(0 -1 -2 -3 -4 -5 -6 -7 -8 -9)"
|
2601
|
-
@nendo.evalStr( <<EOS
|
2602
|
-
(define str
|
2603
|
-
(if #t
|
2604
|
-
(car '("a"))
|
2605
|
-
(car '("b"))))
|
2606
|
-
(sprintf "A%sZ" str)
|
2607
|
-
EOS
|
2608
|
-
).should == '"AaZ"'
|
2609
|
-
@nendo.evalStr( <<EOS
|
2610
|
-
(letrec ((str (if #t
|
2611
|
-
(+ "a" "A")
|
2612
|
-
'())))
|
2613
|
-
str.class)
|
2614
|
-
EOS
|
2615
|
-
).should == 'String'
|
2616
|
-
@nendo.evalStr( <<EOS
|
2617
|
-
(letrec ((str
|
2618
|
-
(if #t
|
2619
|
-
(+ \"a\" \"A\")
|
2620
|
-
'())))
|
2621
|
-
(+ str \"...\"))
|
2622
|
-
EOS
|
2623
|
-
).should == '"aA..."'
|
2624
|
-
end
|
2625
|
-
end
|
2626
|
-
|
2627
|
-
|
2628
|
-
describe Nendo, "When use optional argument parser " do
|
2629
|
-
before do
|
2630
|
-
@nendo = Nendo::Core.new()
|
2631
|
-
@nendo.loadInitFile
|
2632
|
-
end
|
2633
|
-
it "should" do
|
2634
|
-
@nendo.evalStr( " (get-optional '() 100) " ).should == "100"
|
2635
|
-
@nendo.evalStr( " (get-optional '(1) 100) " ).should == "1"
|
2636
|
-
@nendo.evalStr( " (get-optional '(2) 100) " ).should == "2"
|
2637
|
-
@nendo.evalStr( " (get-optional '(3 4) 100) " ).should == "3"
|
2638
|
-
@nendo.evalStr( " (get-optional '() #t) " ).should == "#t"
|
2639
|
-
@nendo.evalStr( " (get-optional '() #f) " ).should == "#f"
|
2640
|
-
end
|
2641
|
-
end
|
2642
|
-
|
2643
|
-
describe Nendo, "When use :optional argument feature " do
|
2644
|
-
before do
|
2645
|
-
@nendo = Nendo::Core.new()
|
2646
|
-
@nendo.setDisplayErrors( false )
|
2647
|
-
@nendo.loadInitFile
|
2648
|
-
end
|
2649
|
-
it "should" do
|
2650
|
-
@nendo.evalStr( '(define (func arg1 arg2) (list arg1 arg2)) (func 1 2)' ).should == "(1 2)"
|
2651
|
-
@nendo.evalStr( '(define (func arg1 arg2 :optional (arg3 #f)) (list arg1 arg2 arg3)) (func 1 2)' ).should == "(1 2 #f)"
|
2652
|
-
@nendo.evalStr( '(define (func arg1 arg2 :optional (arg3 #t)) (list arg1 arg2 arg3)) (func 1 2)' ).should == "(1 2 #t)"
|
2653
|
-
@nendo.evalStr( '(define (func arg1 arg2 :optional (arg3 3)) (list arg1 arg2 arg3)) (func 1 2)' ).should == "(1 2 3)"
|
2654
|
-
@nendo.evalStr( '(define (func arg1 arg2 :optional (arg3 #f)) (list arg1 arg2 arg3)) (func 1 2 30)' ).should == "(1 2 30)"
|
2655
|
-
@nendo.evalStr( '(define (func arg1 arg2 :optional (arg3 #t)) (list arg1 arg2 arg3)) (func 1 2 40)' ).should == "(1 2 40)"
|
2656
|
-
@nendo.evalStr( '(define (func arg1 arg2 :optional (arg3 3)) (list arg1 arg2 arg3)) (func 1 2 50)' ).should == "(1 2 50)"
|
2657
|
-
@nendo.evalStr( '(define (func arg1 arg2 :optional (arg3 3)) (list arg1 arg2 arg3)) (func 1 2 "String")' ).should == '(1 2 "String")'
|
2658
|
-
|
2659
|
-
@nendo.evalStr( '(define func (lambda (arg1 arg2) (list arg1 arg2))) (func 1 2)' ).should == '(1 2)'
|
2660
|
-
lambda { @nendo.evalStr( '(define func (lambda (arg1 arg2 :optional (arg3 #f)) (list arg1 arg2 arg3))) (func 1 2)' ) }.should raise_error( RuntimeError, /handle keyword argument/ )
|
2661
|
-
lambda { @nendo.evalStr( '(define func (lambda (arg1 arg2 :optional (arg3 #t)) (list arg1 arg2 arg3))) (func 1 2)' ) }.should raise_error( RuntimeError, /handle keyword argument/ )
|
2662
|
-
lambda { @nendo.evalStr( '(define func (lambda (arg1 arg2 :optional (arg3 3)) (list arg1 arg2 arg3))) (func 1 2)' ) }.should raise_error( RuntimeError, /handle keyword argument/ )
|
2663
|
-
end
|
2664
|
-
end
|
2665
|
-
|
2666
|
-
|
2667
|
-
describe Nendo, "when use export-to-ruby macro " do
|
2668
|
-
before do
|
2669
|
-
@nendo = Nendo::Core.new()
|
2670
|
-
@nendo.setDisplayErrors( false )
|
2671
|
-
@nendo.loadInitFile
|
2672
|
-
end
|
2673
|
-
it "should" do
|
2674
|
-
@nendo.evalStr( " (define (nendo_function0 ) 0) #t" ).should == "#t"
|
2675
|
-
@nendo.evalStr( " (define (nendo_function1 x) (+ x 1)) #t" ).should == "#t"
|
2676
|
-
@nendo.evalStr( " (define (nendo_function2 x y) (* x y)) #t" ).should == "#t"
|
2677
|
-
@nendo.evalStr( " (define (nendo_function7 a b c d e f g) (to-arr (list a b c d e f g))) #t" ).should == "#t"
|
2678
|
-
@nendo.evalStr( " (export-to-ruby nendo_function0) " ).should == "#t"
|
2679
|
-
@nendo.evalStr( " (export-to-ruby nendo_function1) " ).should == "#t"
|
2680
|
-
@nendo.evalStr( " (export-to-ruby nendo_function2) " ).should == "#t"
|
2681
|
-
@nendo.evalStr( " (export-to-ruby nendo_function7) " ).should == "#t"
|
2682
|
-
@nendo.evalStr( " (macroexpand '(export-to-ruby nendo_function1)) " ).should == '(%export-to-ruby "nendo_function1" nendo_function1)'
|
2683
|
-
@nendo.evalStr( " (macroexpand '(export-to-ruby nendo_function7)) " ).should == '(%export-to-ruby "nendo_function7" nendo_function7)'
|
2684
|
-
@nendo.evalStr( " (define (a-func0) 0) #t" ).should == "#t"
|
2685
|
-
lambda { @nendo.evalStr( " (export-to-ruby a-func0) " ) }.should raise_error(ArgumentError)
|
2686
|
-
@nendo.evalStr( " (define (clone) 0) #t" ).should == "#t"
|
2687
|
-
lambda { @nendo.evalStr( " (export-to-ruby clone) " ) }.should raise_error(RuntimeError)
|
2688
|
-
@nendo.evalStr( " (define variable_a 0) #t" ).should == "#t"
|
2689
|
-
lambda { @nendo.evalStr( " (export-to-ruby variable_a) " ) }.should raise_error(ArgumentError)
|
2690
|
-
@nendo.nendo_function0.should == 0
|
2691
|
-
@nendo.nendo_function1( 10 ).should == 11
|
2692
|
-
@nendo.nendo_function2( 8, 9 ).should == 72
|
2693
|
-
@nendo.nendo_function7( 7,6,5,4,3,2,1 ).should === [ 7,6,5,4,3,2,1 ]
|
2694
|
-
end
|
2695
|
-
end
|