Loading quicksort/unitTests/Makefile 0 → 100644 +26 −0 Original line number Diff line number Diff line include ../config.mk CUDA_SOURCES := $(wildcard *.cu) CUDA_TARGETS := $(CUDA_SOURCES:%.cu=%) GTEST := -lgtest -pthread ## targets definitions follow .PHONY: all host cuda all: cuda cuda: $(CUDA_TARGETS) run: cuda ./$(CUDA_TARGETS) .PHONY: clean clean: rm -f *.d *.o *.cuo $(CUDA_TARGETS) # use .cuo instead of .cu.o to avoid problems with the implicit rules: https://stackoverflow.com/q/62967939 # (and use the host compiler for linking CUDA, nvcc does not understand that .cuo is an object file) $(CUDA_TARGETS): % : %.cuo $(CXX) $(CUDA_LDFLAGS) -o $@ $< $(CUDA_LDLIBS) $(GTEST) $(CUDA_SOURCES:%.cu=%.cuo): %.cuo : %.cu $(CUDA_CXX) $(CUDA_CPPFLAGS) $(CUDA_CXXFLAGS) -c -o $@ $< quicksort/unitTests/unitTests.cu 0 → 100644 +60 −0 Original line number Diff line number Diff line #include "gtest/gtest.h" #include <vector> #include <algorithm> #include <numeric> #include <random> #include <TNL/Containers/Array.h> #include <TNL/Algorithms/MemoryOperations.h> #include "../quicksort.cuh" #include "../../util/algorithm.h" //---------------------------------------------------------------------------------- TEST(selectedSize, size15) { TNL::Containers::Array<int, TNL::Devices::Cuda> cudaArr{5, 9, 4, 8, 6, 1, 2, 3, 4, 8, 1, 6, 9, 4, 9}; auto view = cudaArr.getView(); ASSERT_EQ(15, view.getSize()) << "size not 15" << std::endl; quicksort(view); ASSERT_TRUE(is_sorted(view)) << "result " << view << std::endl; } TEST(multiblock, 32768_decreasingNegative) { std::vector<int> arr(1<<15); for (size_t i = 0; i < arr.size(); i++) arr[i] = -i; TNL::Containers::Array<int, TNL::Devices::Cuda> cudaArr(arr); auto view = cudaArr.getView(); quicksort(view); ASSERT_TRUE(is_sorted(view)) << "result " << view << std::endl; } TEST(randomGenerated, smallArray_randomVal) { std::srand(2006); for(int i = 0; i < 100; i++) { std::vector<int> arr(std::rand()%(1<<10)); for(auto & x : arr) x = std::rand(); TNL::Containers::Array<int, TNL::Devices::Cuda> cudaArr(arr); auto view = cudaArr.getView(); quicksort(view); ASSERT_TRUE(is_sorted(view)); } } //---------------------------------------------------------------------------------- int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } No newline at end of file Loading
quicksort/unitTests/Makefile 0 → 100644 +26 −0 Original line number Diff line number Diff line include ../config.mk CUDA_SOURCES := $(wildcard *.cu) CUDA_TARGETS := $(CUDA_SOURCES:%.cu=%) GTEST := -lgtest -pthread ## targets definitions follow .PHONY: all host cuda all: cuda cuda: $(CUDA_TARGETS) run: cuda ./$(CUDA_TARGETS) .PHONY: clean clean: rm -f *.d *.o *.cuo $(CUDA_TARGETS) # use .cuo instead of .cu.o to avoid problems with the implicit rules: https://stackoverflow.com/q/62967939 # (and use the host compiler for linking CUDA, nvcc does not understand that .cuo is an object file) $(CUDA_TARGETS): % : %.cuo $(CXX) $(CUDA_LDFLAGS) -o $@ $< $(CUDA_LDLIBS) $(GTEST) $(CUDA_SOURCES:%.cu=%.cuo): %.cuo : %.cu $(CUDA_CXX) $(CUDA_CPPFLAGS) $(CUDA_CXXFLAGS) -c -o $@ $<
quicksort/unitTests/unitTests.cu 0 → 100644 +60 −0 Original line number Diff line number Diff line #include "gtest/gtest.h" #include <vector> #include <algorithm> #include <numeric> #include <random> #include <TNL/Containers/Array.h> #include <TNL/Algorithms/MemoryOperations.h> #include "../quicksort.cuh" #include "../../util/algorithm.h" //---------------------------------------------------------------------------------- TEST(selectedSize, size15) { TNL::Containers::Array<int, TNL::Devices::Cuda> cudaArr{5, 9, 4, 8, 6, 1, 2, 3, 4, 8, 1, 6, 9, 4, 9}; auto view = cudaArr.getView(); ASSERT_EQ(15, view.getSize()) << "size not 15" << std::endl; quicksort(view); ASSERT_TRUE(is_sorted(view)) << "result " << view << std::endl; } TEST(multiblock, 32768_decreasingNegative) { std::vector<int> arr(1<<15); for (size_t i = 0; i < arr.size(); i++) arr[i] = -i; TNL::Containers::Array<int, TNL::Devices::Cuda> cudaArr(arr); auto view = cudaArr.getView(); quicksort(view); ASSERT_TRUE(is_sorted(view)) << "result " << view << std::endl; } TEST(randomGenerated, smallArray_randomVal) { std::srand(2006); for(int i = 0; i < 100; i++) { std::vector<int> arr(std::rand()%(1<<10)); for(auto & x : arr) x = std::rand(); TNL::Containers::Array<int, TNL::Devices::Cuda> cudaArr(arr); auto view = cudaArr.getView(); quicksort(view); ASSERT_TRUE(is_sorted(view)); } } //---------------------------------------------------------------------------------- int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } No newline at end of file