|
|
-
- #include <gp/allocator/arena.hpp>
- #include <gp/array.hpp>
- #include <gp/enveloppe/cbor.hpp>
- #include "test_scaffold.h"
-
- struct cbor_test : public test_scaffold {
- cbor_test() {
- name = __FILE__ ":1";
- }
-
- virtual int run() {
- gp::array<char, 4096> store;
- gp::arena alloc{&*store.begin(), store.size()};
-
- using some_int = gp::fixed_variant<int, unsigned int, long long>;
- {
- some_int a{16};
- some_int b = 12u;
- b = a;
- gp_config::assertion(b.is_a<int>(), "b got wrong type assigned");
- }
- {
- some_int a{16u};
- some_int b = a;
- gp_config::assertion(b.is_a<unsigned int>(), "b got wrong type assigned");
- gp_config::assertion(b.value<unsigned int>() == 16, "b got wrong value assigned");
- }
- {
- some_int a{16u};
- some_int b = gp::move(a);
- gp_config::assertion(b.is_a<unsigned int>(), "b got wrong type assigned");
- gp_config::assertion(b.value<unsigned int>() == 16, "b got wrong value assigned");
- }
- {
- some_int a{16u};
- some_int b;
- new(&b) some_int(a);
- gp_config::assertion(b.is_a<unsigned int>(), "b got wrong type assigned");
- gp_config::assertion(b.value<unsigned int>() == 16, "b got wrong value assigned");
- }
- {
- some_int a{16u};
- some_int b;
- new(&b) some_int(gp::move(a));
- gp_config::assertion(b.is_a<unsigned int>(), "b got wrong type assigned");
- gp_config::assertion(b.value<unsigned int>() == 16, "b got wrong value assigned");
- }
- {
- gp::vector<some_int> vec{alloc};
- vec.emplace_back(12u);
- vec.emplace_back(-16);
- gp_config::assertion(vec[0].is_a<unsigned int>(), "vec0 got wrong type assigned");
- gp_config::assertion(vec[1].is_a<int>(), "vec1 got wrong type assigned");
- }
- {
- gp::cbor_value data{alloc};
- auto gen = data.new_object();
- gen.push_back(gp::make_pair(gp::cbor_value{uint8_t(12), alloc}, gp::cbor_value{int32_t(-98), alloc}));
- gen.push_back(gp::make_pair(gp::cbor_value{uint8_t(13), alloc}, gp::cbor_value{uint32_t(98), alloc}));
- data = gen;
-
- gp::array<std::byte, 7> serialized;
- gp::array<std::byte, 7> serialized_manual{
- std::byte(0b10100010),
- std::byte(0b00001100),
- std::byte(0b00111000), std::byte(98),
- std::byte(0b00001101),
- std::byte(0b00011000), std::byte(98)
- };
-
- auto ret_it = data.encode(serialized.as_buffer());
-
- gp_config::assertion(serialized.begin() != ret_it, "could not encode");
- gp_config::assertion(serialized == serialized_manual, "data did not serialize correctly");
- }
- {
- gp::cbor_value data{alloc};
- data = gp::cbor_number(1);
-
- gp::array<std::byte, 1> serialized;
- gp::array<std::byte, 1> serialized_manual{
- std::byte(1)
- };
-
- auto ret_it = data.encode(serialized.as_buffer());
-
- gp_config::assertion(serialized.begin() != ret_it, "could not encode");
- gp_config::assertion(serialized == serialized_manual, "data did not serialize correctly");
- }
- {
- gp::cbor_value data{alloc};
- data = gp::cbor_floating_point(128.5f);
-
- gp::array<std::byte, 5> serialized;
- gp::array<std::byte, 5> serialized_manual{
- std::byte(0b11111010),
- std::byte(0b01000011),
- std::byte(0b00000000),
- std::byte(0b10000000),
- std::byte(0b00000000)
- };
-
- auto ret_it = data.encode(serialized.as_buffer());
-
- gp_config::assertion(serialized.begin() != ret_it, "could not encode");
- gp_config::assertion(serialized == serialized_manual, "data did not serialize correctly");
- }
- {
- gp::vector<std::byte> str{alloc};
- str.reserve(5);
- for(auto a : {'h', 'e', 'l', 'l', 'o'})
- str.push_back((std::byte)a);
- gp::cbor_value data{alloc};
- data = str;
-
- gp::array<std::byte, 6> serialized;
- gp::array<std::byte, 6> serialized_manual{
- std::byte(0b01000101),
- std::byte('h'),
- std::byte('e'),
- std::byte('l'),
- std::byte('l'),
- std::byte('o')
- };
-
- auto ret_it = data.encode(serialized.as_buffer());
-
- gp_config::assertion(serialized.begin() != ret_it, "could not encode");
- gp_config::assertion(serialized == serialized_manual, "data did not serialize correctly");
- }
-
- return 0;
- }
- };
-
- append_test dummy_pg5zhr8bv(new cbor_test{});
|