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 }