[pure-lang-svn] SF.net SVN: pure-lang: [33] pure/trunk
Status: Beta
Brought to you by:
agraef
From: <ag...@us...> - 2008-05-03 05:35:34
|
Revision: 33 http://pure-lang.svn.sourceforge.net/pure-lang/?rev=33&view=rev Author: agraef Date: 2008-05-02 22:35:42 -0700 (Fri, 02 May 2008) Log Message: ----------- Corrected regression test. Modified Paths: -------------- pure/trunk/ChangeLog pure/trunk/test/test1.log pure/trunk/test/test1.pure Modified: pure/trunk/ChangeLog =================================================================== --- pure/trunk/ChangeLog 2008-05-02 20:31:41 UTC (rev 32) +++ pure/trunk/ChangeLog 2008-05-03 05:35:42 UTC (rev 33) @@ -1,3 +1,8 @@ +2008-05-03 Albert Graef <Dr....@t-...> + + * test/test1.pure: Corrected fact3 example, added test cases. + Reported by Libor Spacek. + 2008-05-02 Albert Graef <Dr....@t-...> * Makefile: Overhaul of regression tests so that results of Modified: pure/trunk/test/test1.log =================================================================== --- pure/trunk/test/test1.log 2008-05-02 20:31:41 UTC (rev 32) +++ pure/trunk/test/test1.log 2008-05-03 05:35:42 UTC (rev 33) @@ -23,6 +23,8 @@ state 1: #0 } let x = fact1 10; +x; +3628800 fact2 n/*0:1*/ = case n/*0:1*/ of n/*0:*/ = n/*0:*/*fact2 (n/*0:*/-1) if n/*0:*/>0; n/*0:*/ = 1 { rule #0: n = n*fact2 (n-1) if n>0 rule #1: n = 1 @@ -30,9 +32,9 @@ <var> state 1 state 1: #0 #1 } end; -fact3 n/*0:1*/ = case n/*0:1*/ of 0 = 1; n/*0:*/ = n/*0:*/*fact3 (n/*0:*/-1) if n/*0:*/>1 { +fact3 n/*0:1*/ = case n/*0:1*/ of 0 = 1; n/*0:*/ = n/*0:*/*fact3 (n/*0:*/-1) if n/*0:*/>0 { rule #0: 0 = 1 - rule #1: n = n*fact3 (n-1) if n>1 + rule #1: n = n*fact3 (n-1) if n>0 state 0: #0 #1 <var> state 1 0::int state 2 @@ -46,9 +48,51 @@ <var> state 1 state 1: #0 }; +{ + rule #0: fact2 n = case n of n = n*fact2 (n-1) if n>0; n = 1 end + state 0: #0 + <var> state 1 + state 1: #0 +} +{ + rule #0: fact3 n = case n of 0 = 1; n = n*fact3 (n-1) if n>0 end + state 0: #0 + <var> state 1 + state 1: #0 +} +{ + rule #0: fact4 n = if n>0 then n*fact4 (n-1) else 1 + state 0: #0 + <var> state 1 + state 1: #0 +} +{ + rule #0: fact5 = \n -> if n>0 then n*fact5 (n-1) else 1 + state 0: #0 +} +fact2 10; +3628800 +fact3 10; +3628800 +fact4 10; +3628800 +fact5 10; +3628800 fact n/*0:1*/::int = fact (bigint n/*0:1*/); fact n/*0:1*/::bigint = n/*0:1*/*fact (n/*0:1*/-1) if n/*0:1*/>0; fact n/*0:1*/::bigint = 1; +{ + rule #0: fact n::int = fact (bigint n) + rule #1: fact n::bigint = n*fact (n-1) if n>0 + rule #2: fact n::bigint = 1 + state 0: #0 #1 #2 + <var>::int state 1 + <var>::bigint state 2 + state 1: #0 + state 2: #1 #2 +} +fact 50; +30414093201713378043612608166064768844377641568960512000000000000 fib1 0 = 0; fib1 1 = 1; fib1 n/*0:1*/ = fib1 (n/*0:1*/-2)+fib1 (n/*0:1*/-1) if n/*0:1*/>1; @@ -119,38 +163,6 @@ state 1: #0 #1 } end; { - rule #0: fact2 n = case n of n = n*fact2 (n-1) if n>0; n = 1 end - state 0: #0 - <var> state 1 - state 1: #0 -} -{ - rule #0: fact3 n = case n of 0 = 1; n = n*fact3 (n-1) if n>1 end - state 0: #0 - <var> state 1 - state 1: #0 -} -{ - rule #0: fact4 n = if n>0 then n*fact4 (n-1) else 1 - state 0: #0 - <var> state 1 - state 1: #0 -} -{ - rule #0: fact5 = \n -> if n>0 then n*fact5 (n-1) else 1 - state 0: #0 -} -{ - rule #0: fact n::int = fact (bigint n) - rule #1: fact n::bigint = n*fact (n-1) if n>0 - rule #2: fact n::bigint = 1 - state 0: #0 #1 #2 - <var>::int state 1 - <var>::bigint state 2 - state 1: #0 - state 2: #1 #2 -} -{ rule #0: fib1 0 = 0 rule #1: fib1 1 = 1 rule #2: fib1 n = fib1 (n-2)+fib1 (n-1) if n>1 Modified: pure/trunk/test/test1.pure =================================================================== --- pure/trunk/test/test1.pure 2008-05-02 20:31:41 UTC (rev 32) +++ pure/trunk/test/test1.pure 2008-05-03 05:35:42 UTC (rev 33) @@ -14,7 +14,7 @@ fact1 n = n*fact1 (n-1) if n>0; = 1 otherwise; -let x = fact1 10; +let x = fact1 10; x; // Factorial, using case. @@ -27,7 +27,7 @@ fact3 n = case n of 0 = 1; - n = n*fact3 (n-1) if n>1; + n = n*fact3 (n-1) if n>0; end; // Factorial, with if-then-else. @@ -38,12 +38,19 @@ fact5 = \n -> if n>0 then n*fact5 (n-1) else 1; +fact2 10; +fact3 10; +fact4 10; +fact5 10; + // Factorial, using bigints. fact n::int = fact (bigint n); fact n::bigint = n*fact (n-1) if n>0; = 1 otherwise; +fact 50; + // Fibonacci function, naive O(fib n) implementation. fib1 0 = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |