[pure-lang-svn] SF.net SVN: pure-lang: [54] pure/trunk
Status: Beta
Brought to you by:
agraef
From: <ag...@us...> - 2008-05-05 06:57:14
|
Revision: 54 http://pure-lang.svn.sourceforge.net/pure-lang/?rev=54&view=rev Author: agraef Date: 2008-05-04 23:57:21 -0700 (Sun, 04 May 2008) Log Message: ----------- Fixed wrong mpz_cmp() tests in pattern matching code. Added regression test #8. Modified Paths: -------------- pure/trunk/ChangeLog pure/trunk/matcher.cc Added Paths: ----------- pure/trunk/test/test8.log pure/trunk/test/test8.pure Modified: pure/trunk/ChangeLog =================================================================== --- pure/trunk/ChangeLog 2008-05-04 22:17:09 UTC (rev 53) +++ pure/trunk/ChangeLog 2008-05-05 06:57:21 UTC (rev 54) @@ -1,3 +1,9 @@ +2008-05-05 Albert Graef <Dr....@t-...> + + * matcher.cc (merge_ctrans): Fixed broken mpz_cmp() test causing + transitions on different (instead of equal) bigint constants to be + merged. Reported by Libor Spacek. + 2008-05-04 Albert Graef <Dr....@t-...> * 0.2 release. Modified: pure/trunk/matcher.cc =================================================================== --- pure/trunk/matcher.cc 2008-05-04 22:17:09 UTC (rev 53) +++ pure/trunk/matcher.cc 2008-05-05 06:57:21 UTC (rev 54) @@ -95,7 +95,7 @@ case EXPR::INT: return (x.ival() == t->i)?t->st:0; case EXPR::BIGINT: - return (mpz_cmp(x.zval(), t->z))?t->st:0; + return (mpz_cmp(x.zval(), t->z) == 0)?t->st:0; case EXPR::DBL: return (x.dval() == t->d)?t->st:0; case EXPR::STR: @@ -377,7 +377,7 @@ transl::iterator t; // look for a matching transition for (t = tr.begin(); t != tr.end(); t++) { - if (t->tag == EXPR::BIGINT && mpz_cmp(t->z, x)) { + if (t->tag == EXPR::BIGINT && mpz_cmp(t->z, x) == 0) { merge_state(t->st, st); return; } else if (t->tag > 0 || t->tag < EXPR::BIGINT) Added: pure/trunk/test/test8.log =================================================================== --- pure/trunk/test/test8.log (rev 0) +++ pure/trunk/test/test8.log 2008-05-05 06:57:21 UTC (rev 54) @@ -0,0 +1,36 @@ +Binomial n/*0:01*/ k/*0:1*/ = Binomial n/*0:01*/ (n/*0:01*/-k/*0:1*/) if n/*0:01*/-k/*0:1*/<k/*0:1*/; +Binomial n/*0:01*/ 0G = 1G; +Binomial n/*0:01*/ 0 = 1; +Binomial n/*0:01*/ 1G = n/*0:01*/; +Binomial n/*0:01*/ 1 = n/*0:01*/; +Binomial n/*0:01*/ k/*0:1*/ = Binomial nm2/*0:*/ (k/*1:1*/-2)+2*Binomial nm2/*0:*/ (k/*1:1*/-1)+Binomial nm2/*0:*/ k/*1:1*/ when nm2/*0:*/ = n/*0:01*/-2 { + rule #0: nm2 = n-2 + state 0: #0 + <var> state 1 + state 1: #0 +} end; +{ + rule #0: Binomial n k = Binomial n (n-k) if n-k<k + rule #1: Binomial n 0G = 1G + rule #2: Binomial n 0 = 1 + rule #3: Binomial n 1G = n + rule #4: Binomial n 1 = n + rule #5: Binomial n k = Binomial nm2 (k-2)+2*Binomial nm2 (k-1)+Binomial nm2 k when nm2 = n-2 end + state 0: #0 #1 #2 #3 #4 #5 + <var> state 1 + state 1: #0 #1 #2 #3 #4 #5 + <var> state 2 + 0::int state 3 + 1::int state 4 + 0G::bigint state 5 + 1G::bigint state 6 + state 2: #0 #5 + state 3: #0 #2 #5 + state 4: #0 #4 #5 + state 5: #0 #1 #5 + state 6: #0 #3 #5 +} +Binomial 5 2; +10 +Binomial 5G 2G; +10G Added: pure/trunk/test/test8.pure =================================================================== --- pure/trunk/test/test8.pure (rev 0) +++ pure/trunk/test/test8.pure 2008-05-05 06:57:21 UTC (rev 54) @@ -0,0 +1,13 @@ +Binomial n k = Binomial n (n-k) if n-k < k; +Binomial n 0G = 1G; +Binomial n 0 = 1; +Binomial n 1G = n; +Binomial n 1 = n; +Binomial n k = + Binomial nm2 (k-2) + + 2 * Binomial nm2 (k-1) + + Binomial nm2 k + when nm2 = n-2 end; + +Binomial 5 2; +Binomial 5G 2G; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |