1 module dsurf.tests.io.savers; 2 3 import std.file; 4 import std.math; 5 import std.algorithm; 6 7 import dsurf.cartesian; 8 9 import dsurf.io.loader; 10 import dsurf.io.cpsloader; 11 import dsurf.io.zmaploader; 12 import dsurf.io.iraploader; 13 14 import dsurf.io.saver; 15 import dsurf.io.cpssaver; 16 import dsurf.io.zmapsaver; 17 import dsurf.io.irapsaver; 18 19 unittest { 20 CartesianSurfaceLoader [string] loaders; 21 loaders["cps"]= new Cps3Loader; 22 loaders["zmap"] = new ZmapLoader; 23 loaders["irap"] = new IrapLoader; 24 25 CartesianSurfaceSaver [string] savers; 26 savers["cps"] = new Cps3Saver; 27 savers["zmap"] = new ZmapSaver; 28 savers["irap"] = new IrapSaver; 29 30 auto surface = new CartesianSurface; 31 surface.setHeader(10, 5, 500, 1000, 100, 200); 32 33 import std.random: uniform; 34 import std.random: Random; 35 import std.random: unpredictableSeed; 36 37 auto rnd = Random(unpredictableSeed); 38 foreach(i; 0..surface.nx) { 39 foreach(j; 0..surface.ny) { 40 surface.z[i][j] = uniform(-50.0f, 50.0f, rnd); 41 } 42 } 43 44 auto path = "./test/tmp/"; 45 if (!exists(path)) 46 mkdir(path); 47 48 assert(exists(path)); 49 50 foreach (format, saver; savers) 51 { 52 auto loader = loaders[format]; 53 auto fileName = path ~ "surface." ~ format; 54 saver.save(surface, fileName); 55 56 assert(loader.canLoad(fileName)); 57 auto loadedSurface = loader.load(fileName); 58 59 assert(surface.nx == loadedSurface.nx); 60 assert(surface.ny == loadedSurface.ny); 61 62 assert(isClose(surface.xOrigin, loadedSurface.xOrigin)); 63 assert(isClose(surface.yOrigin, loadedSurface.yOrigin)); 64 65 assert(isClose(surface.dx, loadedSurface.dx)); 66 assert(isClose(surface.dy, loadedSurface.dy)); 67 68 foreach(i; 0..surface.nx) { 69 foreach(j; 0..surface.ny) { 70 assert(isClose(surface.z[i][j], loadedSurface.z[i][j], 1e-5)); 71 // TODO we're comparing with the relative diff of a 1e-5 72 // Check how it can be improved 73 } 74 } 75 } 76 77 rmdirRecurse(path); 78 }