[GiNaC-devel] [SCM] GiNaC -- a C++ library for symbolic computations branch, master, updated. release_1-4-0-406-g9ada7a7
Alexei Sheplyakov
git at ginac.de
Sun Dec 15 16:28:39 CET 2013
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GiNaC -- a C++ library for symbolic computations".
The branch, master has been updated
via 9ada7a7f5c47e512b7bf6057d4c013612be9a33b (commit)
from e5c76f659e2e882da3d5dba60502d6851f782bf3 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 9ada7a7f5c47e512b7bf6057d4c013612be9a33b
Author: Matthias Dellweg <dellweg at tp1.uni-duesseldorf.de>
Date: Tue Dec 10 10:55:28 2013 +0200
expairseq::match(): no side effects if match failed. Fixes spurious match failures.
> match(sin(y)*exp(b)+sin(x)*exp(a), sin($0)*exp(a)+exp(b)*sin($1))
FAIL
The reason is that expairseq::match() might assign a wildcard even if
the match fails. The first attempted submatch is sin(y)*exp(b) with
sin($0)*exp(a). It fails (as it should) but $0 == y gets assigned as
a side effect (which is wrong). Next submatch is sin(x)*exp(a) with
sin($0)*exp(a) (the same pattern as in the first submatch). This one
fails because of spurious $0 == y assignment.
Due to the unpredicatable term ordering the sequence of submatches might
be different and the match might succeed (as it should). This makes
debugging a bit more funny.
Signed-off-by: Matthias Dellweg <dellweg at tp1.uni-duesseldorf.de>
[Alexei Sheplyakov: figure out the cause of the problem, make a test case]
-----------------------------------------------------------------------
Summary of changes:
check/match_bug.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++
ginac/expairseq.cpp | 26 +++++++++++++++++++++-----
2 files changed, 65 insertions(+), 5 deletions(-)
hooks/post-receive
--
GiNaC -- a C++ library for symbolic computations
More information about the GiNaC-devel
mailing list