tTests incorporated with CMake - sphere - GPU-based 3D discrete element method … | |
git clone git://src.adamsgaard.dk/sphere | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 5d7e811dcb4c7226689594b13015a7aa466e7d03 | |
parent 38656ba76b71da03143f5195572cf5df4f0c7aae | |
Author: Anders Damsgaard <[email protected]> | |
Date: Fri, 25 Jan 2013 15:21:07 +0100 | |
Tests incorporated with CMake | |
Diffstat: | |
M CMakeLists.txt | 31 +++++++++++++++++++----------… | |
A tests/CMakeLists.txt | 8 ++++++++ | |
A tests/io_tests.py | 40 +++++++++++++++++++++++++++++… | |
A tests/porosity_tests.py | 62 +++++++++++++++++++++++++++++… | |
A tests/pytestutils.py | 30 ++++++++++++++++++++++++++++++ | |
R python/tests.py -> tests/tests.py | 0 | |
6 files changed, 159 insertions(+), 12 deletions(-) | |
--- | |
diff --git a/CMakeLists.txt b/CMakeLists.txt | |
t@@ -1,28 +1,35 @@ | |
# Create input/output folders | |
-FILE(MAKE_DIRECTORY input) | |
-FILE(MAKE_DIRECTORY output) | |
-FILE(MAKE_DIRECTORY img_out) | |
-FILE(MAKE_DIRECTORY gnuplot/data) | |
+file(MAKE_DIRECTORY input) | |
+file(MAKE_DIRECTORY output) | |
+file(MAKE_DIRECTORY img_out) | |
+file(MAKE_DIRECTORY gnuplot/data) | |
# The name of the project. | |
-PROJECT(sphere_CUDA) | |
+project(sphere_CUDA) | |
# CMake minimum version required | |
# FindCUDA script is distributed since version 2.8 | |
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8) | |
+cmake_minimum_required(VERSION 2.8) | |
# Find CUDA | |
-FIND_PACKAGE(CUDA REQUIRED) | |
+find_package(CUDA REQUIRED) | |
# Find OpenMP | |
-FIND_PACKAGE(OpenMP) | |
+find_package(OpenMP) | |
# Find Boost components | |
#find_package(Boost COMPONENTS system filesystem unit_test_framework REQUIRED) | |
-#SET(CMAKE_BUILD_TYPE Debug) | |
-SET(CMAKE_BUILD_TYPE Release) | |
+# Uncomment to enable testing | |
+enable_testing() | |
+# Set build type | |
+#set(CMAKE_BUILD_TYPE Debug) | |
+set(CMAKE_BUILD_TYPE Release) | |
-#Add source directory to project. | |
-ADD_SUBDIRECTORY(src) | |
+ | |
+# Add source directory to project. | |
+add_subdirectory(src) | |
+ | |
+# Add tests | |
+add_subdirectory(tests) | |
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt | |
t@@ -0,0 +1,8 @@ | |
+ | |
+find_package(PythonInterp REQUIRED) | |
+ | |
+add_test(io_tests ${PYTHON_EXECUTABLE} | |
+ ${CMAKE_CURRENT_BINARY_DIR}/io_tests.py) | |
+ | |
+add_test(porosity_tests ${PYTHON_EXECUTABLE} | |
+ ${CMAKE_CURRENT_BINARY_DIR}/porosity_tests.py) | |
diff --git a/tests/io_tests.py b/tests/io_tests.py | |
t@@ -0,0 +1,40 @@ | |
+#!/usr/bin/env python | |
+from pytestutils import * | |
+ | |
+#### Input/output tests #### | |
+print("### Input/output tests ###") | |
+ | |
+# Generate data in python | |
+orig = Spherebin(np = 100, nw = 1, sid = "test-initgrid") | |
+orig.generateRadii(histogram = False) | |
+orig.defaultParams() | |
+orig.initRandomGridPos(g = numpy.zeros(orig.nd)) | |
+orig.initTemporal(current = 0.0, total = 0.0) | |
+orig.time_total = 2.0*orig.time_dt; | |
+orig.time_file_dt = orig.time_dt; | |
+orig.writebin(verbose=False) | |
+ | |
+# Test Python IO routines | |
+py = Spherebin() | |
+py.readbin("../input/" + orig.sid + ".bin", verbose=False) | |
+compare(orig, py, "Python IO:") | |
+ | |
+# Test C++ IO routines | |
+orig.run(verbose=False, hideinputfile=True) | |
+#orig.run() | |
+cpp = Spherebin() | |
+cpp.readbin("../output/" + orig.sid + ".output00000.bin", verbose=False) | |
+compare(orig, cpp, "C++ IO: ") | |
+ | |
+# Test CUDA IO routines | |
+cuda = Spherebin() | |
+cuda.readbin("../output/" + orig.sid + ".output00001.bin", verbose=False) | |
+cuda.time_current = orig.time_current | |
+cuda.time_step_count = orig.time_step_count | |
+compare(orig, cuda, "CUDA IO: ") | |
+ | |
+# Remove temporary files | |
+cleanup(orig) | |
+ | |
+ | |
+ | |
diff --git a/tests/porosity_tests.py b/tests/porosity_tests.py | |
t@@ -0,0 +1,62 @@ | |
+#!/usr/bin/env python | |
+from pytestutils import * | |
+ | |
+#### Porosity tests #### | |
+print("### porosity tests ###") | |
+ | |
+# Generate data in python | |
+orig = Spherebin(np = 100, nw = 1, sid = "test-initgrid") | |
+orig.generateRadii(histogram = False) | |
+orig.defaultParams() | |
+orig.initRandomGridPos(g = numpy.zeros(orig.nd)) | |
+orig.initTemporal(current = 0.0, total = 0.0) | |
+orig.time_total = 2.0*orig.time_dt; | |
+orig.time_file_dt = orig.time_dt; | |
+orig.writebin(verbose=False) | |
+ | |
+def testPorosities(spherebin): | |
+ | |
+ # Number of vertical slices | |
+ slicevals = [1, 2, 4] | |
+ i = 1 # iterator var | |
+ for slices in slicevals: | |
+ | |
+ # Find correct value of bulk porosity | |
+ n_bulk = spherebin.bulkPorosity() | |
+ #print("Bulk: " + str(n_bulk)) | |
+ | |
+ porosity = spherebin.porosity(slices = slices)[0] | |
+ #print("Avg: " + str(numpy.average(porosity))) | |
+ #print(porosity) | |
+ | |
+ # Check if average of porosity function values matches the bulk porosi… | |
+ compareFloats(n_bulk, numpy.average(porosity), \ | |
+ spherebin.sid + ": Porosity average to bulk porosity ("\ | |
+ + str(i) + "/" + str(len(slicevals)) + "):") | |
+ i += 1 | |
+ | |
+# Test data from previous test | |
+testPorosities(orig) | |
+ | |
+# Simple cubic packing of uniform spheres | |
+# The theoretical porosity is (4/3*pi*r^3)/(2r)^3 = 0.476 | |
+sidelen = 10 | |
+cubic = Spherebin(np = sidelen**3, sid='cubic') | |
+radius = 1.0 | |
+cubic.generateRadii(psd='uni', radius_mean=radius, radius_variance=0.0, histog… | |
+for ix in range(sidelen): | |
+ for iy in range(sidelen): | |
+ for iz in range(sidelen): | |
+ i = ix + sidelen * (iy + sidelen * iz) # linear index | |
+ cubic.x[i,0] = ix*radius*2.0 + radius | |
+ cubic.x[i,1] = iy*radius*2.0 + radius | |
+ cubic.x[i,2] = iz*radius*2.0 + radius | |
+cubic.L[:] = 2.0 * radius * sidelen | |
+ | |
+cubic.initTemporal(0.2) | |
+cubic.initGrid() | |
+ | |
+testPorosities(cubic) | |
+ | |
+cleanup(cubic) | |
+ | |
diff --git a/tests/pytestutils.py b/tests/pytestutils.py | |
t@@ -0,0 +1,30 @@ | |
+#!/usr/bin/env python | |
+ | |
+from sphere import * | |
+import subprocess | |
+ | |
+def passed(): | |
+ return "\tPassed" | |
+ | |
+def failed(): | |
+ return "\tFailed" | |
+ | |
+def compare(first, second, string): | |
+ if (first == second): | |
+ print(string + passed()) | |
+ else: | |
+ print(string + failed()) | |
+ | |
+def compareFloats(first, second, string, criterion=1e-5): | |
+ if abs(first-second) < criterion: | |
+ print(string + passed()) | |
+ else : | |
+ print(string + failed()) | |
+ | |
+def cleanup(spherebin): | |
+ 'Remove temporary files' | |
+ subprocess.call("rm -f ../input/" + spherebin.sid + ".bin", shell=True) | |
+ subprocess.call("rm -f ../output/" + spherebin.sid + ".*.bin", shell=True) | |
+ print("") | |
+ | |
+ | |
diff --git a/python/tests.py b/tests/tests.py |