Hex Artifact Content
Not logged in

Artifact fc21831342965670c1f62c511658ad88c18bb0e7:


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                                      ;.}.