From 8c11ad3ede6d0a89ab1e5c62b22a63e7b70584d0 Mon Sep 17 00:00:00 2001 From: rask24 Date: Tue, 16 Jan 2024 14:08:34 +0900 Subject: [PATCH] implement sort test --- Makefile | 3 +- test/test_sort.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 test/test_sort.cpp diff --git a/Makefile b/Makefile index 8250bc0..951b024 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,8 @@ TEST_SRC = $(TEST_DIR)/test_check_args.cpp \ $(TEST_DIR)/test_push_stack.cpp \ $(TEST_DIR)/test_reverse_rotate_stack.cpp \ $(TEST_DIR)/test_rotate_stack.cpp \ - $(TEST_DIR)/test_swap_stack.cpp + $(TEST_DIR)/test_swap_stack.cpp \ + $(TEST_DIR)/test_sort.cpp TEST_OBJ = $(filter-out $(BUILD_DIR)/main.o, $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.o, $(SRC))) GTEST_VERSION = 1.14.0 GTEST_DIR = ./test/gtest diff --git a/test/test_sort.cpp b/test/test_sort.cpp new file mode 100644 index 0000000..c83727f --- /dev/null +++ b/test/test_sort.cpp @@ -0,0 +1,77 @@ +// Copyright 2024, reasuke + +#include +#include +#include + +std::stringstream cout; + +#include "gtest/gtest.h" + +extern "C" { + #include "push_swap.h" +} + +static void sort_test_main(int N) { + // initialize vector + // e.g. N = 3 -> v = {1, 2, 3} + std::vector v(N); + for (int i = 0; i < N; ++i) { + v[i] = i + 1; + } + + // generate permutation of v (N! patterns) + // e.g. N = 3, generate the below vectors (3! = 6 patterns) + // {1, 2, 3} + // {1, 3, 2} + // {2, 1, 3} + // {2, 3, 1} + // {3, 1, 2} + // {3, 2, 1} + do { + // initialize stack + t_list *stack_a = NULL; + t_list *stack_b = NULL; + for (int &i : v) { + ft_lstadd_back(&stack_a, ft_lstnew(new int(i))); + } + // sort + sort(&stack_a, &stack_b, N); + // check if the order is appropreate + for (int i = 1; stack_a; ++i, stack_a = stack_a->next) { + EXPECT_EQ(*(int *)stack_a->content, i); + } + } while (std::next_permutation(v.begin(), v.end())); +} + +static void sort_test(int N) { + // save stdout + int stdout_copy = dup(STDOUT_FILENO); + // redirect stdout to /dev/null + int dev_null = open("/dev/null", O_WRONLY); + dup2(dev_null, 1); + close(dev_null); + + // execute test + sort_test_main(N); + + // revert stdout + dup2(stdout_copy, STDOUT_FILENO); + close(stdout_copy); +} + +TEST(sort, oneElement) { + sort_test(1); +} + +TEST(sort, twoElements) { + sort_test(2); +} + +TEST(sort, threeEelments) { + sort_test(3); +} + +TEST(sort, fourElements) { + sort_test(4); +}