1 /**
2  *          __                        __                  __     __
3  *         / /                       /_/ _____            \ \   /_/
4  *   _____/ / _____     __   ___    __  / ___ \  _____    / /  __  __  ___  _____
5  *  / ___  / / ___ \    \ \_/__/   / / / _____/ / ___ \  / /  / / / /_/  / / ___ \
6  * / /__/ / / /__/  \   / _/      / / / /__/ / / _____/ / /  / / / _/ / / / /__/ /
7  * \_____/  \_____/\_\ /_/  __   / /  \_____/ / /__/ /  \_\ /_/ /_/  /_/ _\___  /
8  *                         / /__/ /           \_____/                   / /__/ /
9  *                         \_____/                                      \_____/
10  *
11  * A module for assertion functions
12  *
13  * Copyright: (C) Kazuhiro Matsushima 2016.
14  * License:   <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
15  * Authors:   Kazuhiro Matsushima
16  */
17 module darjeeling.assertion;
18 
19 import std.stdio : writefln;
20 
21 package void assertObjEquals(TLhs, TRhs)(TLhs expected, TRhs actual)
22 {
23     if (expected != actual)
24     {
25         writefln("Expect: %s", expected);
26         writefln("Actual: %s", actual);
27         assert(false);
28     }
29 }
30 
31 package void assertEquals(T)(T expected, T actual)
32 {
33     if (expected != actual)
34     {
35         writefln("Expect: %s", expected);
36         writefln("Actual: %s", actual);
37         assert(false);
38     }
39 }
40 
41 package void assertNotObjEquals(TLhs, TRhs)(TLhs expected, TRhs actual)
42 {
43     if (expected == actual)
44     {
45         writefln("Expect: Not %s", expected);
46         writefln("Actual:     %s", actual);
47         assert(false);
48     }
49 }
50 
51 package void assertNotEquals(T)(T expected, T actual)
52 {
53     if (expected == actual)
54     {
55         writefln("Expect: Not %s", expected);
56         writefln("Actual:     %s", actual);
57         assert(false);
58     }
59 }
60 
61 package Throwable trap(TReturn)(TReturn function() f)
62 {
63     try
64     {
65         f();
66     }
67     catch (Throwable th)
68     {
69         return th;
70     }
71     assert(false);
72 }
73 
74 package Throwable trap(TIn, TReturn)(TIn target, TReturn function(TIn) f)
75 {
76     try
77     {
78         f(target);
79     }
80     catch (Throwable th)
81     {
82         return th;
83     }
84     assert(false);
85 }