123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- % MAIN4.RED : Test Mini reader and function primitives,
- % needs IO, SUB2, SUB3 and SUB4
- IN "xxx-header.red"$
- In "PT:P-function-primitives.red"$
- IN "PT:STUBS4.RED"$
- IN "PT:STUBS3.RED"$
- on syslisp;
- Compiletime GLOBAL '(DEBUG);
- Procedure FirstCall;
- Begin scalar x,s1,s2,s3, Done,D1,D2;
- Init();
- InitHeap();
- LispVar(DEBUG) := 'T; % To get ID stuff out
- Dashed "Test EQSTR";
- s1:='"AB";
- s2:='"Ab";
- s3:='"ABC";
- ShouldBe("EqStr(AB,AB)",EqStr(s1,s1),'T);
- ShouldBe("EqStr(AB,AB)",EqStr(s1,"AB"),'T);
- ShouldBe("EqStr(AB,Ab)",EqStr(s1,s2),'NIL);
- ShouldBe("EqStr(AB,ABC)",EqStr(s1,s3),'NIL);
- Dashed "Test Intern on existing ID's";
- ShouldBe("Intern(A)",Intern "A", 'A);
- ShouldBe("Intern(AB)",Intern S1, 'AB);
- Dashed "Test Intern on new ID, make sure same place";
- D1:=Intern S3;
- ShouldBe("Intern(ABC)",Intern("ABC"),D1);
- D2:=Intern "FOO";
- ShouldBe("Intern(ABC) again",Intern("ABC"),D1);
- Dashed "Test RATOM loop. Type various ID's, STRING's and INTEGER's";
- MoreStuff();
- InitRead();
- While Not Done do
- <<x:=Ratom();
- prin2 "Item read=";
- Prtitm x;
- Print x;
- if x eq 'Q then Done := 'T;>>;
- LispVar(DEBUG) := 'NIL; % Turn off PRINT
- Dashed "Test READ loop. Type various S-expressions";
- MoreStuff();
- Done:= 'NIL;
- While Not Done do
- <<x:=READ();
- Prin2 '" Item read=";
- Prtitm x;
- Print x;
- if x eq 'Q then Done := 'T;>>;
-
- Functiontest();
- Quit;
- End;
- Procedure MoreStuff;
- <<Spaced "Move to next part of test by typing the id Q";
- Spaced "Inspect printout carefully">>;
- Fluid '(CodePtr!* CodeForm!* CodeNarg!*);
- procedure FunctionTest();
- Begin scalar c1,c2,ID1,x;
- Dashed "Tests of FUNCTION PRIMITIVES ";
- ShouldBe("FunBoundP(Compiled1)",FunBoundP 'Compiled1,NIL);
- ShouldBe("FunBoundP(ShouldBeUnbound)",FunBoundP 'ShouldBeUnBound,T);
- ShouldBe("FCodeP(Compiled1)",FCodeP 'Compiled1,T);
- ShouldBe("FCodeP(ShouldBeUnbound)",FcodeP 'ShouldBeUnBound,NIL);
- ShouldBe("FCodeP(Compiled2)",FCodeP 'Compiled2,T);
- Dashed "Now MakeFunBound";
- MakeFunBound('Compiled2);
- ShouldBe("FCodeP(Compiled2)",FCodeP 'Compiled2,NIL);
- ShouldBe("FUnBoundP(Compiled2)",FUnBoundP 'Compiled2,T);
- Dashed "Now copy CODEPTR of Compiled1 to Compiled2 ";
- C1:=GetFCodePointer('Compiled1);
- C2:=GetFCodePointer('Compiled2);
- ShouldBe("CodeP(C1)",CodeP C1,T);
- ShouldBe("CodeP(C2)",CodeP C2,NIL);
- MakeFcode('Compiled2,C1);
- ShouldBe("C1=GetFcodePointer 'Compiled2",
- C1=GetFCodePointer 'Compiled2,T);
- ShouldBe("Compiled2()",Compiled2(),12345);
- Dashed "Now test CodePrimitive";
- CodePtr!* := GetFCodePointer 'Compiled3;
- X:= CodePrimitive(10,20,30,40);
- Shouldbe(" X=1000",1000,X);
- Dashed "Test CompiledCallingInterpreted hook";
- CompiledCallingInterpreted();
- Dashed "Now Create PRETENDINTERPRETIVE";
- MakeFlambdaLink 'PretendInterpretive;
- Shouldbe("FlambdaLinkP",FlambdaLinkP 'PretendInterpretive,T);
- Shouldbe("Fcodep",FCodeP 'PretendInterpretive,NIL);
- Shouldbe("FUnBoundP",FUnBoundP 'PretendInterpretive,NIL);
- Dashed "Now call PRETENDINTERPRETIVE";
- x:=PretendInterpretive(500,600);
- ShouldBe("PretendInterpretive",x,1100);
- End;
- % Auxilliary Compiled routines for CodeTests:
- Procedure Compiled1;
- << Dotted "Compiled1 called";
- 12345>>;
- Procedure Compiled2;
- << Dotted"Compiled2 called";
- 67890>>;
- Procedure Compiled3(A1,A2,A3,A4);
- <<Dotted "Compiled3 called with 4 arguments , expect 10,20,30,40";
- Prin2 " A1=";Prin2T A1;
- Prin2 " A2=";Prin2T A2;
- Prin2 " A3=";Prin2T A3;
- Prin2 " A4=";Prin2T A4;
- Prin2t "Now return 1000 to caller";
- 1000>>;
- syslsp procedure UndefinedFunctionAuxAux ;
- Begin scalar FnId;
- FnId := MkID UndefnCode!*;
- Prin2 "Undefined Function ";
- Prin1 FnId;
- Prin2 " called with ";
- Prin2 LispVar UndefnNarg!*;
- prin2T " args from compiled code";
- Quit;
- End;
- % some primitives use by FastApply
- syslsp procedure CompiledCallingInterpretedAux();
- Begin scalar FnId,Nargs;
- Prin2t "COMPILED Calling INTERPRETED";
- Prin2 "CODEFORM!*= "; Print LispVar CodeForm!*;
- Nargs:=LispVar CodeNarg!*;
- FnId := MkID LispVar CodeForm!*;
- Prin2 "Function: ";
- Prin1 FnId;
- Prin2 " called with ";
- Prin2 Nargs;
- prin2T " args from compiled code";
- Return 1100;
- End;
- Off syslisp;
- End;
|