diff --git a/scripts/cmake_build_test.sh b/scripts/cmake_build_test.sh index 509ae6a6..440cc8ed 100644 --- a/scripts/cmake_build_test.sh +++ b/scripts/cmake_build_test.sh @@ -2,7 +2,7 @@ kokkos_build_type="${1}" -if [ ! -d "${TEST_SOURCE_DIR}/phaseFieldMPI/heffte" ] +if [ ! -d "${TEST_SOURCE_DIR}/googletest" ] then echo "Missing googletest for testing, downloading...." git clone https://github.com/google/googletest.git ${TEST_SOURCE_DIR}/googletest diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index dd1cd286..8f7fa4c2 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -2,8 +2,23 @@ cmake_minimum_required(VERSION 3.1.3) project (matartest) +find_package(Matar REQUIRED) + +#------------------------------------------- +# Testing stuff +#------------------------------------------- +if (NOT KOKKOS) + add_subdirectory(googletest) + add_subdirectory(test_cases) + add_executable(test_csr CSRArray.cpp) + target_link_libraries(test_csr matar gtest_main) + add_executable(test_csc CSCArray.cpp) + target_link_libraries(test_csc matar gtest_main) +endif() + if (KOKKOS) find_package(Kokkos REQUIRED) #new + add_definitions(-DHAVE_KOKKOS=1) if (CUDA) add_definitions(-DHAVE_CUDA=1) @@ -14,16 +29,13 @@ if (KOKKOS) elseif (THREADS) add_definitions(-DHAVE_THREADS=1) endif() -endif() -#------------------------------------------- -# Testing stuff -#------------------------------------------- -if (TEST) add_subdirectory(googletest) add_subdirectory(test_cases) add_executable(test_csr CSRArray.cpp) target_link_libraries(test_csr matar gtest_main) add_executable(test_csc CSCArray.cpp) target_link_libraries(test_csc matar gtest_main) -endif(TEST) + + +endif() diff --git a/test/test_cases/CMakeLists.txt b/test/test_cases/CMakeLists.txt index ec5156ad..74feb6b4 100644 --- a/test/test_cases/CMakeLists.txt +++ b/test/test_cases/CMakeLists.txt @@ -3,16 +3,23 @@ cmake_minimum_required(VERSION 3.1.3) set(This mater_test) set(Sources - standared_types_tests.cpp + standard_types_tests.cpp ) add_executable(${This} ${Sources}) - target_link_libraries(${This} matar gtest_main ) + + + +add_executable(test_CArrayKokkos test_CArrayKokkos.cpp) +target_link_libraries(test_CArrayKokkos matar gtest_main) + + if (KOKKOKS) - target_link_libraries(${This} Kokkos::kokkos) -endif (KOKKOS) + target_link_libraries(${This} Kokkos::kokkos) + target_link_libraries(test_CArrayKokkos Kokkos::kokkos) +endif() diff --git a/test/test_cases/test_CArrayKokkos.cpp b/test/test_cases/test_CArrayKokkos.cpp new file mode 100644 index 00000000..845c8465 --- /dev/null +++ b/test/test_cases/test_CArrayKokkos.cpp @@ -0,0 +1,183 @@ +#include "matar.h" +#include "gtest/gtest.h" +#include + +using namespace mtr; // matar namespace + +CArrayKokkos return_CArrayKokkos(int dims, std::vector sizes) +{ + + CArrayKokkos A; + + if(dims == 1){ + A = CArrayKokkos(sizes[0], "A_1D_CArrayKokkos"); + } + else if(dims == 2){ + A = CArrayKokkos(sizes[0], sizes[1], "A_2D_CArrayKokkos"); + } + else if(dims == 3){ + A = CArrayKokkos(sizes[0], sizes[1], sizes[2], "A_3D_CArrayKokkos"); + } + else if(dims == 4){ + A = CArrayKokkos(sizes[0], sizes[1], sizes[2], sizes[3], "A_4D_CArrayKokkos"); + } + else if(dims == 5){ + A = CArrayKokkos(sizes[0], sizes[1], sizes[2], sizes[3], sizes[4], "A_5D_CArrayKokkos"); + } + else if(dims == 6){ + A = CArrayKokkos(sizes[0], sizes[1], sizes[2], sizes[3], sizes[4], sizes[5], "A_7D_CArrayKokkos"); + } + else if(dims == 7){ + A = CArrayKokkos(sizes[0], sizes[1], sizes[2], sizes[3], sizes[4], sizes[5], sizes[6], "A_7D_CArrayKokkos"); + } + else{ + std::cout<<"Dims must be between 1 and 7 for CArrayKokkos" << std::endl; + } + return A; +} + +// Test size function +TEST(Test_CArrayKokkos, size) +{ + std::vector sizes; // Size of each dimension + int val = 1; // Expected total length of data + + for(int i = 0; i < 7; i++){ + + int dims = i+1; + + sizes.push_back(dims*2); + + CArrayKokkos A = return_CArrayKokkos(dims, sizes); + val*= dims*2; + + EXPECT_EQ(val, A.size()); + } +} + + +// Test extent function +TEST(Test_CArrayKokkos, extent) +{ + std::vector sizes; // Size of each dimension + int val = 1; // Expected total length of data + + for(int i = 0; i < 7; i++){ + + int dims = i+1; + + sizes.push_back(dims*2); + + CArrayKokkos A = return_CArrayKokkos(dims, sizes); + val*= dims*2; + + EXPECT_EQ(val, A.extent()); + } +} + +// Test dims function +TEST(Test_CArrayKokkos, dims) +{ + + // Note: extend to other dims when initialized to zero + + std::vector sizes; + for(int i = 0; i < 7; i++){ + + int dims = i+1; + + sizes.push_back(dims*2); + + CArrayKokkos A = return_CArrayKokkos(dims, sizes); + + EXPECT_EQ(sizes[i], A.dims(i)); + } +} + +// Test order function +TEST(Test_CArrayKokkos, order) +{ + std::vector sizes; + for(int i = 0; i < 7; i++){ + + int dims = i+1; + sizes.push_back(dims*2); + CArrayKokkos A = return_CArrayKokkos(dims, sizes); + EXPECT_EQ(dims, A.order()); + } +} + + +// Test order function +TEST(Test_CArrayKokkos, pointer) +{ + std::vector sizes; + for(int i = 0; i < 7; i++){ + + int dims = i+1; + sizes.push_back(dims*2); + CArrayKokkos A = return_CArrayKokkos(dims, sizes); + auto a = A.get_kokkos_view(); + + EXPECT_EQ(&a[0], A.pointer()); + } +} + +// Add test for late initialization +TEST(Test_CArrayKokkos, late_init) +{ + std::vector sizes; // Size of each dimension + int val = 1; // Expected total length of data + + CArrayKokkos A; + + for(int i = 0; i < 7; i++){ + + int dims = i+1; + + sizes.push_back(dims*2); + + A = return_CArrayKokkos(dims, sizes); + val*= dims*2; + + EXPECT_EQ(val, A.size()); + } +} + + +// Add test for operator = overload +TEST(Test_CArrayKokkos, eq_overload) +{ + const int size = 100; + CArrayKokkos A(size, size); + + CArrayKokkos B(size, size); + + for(int i = 0; i < size; i++){ + for(int j = 0; j < size; j++){ + A(i,j) = (double)i + (double)j; + } + } + + B = A; + + for(int i = 0; i < size; i++){ + for(int j = 0; j < size; j++){ + + EXPECT_EQ(B(i,j), (double)i + (double)j); + } + } +} + + +int main(int argc, char* argv[]) +{ + Kokkos::initialize(argc, argv); + { + int result = 0; + testing::InitGoogleTest(&argc, argv); + result = RUN_ALL_TESTS(); + return result; + } + Kokkos::finalize(); +}