diff --git a/data/numpy/test_1d_int32.npy b/data/numpy/test_1d_int32.npy new file mode 100644 index 0000000..a95c6a6 Binary files /dev/null and b/data/numpy/test_1d_int32.npy differ diff --git a/data/numpy/test_3d_double.npy b/data/numpy/test_3d_double.npy new file mode 100644 index 0000000..f46b4d0 Binary files /dev/null and b/data/numpy/test_3d_double.npy differ diff --git a/data/numpy/write_test_files.py b/data/numpy/write_test_files.py new file mode 100644 index 0000000..ba3f855 --- /dev/null +++ b/data/numpy/write_test_files.py @@ -0,0 +1,12 @@ +import numpy as np + + +arr = np.arange(10, dtype = np.int32) +np.save('test_1d_int32.npy', arr) + +arr2 = np.zeros((3,2,5), dtype = np.float64) +arr2[0,0,0] = 1.0 +arr2[0,0,1] = 2.0 +arr2[0,1,0] = 72.0 +arr2[2,0,4] = 63.0 +np.save('test_3d_double.npy', arr2) \ No newline at end of file diff --git a/file_io/test/NumpyFile.test.cpp b/file_io/test/NumpyFile.test.cpp new file mode 100644 index 0000000..7f5792d --- /dev/null +++ b/file_io/test/NumpyFile.test.cpp @@ -0,0 +1,53 @@ +#include +#include "aare/NumpyFile.hpp" +#include "aare/NDArray.hpp" + +#include "test_config.hpp" + +using aare::NumpyFile; +using aare::DType; +TEST_CASE("Read a 1D numpy file with int32 data type"){ + + auto fpath = test_data_path() / "numpy" / "test_1d_int32.npy"; + REQUIRE(std::filesystem::exists(fpath)); + + NumpyFile f(fpath); + + //we know the file contains 10 elements of np.int32 containing values 0-9 + REQUIRE(f.dtype() == DType::INT32); + REQUIRE(f.shape() == std::vector{10}); + + //use the load function to read the full file into a NDArray + auto data = f.load(); + for(size_t i = 0; i < 10; i++){ + REQUIRE(data(i) == i); + } + +} + +TEST_CASE("Read a 3D numpy file with np.double data type"){ + + auto fpath = test_data_path() / "numpy" / "test_3d_double.npy"; + REQUIRE(std::filesystem::exists(fpath)); + + NumpyFile f(fpath); + + //we know the file contains 10 elements of np.int32 containing values 0-9 + REQUIRE(f.dtype() == DType::DOUBLE); + REQUIRE(f.shape() == std::vector{3,2,5}); + + //use the load function to read the full file into a NDArray + //numpy code to generate the array + // arr2[0,0,0] = 1.0 + // arr2[0,0,1] = 2.0 + // arr2[0,1,0] = 72.0 + // arr2[2,0,4] = 63.0 + + auto data = f.load(); + REQUIRE(data(0,0,0) == 1.0); + REQUIRE(data(0,0,1) == 2.0); + REQUIRE(data(0,1,0) == 72.0); + REQUIRE(data(2,0,4) == 63.0); + + +} \ No newline at end of file