1 module dsurf.tests.cartesian; 2 3 import std.math; 4 import std.exception; 5 import dsurf.cartesian; 6 7 /** 8 Defaul constructor tests 9 */ 10 unittest { 11 auto surface = new CartesianSurface; 12 surface.setHeader(2, 2, 0, 0, 500, 500); 13 surface.assignConstant(50); 14 foreach(i; 0 .. surface.nx) 15 foreach(j; 0 .. surface.ny) 16 assert(surface.z[i][j] == 50); 17 } 18 19 /** 20 Checks for an attempt to set zero or negative surface size 21 */ 22 unittest { 23 auto surface = new CartesianSurface; 24 assertThrown!Exception(surface.setHeader(0, 5, 0, 0, 25, 25)); 25 assertThrown!Exception(surface.setHeader(5, 0, 0, 0, 25, 25)); 26 assertThrown!Exception(surface.setHeader(5, -5, 0, 0, 25, 25)); 27 assertThrown!Exception(surface.setHeader(-5, 5, 0, 0, 25, 25)); 28 assertThrown!Exception(surface.setHeader(-5, -5, 0, 0, 25, 25)); 29 } 30 31 /** 32 Unittest for copy construction and assignConstant. 33 Creates a surface, creates its copy, 34 assigns other height values to the copy 35 and checks if an original one remains unchanged 36 */ 37 unittest { 38 auto surface = new CartesianSurface; 39 surface.setHeader(2, 2, 0, 0, 500, 500); 40 foreach(i; 0 .. surface.nx) 41 foreach(j; 0 .. surface.ny) 42 surface.z[i][j] = 50; 43 44 auto s2 = new CartesianSurface(surface); 45 foreach(i; 0 .. surface.nx) 46 foreach(j; 0 .. surface.ny) 47 assert(s2.z[i][j] == 50); 48 49 foreach(i; 0 .. surface.nx) 50 foreach(j; 0 .. surface.ny) 51 s2.z[i][j] = 10; 52 53 foreach(i; 0 .. surface.nx) 54 foreach(j; 0 .. surface.ny) 55 assert(s2.z[i][j] == 10); 56 57 foreach(i; 0 .. surface.nx) 58 foreach(j; 0 .. surface.ny) 59 assert(surface.z[i][j] == 50); 60 } 61 62 /** 63 Tests for cellXIndex and cellYIndex methods 64 */ 65 unittest { 66 auto surface = new CartesianSurface; 67 surface.setHeader(10, 10, 0, 1000, 500, 500); 68 assert(surface.cellXIndex(-1000) == -1); 69 assert(surface.cellYIndex(-1000) == -1); 70 assert(surface.cellXIndex(0) == 0); 71 assert(surface.cellYIndex(1000) == 0); 72 assert(surface.cellXIndex(550) == 1); 73 assert(surface.cellYIndex(1550) == 1); 74 assert(surface.cellXIndex(5000) == -1); 75 assert(surface.cellYIndex(6000) == -1); 76 } 77 78 /** 79 Tests for getZ method 80 */ 81 unittest { 82 import dsurf.io.cpsloader: Cps3Loader; 83 84 auto loader = new Cps3Loader; 85 auto surface = loader.load("./test/test_pet_rect_blank.cps"); 86 87 assert(isNaN(surface.getZ(5600, 250))); 88 assert(!isNaN(surface.getZ(5600, 800))); 89 assert(isNaN(surface.getZ(5700, 600))); 90 assert(isNaN(surface.getZ(5600, 250))); 91 assert(isNaN(surface.getZ(5850, 250))); 92 } 93 94 unittest { 95 import dsurf.io.cpsloader: Cps3Loader; 96 97 auto loader = new Cps3Loader; 98 auto surface = loader.load("./test/test_pet_sq.cps"); 99 100 assert(surface.nx == 3); 101 assert(surface.ny == 3); 102 surface.z[1][1] = double.nan; 103 assert(isNaN(surface.getZ(5320.00, 700.00))); 104 assert(isNaN(surface.getZ(5650.00, 715.00))); 105 assert(isNaN(surface.getZ(5650.00, 300.00))); 106 assert(isNaN(surface.getZ(5315.00, 300.00))); 107 108 assert(isClose(surface.getZ(5120.00, 850.00), 2.42)); 109 assert(isClose(surface.getZ(5815.00, 850.00), 6.59)); 110 assert(isClose(surface.getZ(5800.00, 200.00), 5.20)); 111 assert(isClose(surface.getZ(5200.00, 200.00), 1.60)); 112 } 113 114 /** 115 Tests for assignment operators 116 */ 117 unittest { 118 auto s1 = new CartesianSurface; 119 s1.setHeader(2, 2, 0, 0, 500, 500); 120 s1.assignConstant(50); 121 122 auto s2 = new CartesianSurface(s1); 123 s2.assignConstant(10); 124 125 s1 /= s2; 126 assert(s1.min() == 5); 127 assert(s1.max() == 5); 128 129 s1 += s2; 130 assert(s1.min() == 15); 131 assert(s1.max() == 15); 132 133 s1 *= s2; 134 assert(s1.min() == 150); 135 assert(s1.max() == 150); 136 137 s1 -= s2; 138 assert(s1.min() == 140); 139 assert(s1.max() == 140); 140 } 141 142 unittest { 143 auto surface = new CartesianSurface; 144 surface.setHeader(2, 2, 0, 0, 500, 500); 145 surface.assignConstant(50); 146 auto result = surface + surface; 147 148 assert(surface.min() == 50); 149 assert(surface.max() == 50); 150 assert(result.min() == 100); 151 assert(result.max() == 100); 152 153 result = surface * surface; 154 assert(surface.min() == 50); // make sure that the original surface 155 assert(surface.max() == 50); // didn't change 156 assert(result.min() == 2500); 157 assert(result.max() == 2500); 158 159 result = surface - surface; 160 assert(surface.min() == 50); 161 assert(surface.max() == 50); 162 assert(result.min() == 0); 163 assert(result.max() == 0); 164 165 result = surface / surface; 166 assert(surface.min() == 50); 167 assert(surface.max() == 50); 168 assert(result.min() == 1); 169 assert(result.max() == 1); 170 } 171 172 unittest { 173 auto surface = new CartesianSurface; 174 surface.setHeader(2, 2, 0, 0, 500, 500); 175 surface.assignConstant(50); 176 auto result = surface + 10; 177 foreach (i; 0 .. surface.nx) 178 foreach (j; 0 .. surface.ny) { 179 assert(surface.z[i][j] == 50); 180 assert(result.z[i][j] == 60); 181 } 182 183 result = surface - 20; 184 foreach (i; 0 .. surface.nx) 185 foreach (j; 0 .. surface.ny) { 186 assert(surface.z[i][j] == 50); 187 assert(result.z[i][j] == 30); 188 } 189 190 result = surface * 2.5; 191 foreach (i; 0 .. surface.nx) 192 foreach (j; 0 .. surface.ny) { 193 assert(surface.z[i][j] == 50); 194 assert(result.z[i][j] == 125); 195 } 196 197 result = surface / 5; 198 foreach (i; 0 .. surface.nx) 199 foreach (j; 0 .. surface.ny) { 200 assert(surface.z[i][j] == 50); 201 assert(result.z[i][j] == 10); 202 } 203 }