dunit r247

Nick Sabalausky a at a.a
Thu Mar 19 18:17:18 PDT 2009


"Nick Sabalausky" <a at a.a> wrote in message 
news:gpunvp$20u8$1 at digitalmars.com...
>
> Granted, this doesn't currently output foo's actual value, but it probably
> wouldn't be too hard to modify it to do so via std.algorithm-style 
> trickery.
>

Done <g>. New alternate-assert module is attached.

Sample usage:

--------------
module nonFatalAssertTest.main;

import semitwist.util.nonFatalAssert;

void main()
{
    FatalizeAsserts();
    // Main program code here
}

unittest
{
    int foo = 2;
    char[] bar = "hello";

    // *REALLY* need a way for a template to automatically get
    // the file/line of instantiation.
    // Improvement to mixin syntax would also be nice
    // Also, my editor doesn't know that backticks indicate a string,
    // so it's still properly highlighted as code :)
    mixin(NonFatalAssert!(__LINE__, __FILE__, `foo == 3 || foo > 5`, "foo is 
bad"));
    mixin(NonFatalAssert!(__LINE__, __FILE__, `2 + 2 == 4`, "Basic 
arithmetic"));
    mixin(NonFatalAssert!(__LINE__, __FILE__, `false`));

    mixin(NonFatalEnsure!(__LINE__, __FILE__, foo, `_ == 3 || _ > 5`, 
"ensure foo failed"));
    mixin(NonFatalEnsure!(__LINE__, __FILE__, foo, `_ > 0`));
    mixin(NonFatalEnsure!(__LINE__, __FILE__, bar, `_ == "hola"`));
}
--------------

Output:

--------------
nonFatalAssertTest\main.d(21): Assert Failed (foo == 3 || foo > 5): foo is 
bad
nonFatalAssertTest\main.d(23): Assert Failed (false)
nonFatalAssertTest\main.d(25): Ensure Failed: ensure foo failed
Value 'foo':
Expected: _ == 3 || _ > 5
Actual: 2
nonFatalAssertTest\main.d(27): Ensure Failed
Value 'bar':
Expected: _ == "hola"
Actual: hello
tango.core.Exception.AssertException at semitwist\util\nonFatalAssert.d(86): 4 
Assert Failures
--------------

Sorry if this comes across as thread hijacking, that wasn't my intent. My 
main point is that in D, we don't have to choose between having detailed 
assert messages and having natural syntax for assert's conditional. We can 
have both. 


begin 666 nonFatalAssert.d
M+R\@4V5M:51W:7-T($QI8G)A<GD-"B\O(%=R:71T96X@:6X@=&AE($0@<')O
M9W)A;6UI;F<@;&%N9W5A9V4N#0H-"B\J*B -"D%U=&AO<CH-"B0H5T5"('=W
M=RYS96UI='=I<W0N8V]M+"!.:6-K(%-A8F%L875S:WDI#0H-"D-O;G-I9&5R
M('1H:7,@=&\@8F4@=6YD97(@=&AE('IL:6(@;&EC96YS92X-"BHO#0H-"FUO
M9'5L92!S96UI='=I<W0N=71I;"YN;VY&871A;$%S<V5R=#L-"@T*:6UP;W)T
M('1A;F=O+FEO+E-T9&]U=#L-"FEM<&]R="!T86YG;RYU=&EL+D-O;G9E<G0[
M#0H-"B\J*@T*4V]U;F1S(&QI:V4 at 82!C;VYT<F%D:6-T:6]N(&]F('1E<FUS
M+"!B=70@=&AI<R!I<R!J=7-T#0II;G1E;F1E9"!T;R!A;&QO=R!U;FET=&5S
M=',@=&\@;W5T<'5T($%,3"!F86EL=7)E<R!I;G-T96%D#0IO9B!O;FQY(&]U
M='!U='1I;F<@=&AE(&9I<G-T(&]N92!A;F0@=&AE;B!S=&]P<&EN9RX-"BHO
M#0HO+R J4D5!3$Q9*B!N965D(&$@=V%Y('1O(&=E="!F:6QE+VQI;F4@;V8@
M=&5M<&QA=&4G<R!I;G-T86YT:6%T:6]N#0IT96UP;&%T92!.;VY&871A;$%S
M<V5R="AL;VYG(&QI;F4L(&-H87);72!F:6QE+"!C:&%R6UT at 8V]N9%-T<BP@
M8VAA<EM=(&US9STB(BD-"GL-"@EC;VYS="!C:&%R6UT at 3F]N1F%T86Q!<W-E
M<G0@/0T*"2)[7&XB?@T*"2(@(" @8F]O;"!?3F]N1F%T86Q!<W-E<G1?8V]N
M9%)E<W5L=" ]("@B?F-O;F13=')^(BD[7&XB?@T*"2(@(" @7TYO;D9A=&%L
M07-S97)T(2 at B?FQI;F4N<W1R:6YG;V9^(BP@(GYF:6QE+G-T<FEN9V]F?B(L
M(")^8V]N9%-T<BYS=')I;F=O9GXB+" B?FUS9RYS=')I;F=O9GXB*2A?3F]N
M1F%T86Q!<W-E<G1?8V]N9%)E<W5L="D[7&XB?@T*"2)]7&XB.PT*"2\O<')A
M9VUA*&US9RP@(DYO;D9A=&%L07-S97)T.B B?DYO;D9A=&%L07-S97)T*3L-
M"GT-"@T*8F]O;"!?3F]N1F%T86Q!<W-E<G0H;&]N9R!L:6YE+"!C:&%R6UT@
M9FEL92P at 8VAA<EM=(&-O;F13='(L(&-H87);72!M<V<](B(I*&)O;VP at 8V]N
M9%)E<W5L="D-"GL-"@EI9B at A8V]N9%)E<W5L="D-"@E[#0H)"6YO;D9A=&%L
M07-S97)T0V]U;G0K*SL-"@D)4W1D;W5T+F9O<FUA=&QN*")[?2A[?2DZ($%S
M<V5R="!&86EL960@*'M]*7M](BP-"@D)"0D)"69I;&4L(&QI;F4L(&-O;F13
M='(L#0H)"0D)"0EM<V<]/2(B(#\@(B(@.B B.B B('X@;7-G*3L-"@E]#0H)
M#0H)<F5T=7)N(&-O;F1297-U;'0[#0I]#0H-"G1E;7!L871E($YO;D9A=&%L
M16YS=7)E*&QO;F<@;&EN92P at 8VAA<EM=(&9I;&4L(&%L:6%S('9A;'5E+"!C
M:&%R6UT at 8V]N9%-T<BP at 8VAA<EM=(&US9STB(BD-"GL-"@EC;VYS="!C:&%R
M6UT at 3F]N1F%T86Q%;G-U<F4@/0T*"2)[7&XB?@T*"2(@(" @(GYT>7!E;V8H
M=F%L=64I+G-T<FEN9V]F?B(@7R ]("@B?G9A;'5E+G-T<FEN9V]F?B(I.UQN
M(GX-"@DB(" @(&)O;VP at 7TYO;D9A=&%L16YS=7)E7V-O;F1297-U;'0@/2 H
M(GYC;VYD4W1R?B(I.UQN(GX-"@DB(" @(%].;VY&871A;$5N<W5R92$H(GYL
M:6YE+G-T<FEN9V]F?B(L(")^9FEL92YS=')I;F=O9GXB+"!@(GYV86QU92YS
M=')I;F=O9GXB8"P@(GYC;VYD4W1R+G-T<FEN9V]F?B(L(")^='EP96]F*'9A
M;'5E*2YS=')I;F=O9GXB+" B?FUS9RYS=')I;F=O9GXB*2A?+"!?3F]N1F%T
M86Q%;G-U<F5?8V]N9%)E<W5L="D[7&XB?@T*"2)]7&XB.PT*"2\O<')A9VUA
M*&US9RP@(DYO;D9A=&%L16YS=7)E.B B?DYO;D9A=&%L16YS=7)E*3L-"GT-
M"@T*8F]O;"!?3F]N1F%T86Q%;G-U<F4H;&]N9R!L:6YE+"!C:&%R6UT at 9FEL
M92P at 8VAA<EM=('9A;'5E4W1R+"!C:&%R6UT at 8V]N9%-T<BP at 5"P at 8VAA<EM=
M(&US9STB(BDH5"!V86QU95)E<W5L="P at 8F]O;"!C;VYD4F5S=6QT*0T*>PT*
M"6EF*"%C;VYD4F5S=6QT*0T*"7L-"@D);F]N1F%T86Q!<W-E<G1#;W5N="LK
M.PT*"0E3=&1O=70N9F]R;6%T;&XH(GM]*'M]*3H at 16YS=7)E($9A:6QE9'M]
M7&XB?@T*"0D@(" @(" @(" @(" @(" @(E9A;'5E("=[?2<Z7&XB?@T*"0D)
M"0D)(D5X<&5C=&5D.B![?5QN(GX-"@D)"0D)"2)!8W1U86PZ('M](BP-"@D)
M"0D)"69I;&4L(&QI;F4L(&US9ST](B(@/R B(B Z("(Z("(@?B!M<V<L#0H)
M"0D)"0EV86QU95-T<BP at 8V]N9%-T<BP@=F%L=65297-U;'0I.PT*"7T-"@D-
M"@ER971U<FX at 8V]N9%)E<W5L=#L-"GT-"G!R:79A=&4@=6EN="!N;VY&871A
M;$%S<V5R=$-O=6YT/3 [#0IU:6YT(&=E=$YO;D9A=&%L07-S97)T0V]U;G0H
M*0T*>PT*"7)E='5R;B!N;VY&871A;$%S<V5R=$-O=6YT.PT*?0T*=F]I9"!R
M97-E=$YO;D9A=&%L07-S97)T0V]U;G0H*0T*>PT*"6YO;D9A=&%L07-S97)T
M0V]U;G0@/2 P.PT*?0T*#0IV;VED($9A=&%L:7IE07-S97)T<R at I#0I[#0H)
M:68H9V5T3F]N1F%T86Q!<W-E<G1#;W5N="@I(#X@,"D-"@E[#0H)"5-T9&]U
M="YF;'5S:"@I.PT*"0EA<W-E<G0H9F%L<V4L#0H)"0ET;R$H8VAA<EM=*2AG
M971.;VY&871A;$%S<V5R=$-O=6YT*"DI('X-"@D)"2(@07-S97)T($9A:6QU
M<F4B('X-"@D)"2AG971.;VY&871A;$%S<V5R=$-O=6YT*"D@/3T@,2 _("(B
6(#H@(G,B*0T*"0DI.PT*"7T-"GT-"@``
`
end



More information about the Digitalmars-d-announce mailing list