based

Opinionated utility library
git clone git://git.dimitrijedobrota.com/based.git
Log | Files | Refs | README | LICENSE | HACKING | CONTRIBUTING | CODE_OF_CONDUCT | BUILDING

buffer_test.cpp (1745B)


0 #define CATCH_CONFIG_RUNTIME_STATIC_REQUIRE 1 2 #include <catch2/catch_test_macros.hpp> 3 4 #include "based/template.hpp" 5 6 template struct based::buffer<sizeof(void*)>; 7 8 TEST_CASE("valid type", "[template/buffer]") 9 { 10 SECTION("small buffer") 11 { 12 using buffer = based::buffer<sizeof(std::uint8_t)>; 13 STATIC_REQUIRE(buffer::valid_type<std::uint8_t>()); 14 STATIC_REQUIRE_FALSE(buffer::valid_type<std::size_t>()); 15 16 STATIC_REQUIRE_FALSE(buffer::valid_type<char[5]>()); // NOLINT(*array*) 17 } 18 19 SECTION("big buffer") 20 { 21 using buffer = based::buffer<sizeof(std::size_t), alignof(std::size_t)>; 22 STATIC_REQUIRE(buffer::valid_type<std::uint8_t>()); 23 STATIC_REQUIRE(buffer::valid_type<std::size_t>()); 24 25 STATIC_REQUIRE_FALSE(buffer::valid_type<char[5]>()); // NOLINT(*array*) 26 } 27 } 28 29 TEST_CASE("buffer", "[template/buffer]") 30 { 31 using buffer = based::buffer<sizeof(std::size_t)>; 32 33 static constexpr std::uint8_t value = 8; 34 buffer buf(std::in_place_type<std::uint8_t>, value); 35 36 REQUIRE(*buf.as<std::uint8_t>() == value); 37 38 SECTION("emplace") 39 { 40 static constexpr std::uint16_t new_value = 10; 41 buf.emplace<std::uint16_t>(new_value); 42 43 REQUIRE(*buf.as<std::uint16_t>() == new_value); 44 } 45 46 SECTION("swap") 47 { 48 static constexpr std::uint16_t new_value = 10; 49 buffer new_buf(std::in_place_type<std::uint16_t>, new_value); 50 buf.swap(new_buf); 51 52 REQUIRE(*buf.as<std::uint16_t>() == new_value); 53 REQUIRE(*new_buf.as<std::uint8_t>() == value); 54 } 55 } 56 57 TEST_CASE("const buffer", "[template/buffer]") 58 { 59 using buffer = based::buffer<sizeof(std::size_t)>; 60 61 static constexpr std::uint8_t value = 8; 62 const buffer buf(std::in_place_type<std::uint8_t>, value); 63 64 REQUIRE(*buf.as<std::uint8_t>() == value); 65 }