diff --git a/tests/include/memory_test.h b/tests/include/memory_test.h new file mode 100644 index 0000000..c2bbdd3 --- /dev/null +++ b/tests/include/memory_test.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2023 Brett Terpstra + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef BLT_TESTS_MEMORY_TEST_H +#define BLT_TESTS_MEMORY_TEST_H + +namespace blt::test::memory +{ + void copy(); + + void move(); + + void access(); + + void ranges(); + + static inline void run() + { + copy(); + move(); + access(); + ranges(); + } +} + +#endif //BLT_TESTS_MEMORY_TEST_H diff --git a/tests/src/main.cpp b/tests/src/main.cpp index ffcc664..da8f1ca 100755 --- a/tests/src/main.cpp +++ b/tests/src/main.cpp @@ -11,6 +11,8 @@ //#include //#include "hashmap_tests.h" //#include +#include +#include std::function test{ [](int i) -> int { @@ -81,6 +83,16 @@ int (* func_func_in)(int) = &test_as_func; int main(int argc, const char** argv) { blt::arg_parse parser; + + parser.addArgument( + blt::arg_builder("--memory").setAction(blt::arg_action_t::STORE_TRUE).setNArgs(0).setHelp("Test the blt/std/memory.h file").build()); + + auto args = parser.parse_args(argc, argv); + + if (args.contains("--memory")) + blt::test::memory::run(); + + blt::arg_parse parser; parser.addArgument(blt::arg_builder({"-c", "--no-color"}).setAction(blt::arg_action_t::STORE_TRUE).build()); parser.addArgument( blt::arg_builder("--nbt") diff --git a/tests/src/memory_test.cpp b/tests/src/memory_test.cpp new file mode 100644 index 0000000..0680e1a --- /dev/null +++ b/tests/src/memory_test.cpp @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2023 Brett Terpstra + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include + +#include +#include +#include +#include +#include + +template +blt::scoped_buffer create_scoped_buffer(size_t size) +{ + static std::random_device dev; + static std::mt19937_64 engine(dev()); + blt::scoped_buffer data(size); + if constexpr (std::is_floating_point_v) + { + static std::uniform_real_distribution dist(std::numeric_limits::min(), std::numeric_limits::max()); + + for (auto& v : data) + v = dist(engine); + } else if (std::is_integral_v) + { + static std::uniform_int_distribution dist(std::numeric_limits::min(), std::numeric_limits::max()); + + for (auto& v : data) + v = dist(engine); + } + return data; +} + +template +blt::scoped_buffer modify_copy(blt::scoped_buffer fill) +{ + for (size_t i = 0; i < size_t(fill.size() / 2); i++) + { + std::swap(fill[i], fill[fill.size() - i - 1]); + } + return fill; +} + +template +T collect(blt::scoped_buffer buff) +{ + T val = 0; + for (auto v : buff) + val = std::max(v, val); + return val; +} + +void blt::test::memory::copy() +{ + BLT_INFO("Running memory copy tests"); + + auto int_buffer_small = create_scoped_buffer(16); + auto int_buffer_medium = create_scoped_buffer(512); + auto int_buffer_large = create_scoped_buffer(8192); + + auto float_buffer_small = create_scoped_buffer(16); + auto float_buffer_medium = create_scoped_buffer(512); + auto float_buffer_large = create_scoped_buffer(8192); + + auto int_small = collect(modify_copy(int_buffer_small)); + auto int_medium = collect(modify_copy(int_buffer_medium)); + auto int_large = collect(modify_copy(int_buffer_large)); + + auto float_small = collect(modify_copy(float_buffer_small)); + auto float_medium = collect(modify_copy(float_buffer_medium)); + auto float_large = collect(modify_copy(float_buffer_large)); + + BLT_TRACE("We collected values [%d, %d, %d]; [%f.0, %f.0, %f.0]", int_small, int_medium, int_large, float_small, float_medium, float_large); +} + +void blt::test::memory::move() +{ + BLT_INFO("Running memory move tests"); + + +} + +void blt::test::memory::access() +{ + BLT_INFO("Running memory construction tests"); + +} + +void blt::test::memory::ranges() +{ + blt::range range(0, 10); + for (auto r : range) + BLT_TRACE_STREAM << r; + BLT_TRACE_STREAM << '\n'; +}