0000: 2f 2a 2a 0a 20 2a 20 41 75 74 68 6f 72 73 3a 20 /**. * Authors:
0010: 6b 2e 69 6e 61 62 61 0a 20 2a 20 4c 69 63 65 6e k.inaba. * Licen
0020: 73 65 3a 20 4e 59 53 4c 20 30 2e 39 39 38 32 20 se: NYSL 0.9982
0030: 68 74 74 70 3a 2f 2f 77 77 77 2e 6b 6d 6f 6e 6f http://www.kmono
0040: 73 2e 6e 65 74 2f 6e 79 73 6c 2f 0a 20 2a 0a 20 s.net/nysl/. *.
0050: 2a 20 55 6e 69 74 74 65 73 74 20 68 65 6c 70 65 * Unittest helpe
0060: 72 73 2e 0d 0a 20 2a 20 54 4f 44 4f 3a 20 75 73 rs... * TODO: us
0070: 65 20 73 74 64 65 72 72 20 69 6e 73 74 65 61 64 e stderr instead
0080: 20 6f 66 20 73 74 64 6f 75 74 2e 20 74 68 65 20 of stdout. the
0090: 70 72 6f 62 6c 65 6d 20 69 73 20 74 68 61 74 20 problem is that
00a0: 73 74 64 2e 63 73 74 72 65 61 6d 20 69 73 20 78 std.cstream is x
00b0: 78 78 78 2e 2e 2e 2e 0a 20 2a 20 54 4f 44 4f 3a xxx..... * TODO:
00c0: 20 69 73 20 74 68 65 72 65 20 61 6e 79 20 77 61 is there any wa
00d0: 79 20 74 6f 20 63 6c 65 61 72 6e 6c 79 20 69 6d y to clearnly im
00e0: 70 6c 65 6d 65 6e 74 20 22 61 73 73 65 72 74 5f plement "assert_
00f0: 63 6f 6d 70 69 6c 65 73 22 20 61 6e 64 20 22 61 compiles" and "a
0100: 73 73 65 72 74 5f 6e 6f 74 5f 63 6f 6d 70 69 6c ssert_not_compil
0110: 65 22 3f 0d 0a 20 2a 2f 0a 6d 6f 64 75 6c 65 20 e"?.. */.module
0120: 74 72 69 63 6b 73 2e 74 65 73 74 3b 0d 0a 69 6d tricks.test;..im
0130: 70 6f 72 74 20 73 74 64 2e 63 6f 6e 76 20 3a 20 port std.conv :
0140: 74 6f 3b 0a 69 6d 70 6f 72 74 20 63 6f 72 65 2e to;.import core.
0150: 65 78 63 65 70 74 69 6f 6e 3b 0a 0d 0a 76 65 72 exception;...ver
0160: 73 69 6f 6e 28 75 6e 69 74 74 65 73 74 29 0d 0a sion(unittest)..
0170: 7b 0d 0a 09 69 6d 70 6f 72 74 20 73 74 64 2e 73 {...import std.s
0180: 74 64 69 6f 3b 0d 0a 09 69 6d 70 6f 72 74 20 63 tdio;...import c
0190: 6f 72 65 2e 72 75 6e 74 69 6d 65 3b 0d 0a 0d 0a ore.runtime;....
01a0: 09 2f 2f 20 49 6e 73 74 61 6c 6c 20 63 75 73 74 .// Install cust
01b0: 6f 6d 20 74 65 73 74 20 72 75 6e 6e 65 72 0d 0a om test runner..
01c0: 09 73 74 61 74 69 63 20 74 68 69 73 28 29 0d 0a .static this()..
01d0: 09 7b 0d 0a 09 09 52 75 6e 74 69 6d 65 2e 6d 6f .{....Runtime.mo
01e0: 64 75 6c 65 55 6e 69 74 54 65 73 74 65 72 20 3d duleUnitTester =
01f0: 20 66 75 6e 63 74 69 6f 6e 28 29 0d 0a 09 09 7b function()....{
0200: 0d 0a 09 09 09 54 68 72 6f 77 61 62 6c 65 20 65 .....Throwable e
0210: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 09 09 09 73 69 e = null;.....si
0220: 7a 65 5f 74 20 66 61 69 6c 65 64 3d 30 3b 0d 0a ze_t failed=0;..
0230: 09 09 09 66 6f 72 65 61 63 68 28 6d 3b 20 4d 6f ...foreach(m; Mo
0240: 64 75 6c 65 49 6e 66 6f 29 20 69 66 28 6d 29 20 duleInfo) if(m)
0250: 69 66 28 61 75 74 6f 20 66 70 3d 6d 2e 75 6e 69 if(auto fp=m.uni
0260: 74 54 65 73 74 29 0d 0a 09 09 09 7b 0d 0a 09 09 tTest).....{....
0270: 09 09 77 72 69 74 65 6c 6e 28 22 5b 54 45 53 54 ..writeln("[TEST
0280: 5d 20 22 2c 20 6d 2e 6e 61 6d 65 29 3b 0d 0a 09 ] ", m.name);...
0290: 09 09 09 74 72 79 20 7b 0d 0a 09 09 09 09 09 66 ...try {.......f
02a0: 70 28 29 3b 0d 0a 09 09 09 09 7d 20 63 61 74 63 p();......} catc
02b0: 68 28 20 54 68 72 6f 77 61 62 6c 65 20 65 20 29 h( Throwable e )
02c0: 20 7b 0d 0a 09 09 09 09 09 69 66 28 65 65 20 69 {.......if(ee i
02d0: 73 20 6e 75 6c 6c 29 0d 0a 09 09 09 09 09 09 65 s null)........e
02e0: 65 20 3d 20 65 3b 0d 0a 09 09 09 09 09 66 61 69 e = e;.......fai
02f0: 6c 65 64 2b 2b 3b 0d 0a 09 09 09 09 09 77 72 69 led++;.......wri
0300: 74 65 6c 6e 28 22 20 20 21 21 20 22 2c 65 2e 66 teln(" !! ",e.f
0310: 69 6c 65 2c 22 28 22 2c 65 2e 6c 69 6e 65 2c 22 ile,"(",e.line,"
0320: 29 3a 20 22 2c 65 2e 6d 73 67 29 3b 0d 0a 09 09 ): ",e.msg);....
0330: 09 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09 09 69 66 ..}.....}.....if
0340: 28 65 65 20 21 69 73 20 6e 75 6c 6c 29 0d 0a 09 (ee !is null)...
0350: 09 09 7b 0d 0a 09 09 09 09 77 72 69 74 65 6c 6e ..{......writeln
0360: 28 22 5b 54 45 53 54 5d 20 22 2c 66 61 69 6c 65 ("[TEST] ",faile
0370: 64 2c 22 20 6d 6f 64 75 6c 65 73 20 66 61 69 6c d," modules fail
0380: 65 64 2e 20 54 68 65 20 66 69 72 73 74 20 65 72 ed. The first er
0390: 72 6f 72 20 77 61 73 3a 22 29 3b 0d 0a 09 09 09 ror was:");.....
03a0: 09 77 72 69 74 65 6c 6e 28 65 65 29 3b 0d 0a 09 .writeln(ee);...
03b0: 09 09 09 77 72 69 74 65 28 22 5b 54 45 53 54 5d ...write("[TEST]
03c0: 20 70 72 65 73 73 20 65 6e 74 65 72 20 74 6f 20 press enter to
03d0: 65 78 69 74 2e 22 29 3b 0d 0a 09 09 09 09 72 65 exit.");......re
03e0: 61 64 6c 6e 28 29 3b 0d 0a 09 09 09 09 72 65 74 adln();......ret
03f0: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 09 09 09 7d urn false;.....}
0400: 0d 0a 09 09 09 72 65 74 75 72 6e 20 74 72 75 65 .....return true
0410: 3b 0d 0a 09 09 7d 3b 0d 0a 09 7d 0d 0a 7d 0d 0a ;....};...}..}..
0420: 0d 0a 2f 2f 2f 20 55 6e 69 74 74 65 73 74 20 68 ../// Unittest h
0430: 65 6c 70 65 72 20 74 68 61 74 20 61 73 73 65 72 elper that asser
0440: 74 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e ts an expression
0450: 20 6d 75 73 74 20 74 68 72 6f 77 20 73 6f 6d 65 must throw some
0460: 74 68 69 6e 67 0a 0a 76 6f 69 64 20 61 73 73 65 thing..void asse
0470: 72 74 5f 74 68 72 6f 77 28 45 78 63 54 3d 54 68 rt_throw(ExcT=Th
0480: 72 6f 77 61 62 6c 65 2c 20 54 2c 20 73 74 72 69 rowable, T, stri
0490: 6e 67 20 66 6e 3d 5f 5f 46 49 4c 45 5f 5f 2c 20 ng fn=__FILE__,
04a0: 73 69 7a 65 5f 74 20 6c 6e 3d 5f 5f 4c 49 4e 45 size_t ln=__LINE
04b0: 5f 5f 29 28 6c 61 7a 79 20 54 20 74 2c 20 73 74 __)(lazy T t, st
04c0: 72 69 6e 67 20 6d 73 67 3d 22 22 29 0a 7b 0d 0a ring msg="").{..
04d0: 09 73 74 61 74 69 63 20 69 66 28 20 69 73 28 45 .static if( is(E
04e0: 78 63 54 20 3d 3d 20 54 68 72 6f 77 61 62 6c 65 xcT == Throwable
04f0: 29 20 29 0a 09 09 74 72 79 0d 0a 09 09 09 7b 20 ) )...try.....{
0500: 74 28 29 3b 20 7d 0d 0a 09 09 63 61 74 63 68 28 t(); }....catch(
0510: 45 78 63 54 29 0d 0a 09 09 09 7b 20 72 65 74 75 ExcT).....{ retu
0520: 72 6e 3b 20 7d 0d 0a 09 65 6c 73 65 0d 0a 09 09 rn; }...else....
0530: 74 72 79 0a 09 09 09 7b 20 74 28 29 3b 20 7d 0a try....{ t(); }.
0540: 09 09 63 61 74 63 68 28 45 78 63 54 29 0a 09 09 ..catch(ExcT)...
0550: 09 7b 20 72 65 74 75 72 6e 3b 20 7d 0a 09 09 63 .{ return; }...c
0560: 61 74 63 68 28 54 68 72 6f 77 61 62 6c 65 20 65 atch(Throwable e
0570: 29 0a 09 09 09 7b 20 6f 6e 41 73 73 65 72 74 45 )....{ onAssertE
0580: 72 72 6f 72 4d 73 67 28 66 6e 2c 20 6c 6e 2c 20 rrorMsg(fn, ln,
0590: 6d 73 67 2e 6c 65 6e 67 74 68 20 3f 20 6d 73 67 msg.length ? msg
05a0: 20 3a 20 22 62 61 64 20 65 78 63 65 70 74 69 6f : "bad exceptio
05b0: 6e 20 5c 6e 20 20 3e 3e 20 22 7e 65 2e 74 6f 53 n \n >> "~e.toS
05c0: 74 72 69 6e 67 28 29 29 3b 20 7d 0d 0a 09 6f 6e tring()); }...on
05d0: 41 73 73 65 72 74 45 72 72 6f 72 4d 73 67 28 66 AssertErrorMsg(f
05e0: 6e 2c 20 6c 6e 2c 20 6d 73 67 2e 6c 65 6e 67 74 n, ln, msg.lengt
05f0: 68 20 3f 20 6d 73 67 20 3a 20 22 6e 6f 74 20 74 h ? msg : "not t
0600: 68 72 6f 77 6e 22 29 3b 0a 7d 0a 0a 2f 2f 2f 20 hrown");.}..///
0610: 55 6e 69 74 74 65 73 74 20 68 65 6c 70 65 72 20 Unittest helper
0620: 74 68 61 74 20 61 73 73 65 72 74 73 20 61 6e 20 that asserts an
0630: 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 20 expression must
0640: 6e 6f 74 20 74 68 72 6f 77 20 61 6e 79 74 68 69 not throw anythi
0650: 6e 67 0a 0a 54 20 61 73 73 65 72 74 5f 6e 6f 74 ng..T assert_not
0660: 68 72 6f 77 28 54 2c 20 73 74 72 69 6e 67 20 66 hrow(T, string f
0670: 6e 3d 5f 5f 46 49 4c 45 5f 5f 2c 20 73 69 7a 65 n=__FILE__, size
0680: 5f 74 20 6c 6e 3d 5f 5f 4c 49 4e 45 5f 5f 29 28 _t ln=__LINE__)(
0690: 6c 61 7a 79 20 54 20 74 2c 20 73 74 72 69 6e 67 lazy T t, string
06a0: 20 6d 73 67 3d 22 22 29 0a 7b 0a 09 74 72 79 0a msg="").{..try.
06b0: 09 09 7b 20 72 65 74 75 72 6e 20 74 28 29 3b 20 ..{ return t();
06c0: 7d 0a 09 63 61 74 63 68 28 54 68 72 6f 77 61 62 }..catch(Throwab
06d0: 6c 65 20 65 29 0a 09 09 7b 20 6f 6e 41 73 73 65 le e)...{ onAsse
06e0: 72 74 45 72 72 6f 72 4d 73 67 28 66 6e 2c 20 6c rtErrorMsg(fn, l
06f0: 6e 2c 20 6d 73 67 2e 6c 65 6e 67 74 68 20 3f 20 n, msg.length ?
0700: 6d 73 67 20 3a 20 22 62 61 64 20 65 78 63 65 70 msg : "bad excep
0710: 74 69 6f 6e 20 5c 6e 20 20 3e 3e 20 22 7e 65 2e tion \n >> "~e.
0720: 74 6f 53 74 72 69 6e 67 28 29 29 3b 20 7d 0d 0a toString()); }..
0730: 09 61 73 73 65 72 74 28 66 61 6c 73 65 29 3b 0a .assert(false);.
0740: 7d 0a 0d 0a 75 6e 69 74 74 65 73 74 0a 7b 0a 09 }...unittest.{..
0750: 61 75 74 6f 20 65 72 72 6f 72 20 3d 20 7b 74 68 auto error = {th
0760: 72 6f 77 20 6e 65 77 20 45 72 72 6f 72 28 22 68 row new Error("h
0770: 65 6c 6c 6f 22 29 3b 7d 3b 0a 09 61 75 74 6f 20 ello");};..auto
0780: 6e 6f 74 68 69 6e 67 20 3d 20 28 29 7b 7d 3b 0a nothing = (){};.
0790: 09 61 75 74 6f 20 61 73 73 65 72 74 45 72 72 6f .auto assertErro
07a0: 72 20 3d 20 7b 61 73 73 65 72 74 28 30 29 3b 7d r = {assert(0);}
07b0: 3b 0a 0a 09 61 73 73 65 72 74 5f 6e 6f 74 68 72 ;...assert_nothr
07c0: 6f 77 20 20 20 20 20 20 20 20 20 20 28 20 61 73 ow ( as
07d0: 73 65 72 74 5f 6e 6f 74 68 72 6f 77 28 6e 6f 74 sert_nothrow(not
07e0: 68 69 6e 67 28 29 29 20 29 3b 0a 09 61 73 73 65 hing()) );..asse
07f0: 72 74 5f 74 68 72 6f 77 21 41 73 73 65 72 74 45 rt_throw!AssertE
0800: 72 72 6f 72 28 20 61 73 73 65 72 74 5f 6e 6f 74 rror( assert_not
0810: 68 72 6f 77 28 65 72 72 6f 72 28 29 29 20 29 3b hrow(error()) );
0820: 0a 09 61 73 73 65 72 74 5f 74 68 72 6f 77 21 41 ..assert_throw!A
0830: 73 73 65 72 74 45 72 72 6f 72 28 20 61 73 73 65 ssertError( asse
0840: 72 74 5f 6e 6f 74 68 72 6f 77 28 61 73 73 65 72 rt_nothrow(asser
0850: 74 45 72 72 6f 72 28 29 29 20 29 3b 0a 0a 09 61 tError()) );...a
0860: 73 73 65 72 74 5f 6e 6f 74 68 72 6f 77 20 20 20 ssert_nothrow
0870: 20 20 20 20 20 20 20 28 20 61 73 73 65 72 74 5f ( assert_
0880: 74 68 72 6f 77 21 45 72 72 6f 72 28 65 72 72 6f throw!Error(erro
0890: 72 28 29 29 20 29 3b 0a 09 61 73 73 65 72 74 5f r()) );..assert_
08a0: 74 68 72 6f 77 21 41 73 73 65 72 74 45 72 72 6f throw!AssertErro
08b0: 72 28 20 61 73 73 65 72 74 5f 74 68 72 6f 77 21 r( assert_throw!
08c0: 45 72 72 6f 72 28 6e 6f 74 68 69 6e 67 28 29 29 Error(nothing())
08d0: 20 29 3b 0a 09 61 73 73 65 72 74 5f 6e 6f 74 68 );..assert_noth
08e0: 72 6f 77 20 20 20 20 20 20 20 20 20 20 28 20 61 row ( a
08f0: 73 73 65 72 74 5f 74 68 72 6f 77 21 45 72 72 6f ssert_throw!Erro
0900: 72 28 61 73 73 65 72 74 45 72 72 6f 72 28 29 29 r(assertError())
0910: 20 29 3b 0a 09 61 73 73 65 72 74 5f 74 68 72 6f );..assert_thro
0920: 77 21 41 73 73 65 72 74 45 72 72 6f 72 28 20 61 w!AssertError( a
0930: 73 73 65 72 74 5f 74 68 72 6f 77 21 41 73 73 65 ssert_throw!Asse
0940: 72 74 45 72 72 6f 72 28 65 72 72 6f 72 28 29 29 rtError(error())
0950: 20 29 3b 0d 0a 7d 0a 0d 0a 74 65 6d 70 6c 61 74 );..}...templat
0960: 65 20 61 73 73 65 72 74 4f 70 28 73 74 72 69 6e e assertOp(strin
0970: 67 20 6f 70 29 0a 7b 0a 09 76 6f 69 64 20 61 73 g op).{..void as
0980: 73 65 72 74 4f 70 28 41 2c 20 42 2c 20 73 74 72 sertOp(A, B, str
0990: 69 6e 67 20 66 6e 3d 5f 5f 46 49 4c 45 5f 5f 2c ing fn=__FILE__,
09a0: 20 73 69 7a 65 5f 74 20 6c 6e 3d 5f 5f 4c 49 4e size_t ln=__LIN
09b0: 45 5f 5f 29 28 41 20 61 2c 20 42 20 62 2c 20 73 E__)(A a, B b, s
09c0: 74 72 69 6e 67 20 6d 73 67 3d 22 22 29 0a 09 7b tring msg="")..{
09d0: 0a 09 09 74 72 79 0a 09 09 09 7b 20 69 66 28 20 ...try....{ if(
09e0: 6d 69 78 69 6e 28 22 61 22 7e 6f 70 7e 22 62 22 mixin("a"~op~"b"
09f0: 29 20 29 20 72 65 74 75 72 6e 3b 20 7d 0a 09 09 ) ) return; }...
0a00: 63 61 74 63 68 28 54 68 72 6f 77 61 62 6c 65 20 catch(Throwable
0a10: 65 29 0a 09 09 09 7b 20 6f 6e 41 73 73 65 72 74 e)....{ onAssert
0a20: 45 72 72 6f 72 4d 73 67 28 66 6e 2c 20 6c 6e 2c ErrorMsg(fn, ln,
0a30: 20 6d 73 67 2e 6c 65 6e 67 74 68 20 3f 20 6d 73 msg.length ? ms
0a40: 67 20 3a 20 22 62 61 64 20 65 78 63 65 70 74 69 g : "bad excepti
0a50: 6f 6e 20 5c 6e 20 20 3e 3e 20 22 7e 65 2e 74 6f on \n >> "~e.to
0a60: 53 74 72 69 6e 67 28 29 29 3b 20 7d 0d 0a 09 09 String()); }....
0a70: 6f 6e 41 73 73 65 72 74 45 72 72 6f 72 4d 73 67 onAssertErrorMsg
0a80: 28 66 6e 2c 20 6c 6e 2c 20 6d 73 67 2e 6c 65 6e (fn, ln, msg.len
0a90: 67 74 68 20 3f 20 6d 73 67 20 3a 20 74 6f 21 73 gth ? msg : to!s
0aa0: 74 72 69 6e 67 28 61 29 7e 22 20 21 22 7e 6f 70 tring(a)~" !"~op
0ab0: 7e 22 20 22 7e 74 6f 21 73 74 72 69 6e 67 28 62 ~" "~to!string(b
0ac0: 29 29 3b 0a 09 7d 0a 7d 0a 0a 61 6c 69 61 73 20 ));..}.}..alias
0ad0: 61 73 73 65 72 74 4f 70 21 28 60 3d 3d 60 29 20 assertOp!(`==`)
0ae0: 61 73 73 65 72 74 5f 65 71 3b 20 2f 2f 2f 20 61 assert_eq; /// a
0af0: 73 73 65 72 74 73 20 74 77 6f 20 6f 70 65 72 61 sserts two opera
0b00: 6e 64 73 20 61 72 65 20 3d 3d 0a 61 6c 69 61 73 nds are ==.alias
0b10: 20 61 73 73 65 72 74 4f 70 21 28 60 21 3d 60 29 assertOp!(`!=`)
0b20: 20 61 73 73 65 72 74 5f 6e 65 3b 20 2f 2f 2f 20 assert_ne; ///
0b30: 61 73 73 65 72 74 73 20 74 77 6f 20 6f 70 65 72 asserts two oper
0b40: 61 6e 64 73 20 61 72 65 20 21 3d 0a 61 6c 69 61 ands are !=.alia
0b50: 73 20 61 73 73 65 72 74 4f 70 21 28 60 3c 60 29 s assertOp!(`<`)
0b60: 20 20 61 73 73 65 72 74 5f 6c 74 3b 20 2f 2f 2f assert_lt; ///
0b70: 20 61 73 73 65 72 74 73 20 74 77 6f 20 6f 70 65 asserts two ope
0b80: 72 61 6e 64 73 20 61 72 65 20 3c 0a 61 6c 69 61 rands are <.alia
0b90: 73 20 61 73 73 65 72 74 4f 70 21 28 60 3c 3d 60 s assertOp!(`<=`
0ba0: 29 20 61 73 73 65 72 74 5f 6c 65 3b 20 2f 2f 2f ) assert_le; ///
0bb0: 20 61 73 73 65 72 74 73 20 74 77 6f 20 6f 70 65 asserts two ope
0bc0: 72 61 6e 64 73 20 61 72 65 20 3c 3d 0a 61 6c 69 rands are <=.ali
0bd0: 61 73 20 61 73 73 65 72 74 4f 70 21 28 60 3e 60 as assertOp!(`>`
0be0: 29 20 20 61 73 73 65 72 74 5f 67 74 3b 20 2f 2f ) assert_gt; //
0bf0: 2f 20 61 73 73 65 72 74 73 20 74 77 6f 20 6f 70 / asserts two op
0c00: 65 72 61 6e 64 73 20 61 72 65 20 3e 0a 61 6c 69 erands are >.ali
0c10: 61 73 20 61 73 73 65 72 74 4f 70 21 28 60 3e 3d as assertOp!(`>=
0c20: 60 29 20 61 73 73 65 72 74 5f 67 65 3b 20 2f 2f `) assert_ge; //
0c30: 2f 20 61 73 73 65 72 74 73 20 74 77 6f 20 6f 70 / asserts two op
0c40: 65 72 61 6e 64 73 20 61 72 65 20 3e 3d 0d 0a 0d erands are >=...
0c50: 0a 75 6e 69 74 74 65 73 74 0a 7b 0a 09 61 73 73 .unittest.{..ass
0c60: 65 72 74 5f 6e 6f 74 68 72 6f 77 28 20 61 73 73 ert_nothrow( ass
0c70: 65 72 74 5f 65 71 28 31 2c 20 31 29 20 29 3b 0a ert_eq(1, 1) );.
0c80: 09 61 73 73 65 72 74 5f 6e 6f 74 68 72 6f 77 28 .assert_nothrow(
0c90: 20 61 73 73 65 72 74 5f 6e 65 28 31 2c 20 30 29 assert_ne(1, 0)
0ca0: 20 29 3b 0a 09 61 73 73 65 72 74 5f 6e 6f 74 68 );..assert_noth
0cb0: 72 6f 77 28 20 61 73 73 65 72 74 5f 6c 74 28 30 row( assert_lt(0
0cc0: 2c 20 31 29 20 29 3b 0a 09 61 73 73 65 72 74 5f , 1) );..assert_
0cd0: 6e 6f 74 68 72 6f 77 28 20 61 73 73 65 72 74 5f nothrow( assert_
0ce0: 6c 65 28 30 2c 20 31 29 20 29 3b 0a 09 61 73 73 le(0, 1) );..ass
0cf0: 65 72 74 5f 6e 6f 74 68 72 6f 77 28 20 61 73 73 ert_nothrow( ass
0d00: 65 72 74 5f 6c 65 28 30 2c 20 30 29 20 29 3b 0a ert_le(0, 0) );.
0d10: 09 61 73 73 65 72 74 5f 6e 6f 74 68 72 6f 77 28 .assert_nothrow(
0d20: 20 61 73 73 65 72 74 5f 67 74 28 31 2c 20 30 29 assert_gt(1, 0)
0d30: 20 29 3b 0a 09 61 73 73 65 72 74 5f 6e 6f 74 68 );..assert_noth
0d40: 72 6f 77 28 20 61 73 73 65 72 74 5f 67 65 28 31 row( assert_ge(1
0d50: 2c 20 30 29 20 29 3b 0a 09 61 73 73 65 72 74 5f , 0) );..assert_
0d60: 6e 6f 74 68 72 6f 77 28 20 61 73 73 65 72 74 5f nothrow( assert_
0d70: 67 65 28 30 2c 20 30 29 20 29 3b 0a 0a 09 61 73 ge(0, 0) );...as
0d80: 73 65 72 74 5f 74 68 72 6f 77 21 41 73 73 65 72 sert_throw!Asser
0d90: 74 45 72 72 6f 72 28 20 61 73 73 65 72 74 5f 65 tError( assert_e
0da0: 71 28 31 2c 20 30 29 20 29 3b 0a 09 61 73 73 65 q(1, 0) );..asse
0db0: 72 74 5f 74 68 72 6f 77 21 41 73 73 65 72 74 45 rt_throw!AssertE
0dc0: 72 72 6f 72 28 20 61 73 73 65 72 74 5f 6e 65 28 rror( assert_ne(
0dd0: 31 2c 20 31 29 20 29 3b 0a 09 61 73 73 65 72 74 1, 1) );..assert
0de0: 5f 74 68 72 6f 77 21 41 73 73 65 72 74 45 72 72 _throw!AssertErr
0df0: 6f 72 28 20 61 73 73 65 72 74 5f 6c 74 28 31 2c or( assert_lt(1,
0e00: 20 31 29 20 29 3b 0a 09 61 73 73 65 72 74 5f 74 1) );..assert_t
0e10: 68 72 6f 77 21 41 73 73 65 72 74 45 72 72 6f 72 hrow!AssertError
0e20: 28 20 61 73 73 65 72 74 5f 6c 74 28 31 2c 20 30 ( assert_lt(1, 0
0e30: 29 20 29 3b 0a 09 61 73 73 65 72 74 5f 74 68 72 ) );..assert_thr
0e40: 6f 77 21 41 73 73 65 72 74 45 72 72 6f 72 28 20 ow!AssertError(
0e50: 61 73 73 65 72 74 5f 6c 65 28 31 2c 20 30 29 20 assert_le(1, 0)
0e60: 29 3b 0a 09 61 73 73 65 72 74 5f 74 68 72 6f 77 );..assert_throw
0e70: 21 41 73 73 65 72 74 45 72 72 6f 72 28 20 61 73 !AssertError( as
0e80: 73 65 72 74 5f 67 74 28 30 2c 20 30 29 20 29 3b sert_gt(0, 0) );
0e90: 0a 09 61 73 73 65 72 74 5f 74 68 72 6f 77 21 41 ..assert_throw!A
0ea0: 73 73 65 72 74 45 72 72 6f 72 28 20 61 73 73 65 ssertError( asse
0eb0: 72 74 5f 67 74 28 30 2c 20 31 29 20 29 3b 0a 09 rt_gt(0, 1) );..
0ec0: 61 73 73 65 72 74 5f 74 68 72 6f 77 21 41 73 73 assert_throw!Ass
0ed0: 65 72 74 45 72 72 6f 72 28 20 61 73 73 65 72 74 ertError( assert
0ee0: 5f 67 65 28 30 2c 20 31 29 20 29 3b 0a 0a 09 63 _ge(0, 1) );...c
0ef0: 6c 61 73 73 20 54 65 6d 70 20 7b 20 62 6f 6f 6c lass Temp { bool
0f00: 20 6f 70 45 71 75 61 6c 73 28 69 6e 74 20 78 29 opEquals(int x)
0f10: 7b 72 65 74 75 72 6e 20 78 2f 78 3d 3d 78 3b 7d {return x/x==x;}
0f20: 20 7d 0a 09 61 73 73 65 72 74 5f 74 68 72 6f 77 }..assert_throw
0f30: 21 41 73 73 65 72 74 45 72 72 6f 72 28 20 61 73 !AssertError( as
0f40: 73 65 72 74 5f 65 71 28 6e 65 77 20 54 65 6d 70 sert_eq(new Temp
0f50: 2c 20 30 29 20 29 3b 0a 09 61 73 73 65 72 74 5f , 0) );..assert_
0f60: 6e 6f 74 68 72 6f 77 20 20 20 20 20 20 20 20 20 nothrow
0f70: 20 28 20 61 73 73 65 72 74 5f 65 71 28 6e 65 77 ( assert_eq(new
0f80: 20 54 65 6d 70 2c 20 31 29 20 29 3b 0a 09 61 73 Temp, 1) );..as
0f90: 73 65 72 74 5f 74 68 72 6f 77 21 41 73 73 65 72 sert_throw!Asser
0fa0: 74 45 72 72 6f 72 28 20 61 73 73 65 72 74 5f 65 tError( assert_e
0fb0: 71 28 6e 65 77 20 54 65 6d 70 2c 20 32 29 20 29 q(new Temp, 2) )
0fc0: 3b 0a 7d 0a ;.}.