Skip to content

Commit

Permalink
Merge pull request #87 from lanl/Unit_testing
Browse files Browse the repository at this point in the history
Unit testing
  • Loading branch information
jacob-moore22 authored Jun 5, 2024
2 parents 1c99728 + 4dd6af4 commit 5ad83a6
Show file tree
Hide file tree
Showing 4 changed files with 213 additions and 11 deletions.
2 changes: 1 addition & 1 deletion scripts/cmake_build_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
24 changes: 18 additions & 6 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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()
15 changes: 11 additions & 4 deletions test/test_cases/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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()
183 changes: 183 additions & 0 deletions test/test_cases/test_CArrayKokkos.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
#include "matar.h"
#include "gtest/gtest.h"
#include <stdio.h>

using namespace mtr; // matar namespace

CArrayKokkos<double> return_CArrayKokkos(int dims, std::vector<int> sizes)
{

CArrayKokkos<double> A;

if(dims == 1){
A = CArrayKokkos<double>(sizes[0], "A_1D_CArrayKokkos");
}
else if(dims == 2){
A = CArrayKokkos<double>(sizes[0], sizes[1], "A_2D_CArrayKokkos");
}
else if(dims == 3){
A = CArrayKokkos<double>(sizes[0], sizes[1], sizes[2], "A_3D_CArrayKokkos");
}
else if(dims == 4){
A = CArrayKokkos<double>(sizes[0], sizes[1], sizes[2], sizes[3], "A_4D_CArrayKokkos");
}
else if(dims == 5){
A = CArrayKokkos<double>(sizes[0], sizes[1], sizes[2], sizes[3], sizes[4], "A_5D_CArrayKokkos");
}
else if(dims == 6){
A = CArrayKokkos<double>(sizes[0], sizes[1], sizes[2], sizes[3], sizes[4], sizes[5], "A_7D_CArrayKokkos");
}
else if(dims == 7){
A = CArrayKokkos<double>(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<int> 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<double> A = return_CArrayKokkos(dims, sizes);
val*= dims*2;

EXPECT_EQ(val, A.size());
}
}


// Test extent function
TEST(Test_CArrayKokkos, extent)
{
std::vector<int> 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<double> 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<int> sizes;
for(int i = 0; i < 7; i++){

int dims = i+1;

sizes.push_back(dims*2);

CArrayKokkos<double> A = return_CArrayKokkos(dims, sizes);

EXPECT_EQ(sizes[i], A.dims(i));
}
}

// Test order function
TEST(Test_CArrayKokkos, order)
{
std::vector<int> sizes;
for(int i = 0; i < 7; i++){

int dims = i+1;
sizes.push_back(dims*2);
CArrayKokkos<double> A = return_CArrayKokkos(dims, sizes);
EXPECT_EQ(dims, A.order());
}
}


// Test order function
TEST(Test_CArrayKokkos, pointer)
{
std::vector<int> sizes;
for(int i = 0; i < 7; i++){

int dims = i+1;
sizes.push_back(dims*2);
CArrayKokkos<double> 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<int> sizes; // Size of each dimension
int val = 1; // Expected total length of data

CArrayKokkos<double> 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<double> A(size, size);

CArrayKokkos<double> 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();
}

0 comments on commit 5ad83a6

Please sign in to comment.