1 module tests;
2 
3 import tagion.betterC.hibon.HiBONBase;
4 
5 //import tagion.betterC.hibon.HiBONRecord;
6 import tagion.betterC.hibon.BigNumber;
7 import tagion.betterC.utils.BinBuffer;
8 import tagion.betterC.utils.Memory;
9 import tagion.betterC.utils.RBTree;
10 import tagion.betterC.utils.Stack;
11 import tagion.betterC.utils.sdt;
12 import tagion.betterC.utils.LEB128;
13 import core.stdc.stdio;
14 import tagion.betterC.hibon.Document;
15 import tagion.betterC.hibon.HiBON;
16 import tagion.betterC.mobile.Recycle;
17 import tagion.betterC.mobile.WalletWrapperApi;
18 import Bailout = tagion.betterC.utils.Bailout;
19 import tagion.betterC.utils.Text;
20 import tagion.betterC.wallet.KeyRecover;
21 
22 static void callUnittest(string parent, Members...)() {
23     static foreach (i, x; Members) {
24         {
25             enum parentDot = (parent is null) ? "" : parent ~ ".";
26             enum dotMember = parentDot ~ Members[i];
27             static if (is(mixin(dotMember))) {
28                 enum code1 = "alias T1=" ~ parentDot ~ Members[i] ~ ";";
29                 mixin(code1);
30                 static if (is(T1 == struct)) {
31                     alias SubMembers = __traits(allMembers, T1);
32                     printf("\tSub %s\n", T1.stringof.ptr);
33                     static foreach (u; __traits(getUnitTests, T1)) {
34                         Bailout.clear;
35                         printf("\t\t%s\n", u.stringof.ptr);
36                         u();
37                         printf("\t\t");
38                         Bailout.dump;
39                     }
40                     enum SubName = parentDot ~ T1.stringof;
41                     callUnittest!(SubName, SubMembers)();
42                 }
43             }
44         }
45     }
46 }
47 
48 static void callUnittest(alias Module)() {
49     alias Members = __traits(allMembers, Module);
50     printf("%s\n", Module.stringof.ptr);
51     static foreach (u; __traits(getUnitTests, Module)) {
52         import Bailout = tagion.betterC.utils.Bailout;
53 
54         Bailout.clear;
55         printf("\t%s\n", u.stringof.ptr);
56         u();
57         printf("\t");
58         Bailout.dump;
59     }
60     callUnittest!(null, Members)();
61 
62 }
63 
64 //version (unittest) {
65 static if (!__traits(compiles, main())) {
66     extern (C) int main() {
67         printf("Unittest\n");
68         import core.stdc.stdlib;
69 
70         // callUnittest!(tagion.betterC.utils.Memory)();
71         // callUnittest!(tagion.betterC.utils.BinBuffer)();
72         // callUnittest!(tagion.betterC.utils.Text)();
73         // callUnittest!(tagion.betterC.utils.Stack)();
74 
75         // callUnittest!(tagion.betterC.utils.RBTree)();
76         // callUnittest!(tagion.betterC.hibon.HiBONBase)();
77 
78         // callUnittest!(tagion.betterC.hibon.Document)();
79         // callUnittest!(tagion.betterC.hibon.HiBON);
80         // callUnittest!(tagion.betterC.utils.LEB128);
81 
82         callUnittest!(tagion.betterC.wallet.KeyRecover);
83         callUnittest!(tagion.betterC.mobile.Recycle);
84         callUnittest!(tagion.betterC.mobile.WalletWrapperApi);
85         printf("Passed\n");
86         return 0;
87     }
88 }
89 //}