You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
simulacion-permeabilidad/tests/integration/test.py

103 lines
3.4 KiB
Python

import filecmp
import os.path
import numpy as np
import unittest
from numpy.lib.function_base import diff
def find_relative_errors(path_original, path):
binary_original = np.load(path_original)
binary = np.load(path)
diffs = binary_original - binary
binary_original = binary_original.tolist()
diffs = diffs.tolist()
relative_errors = []
for x in range(len(diffs)):
for y in range(len(diffs)):
for z in range(len(diffs)):
if type(diffs[x][y][z]) != type([]):
relative_error = (
0
if binary_original[x][y][z] == 0
else diffs[x][y][z] / binary_original[x][y][z]
)
relative_errors.append(abs(relative_error))
else:
for w in range(len(diffs)):
relative_error = (
0
if binary_original[x][y][z][w] == 0
else diffs[x][y][z][w] / binary_original[x][y][z][w]
)
relative_errors.append(abs(relative_error))
return relative_errors
BINARIES = ["Cmap", "D", "P", "V", "k"]
class TestIntegration(unittest.TestCase):
@classmethod
def setUpClass(cls):
os.chdir("../..")
config_file = os.path.abspath("./tests/integration/conf_test.ini")
os.system(f"CONFIG_FILE_PATH={config_file} mpirun -np 1 python3 mpirunner.py")
binary_results = {}
for binary in BINARIES:
binary_results[binary] = []
for i in range(90):
for binary in BINARIES:
path = "./tests/integration/tmp_output/{}/{}.npy".format(i, binary)
path_original = "./test_loop/{}/{}.npy".format(i, binary)
relative_errors = find_relative_errors(path_original, path)
binary_results[binary].append(relative_errors)
cls.binary_stats = {}
for binary in binary_results:
binary_results[binary] = [
item for sublist in binary_results[binary] for item in sublist
]
if len(binary_results[binary]) != 0:
cls.binary_stats[binary] = {
"max": max(binary_results[binary]),
"avg": sum(binary_results[binary]) / len(binary_results[binary]),
}
@classmethod
def tearDownClass(cls):
os.system("rm -rf ./tests/integration/tmp_output")
def test_Cmap_binary(self):
cmap_stats = self.binary_stats["Cmap"]
self.assertEqual(cmap_stats["max"], 0.0)
self.assertEqual(cmap_stats["avg"], 0.0)
def test_k_binary(self):
k_stats = self.binary_stats["k"]
self.assertEqual(k_stats["max"], 0.0)
self.assertEqual(k_stats["avg"], 0.0)
def test_P_binary(self):
P_stats = self.binary_stats["P"]
self.assertLess(P_stats["max"], 0.5)
self.assertLess(P_stats["avg"], 0.0005)
def test_D_binary(self):
D_stats = self.binary_stats["D"]
self.assertLess(D_stats["max"], 900)
self.assertLess(D_stats["avg"], 0.006)
def test_V_binary(self):
V_stats = self.binary_stats["V"]
self.assertLess(V_stats["max"], 10)
self.assertLess(V_stats["avg"], 0.05)
if __name__ == "__main__":
unittest.main()