1 module tests.memory;
2 
3 import unit_threaded;
4 import evael.lib.memory;
5 
6 @Setup
7 void setup()
8 {
9     defaultAllocator = CustomStatsCollector();
10 }
11 
12 @Name("New returns valid class")
13 unittest
14 {
15     auto foo = MemoryHelper.create!Foo(1337);
16 
17     foo.shouldNotBeNull();
18     foo.a.shouldEqual(1337);
19 }
20 
21 @Name("Delete returns null object on class")
22 unittest
23 {
24     auto foo = MemoryHelper.create!Foo(1337);
25     MemoryHelper.dispose(foo);
26 
27     foo.shouldBeNull();
28 }
29 
30 @Name("Delete returns null object on interface")
31 unittest
32 {
33     IFoo foo = MemoryHelper.create!Foo(1337);
34     MemoryHelper.dispose(foo);
35 
36     foo.shouldBeNull();
37 }
38 
39 @Name("New allocates bytes")
40 unittest 
41 {
42     auto foo = MemoryHelper.create!Foo(1337);
43 
44     defaultAllocator.bytesUsed.shouldEqual(__traits(classInstanceSize, Foo));
45     defaultAllocator.bytesAllocated.shouldEqual(defaultAllocator.bytesUsed);
46 }
47 
48 @Name("Delete deallocates bytes")
49 unittest 
50 {
51     auto foo = MemoryHelper.create!Foo(1337);
52     MemoryHelper.dispose(foo);
53 
54     defaultAllocator.numAllocate.shouldEqual(1);
55     defaultAllocator.bytesUsed.shouldEqual(0);
56 }
57 
58 @Name("Delete deallocates bytes when interface is passed as param")
59 unittest 
60 {
61     IFoo foo = MemoryHelper.create!Foo(1337);
62     MemoryHelper.dispose(foo);
63 
64     defaultAllocator.numAllocate.shouldEqual(1);
65     defaultAllocator.bytesUsed.shouldEqual(0);
66 }
67 
68 /**
69  * Fixtures
70  */
71 interface IFoo : NoGCInterface
72 {
73 
74 }
75 
76 class Foo : NoGCClass, IFoo
77 {
78     public int a;
79     public bool b;
80 
81     @nogc
82     public this(int a)
83     {
84         this.a = a;
85     }
86 }