diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2021-03-12 16:44:02 +0200 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2021-03-12 16:44:02 +0200 |
commit | b7f5d7565a19efbfebd72f2877444c552e4230c8 (patch) | |
tree | e17ec2edc3be86672442ca1ab854f21cb566b598 /libk/test | |
parent | vmm: map multiboot structs (diff) | |
download | kernel.cpp-b7f5d7565a19efbfebd72f2877444c552e4230c8.tar.xz |
libk: add Result<T, E> class
Diffstat (limited to 'libk/test')
-rw-r--r-- | libk/test/result.cc | 16 | ||||
-rw-r--r-- | libk/test/string.cc | 14 | ||||
-rw-r--r-- | libk/test/types.cc | 58 |
3 files changed, 88 insertions, 0 deletions
diff --git a/libk/test/result.cc b/libk/test/result.cc new file mode 100644 index 0000000..be93a07 --- /dev/null +++ b/libk/test/result.cc @@ -0,0 +1,16 @@ +#include <result.h> + +enum ErrorX { one, two = 5, three, NoError }; + +// operator bool +static_assert(!(Result<int, ErrorX>{ErrorX::one})); +static_assert(!(Result<int, ErrorX>{ErrorX::two})); +static_assert((Result<int, ErrorX>{5})); + +// error +static_assert((Result<int, ErrorX>{ErrorX::one}).error() == ErrorX::one); +static_assert((Result<int, ErrorX>{5}).error() == ErrorX::NoError); + +// value +static_assert((Result<int, ErrorX>{ErrorX::one}).value() == int{}); +static_assert((Result<int, ErrorX>{5}).value() == 5); diff --git a/libk/test/string.cc b/libk/test/string.cc new file mode 100644 index 0000000..4d7d340 --- /dev/null +++ b/libk/test/string.cc @@ -0,0 +1,14 @@ +#include <string.h> + +// strlen +static_assert(strlen("") == 0); +static_assert(strlen("0") == 1); +static_assert(strlen("hello") == 5); +static_assert(strlen("world") == 5); + +// reverse +static_assert([]() { + char s[] = "xyz"; + reverse(s, strlen(s)); + return s[0] == 'z' && s[1] == 'y' && s[2] == 'x' && s[3] == '\0'; +}()); diff --git a/libk/test/types.cc b/libk/test/types.cc new file mode 100644 index 0000000..3686a78 --- /dev/null +++ b/libk/test/types.cc @@ -0,0 +1,58 @@ +#include <stdint.h> + +namespace libk { +#include "types.h" +} + +// types +static_assert(sizeof(libk::size_t) >= 2); + +static_assert(sizeof(libk::uint8_t) == 1); +static_assert(libk::uint8_t_max == UINT8_MAX); + +static_assert(sizeof(libk::uint16_t) == 2); +static_assert(libk::uint16_t_max == UINT16_MAX); + +static_assert(sizeof(libk::uint32_t) == 4); +static_assert(libk::uint32_t_max == UINT32_MAX); + +static_assert(sizeof(libk::uint64_t) == 8); +static_assert(libk::uint64_t_max == UINT64_MAX); + +static_assert(sizeof(libk::int8_t) == 1); +static_assert(libk::int8_t_min == INT8_MIN); +static_assert(libk::int8_t_max == INT8_MAX); + +static_assert(sizeof(libk::int16_t) == 2); +static_assert(libk::int16_t_min == INT16_MIN); +static_assert(libk::int16_t_max == INT16_MAX); + +static_assert(sizeof(libk::int32_t) == 4); +static_assert(libk::int32_t_min == INT32_MIN); +static_assert(libk::int32_t_max == INT32_MAX); + +static_assert(sizeof(libk::int64_t) == 8); +static_assert(libk::int64_t_min == INT64_MIN); +static_assert(libk::int64_t_max == INT64_MAX); + +// is_same +static_assert(libk::is_same<int, int>() == true); +static_assert(libk::is_same<int, unsigned int>() == false); + +// is_unsigned +static_assert(libk::is_unsigned<uint8_t>() == true); +static_assert(libk::is_unsigned<uint16_t>() == true); +static_assert(libk::is_unsigned<uint32_t>() == true); +static_assert(libk::is_unsigned<uint64_t>() == true); + +static_assert(libk::is_unsigned<int8_t>() == false); +static_assert(libk::is_unsigned<int16_t>() == false); +static_assert(libk::is_unsigned<int32_t>() == false); +static_assert(libk::is_unsigned<int64_t>() == false); + +// error_enum_t +enum EnumX { x, y, z }; +enum ErrorX { one, two, three, NoError }; + +static_assert(!libk::error_enum_t<EnumX>); +static_assert(libk::error_enum_t<ErrorX>); |