http://d.puremagic.com/issues/show_bug.cgi?id=5547
Summary: Improve assert to give information on values given to it when it fails Product: D Version: unspecified Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: DMD AssignedTo: nob...@puremagic.com ReportedBy: jmdavisp...@gmx.com --- Comment #0 from Jonathan M Davis <jmdavisp...@gmx.com> 2011-02-08 07:47:45 PST --- Right now, assert gives no useful information beyond the file and line number where the failure occurred. It really should give information on what the failure was. The recent attempt at getting assertPred in Phobos was to fix this, but it was decided that it would be better to fix assert to do it. So, essentially, when asserts like assert(a == b); assert(a.canFind(b)); fails, it should print out what the arguments to the expression were. For instance, take this from the assertPred docs: assert(collectExceptionMsg!AssertError( assertPred!"=="("hello", "goodbye")) == `assertPred!"==" failed:` ~ "\n" ~ `[hello] (lhs)` ~ "\n" ~ `[goodbye] (rhs).`); On failure assertPred would print out that == failed and that the values given to it were hello and goodbye. Ideally, assert("hello" == "goodbye"); would print something similar. Another example would be assert(collectExceptionMsg!AssertError( assertPred!((int a, int b, int c, float d){return a * b < c * d;}) (22, 4, 5, 1.7)) == `assertPred failed: arguments: [22], [4], [5], [1.7].`); Something similar to this - such as assert((int a, int b, int c, float d){return a * b < c * d;}(22, 4, 5, 1.7)); or assert(22 * 4 < 5 * 1.7); - should print something similar to what assertPred printed. Exactly what the best format should be and exactly what values will be best for assert to print for more complicated expressions, I don't know - that will depend on what is reasonable to implement - but assert should at least make a valiant attempt at printing what the values in the expression were that failed so that the programmer has sufficient debugging information not to have to go and add a debug statement to print out the arguments, because the assert didn't give enough information to properly debug the failure. Also, it was pointed out that assertPred should print values such that they line up on separate lines so that they're easier to compare (which it does in the == case, though not in the case of the more general predicate - perhas it should have). So, it would probably be a good idea for assert to do something similar. These improvements need to be made for assert to be properly usable for unit tests. Otherwise, we're really going to need to add something like assertPred to Phobos. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------