#include <gtest/gtest.h>
#include "cloudini_lib/cloudini.hpp"
TEST(Cloudini, Header) {
using namespace Cloudini;
EncodingInfo header;
header.width = 10;
header.height = 20;
header.point_step = sizeof(float) * 4;
header.encoding_opt = EncodingOptions::LOSSY;
header.compression_opt = CompressionOption::ZSTD;
header.fields.push_back({"x", 0, FieldType::FLOAT32, 0.01});
header.fields.push_back({"y", 4, FieldType::FLOAT32, 0.01});
header.fields.push_back({"z", 8, FieldType::FLOAT32, 0.01});
header.fields.push_back({"intensity", 12, FieldType::FLOAT32, 0.01});
std::vector<uint8_t> buffer;
EncodeHeader(header, buffer);
ConstBufferView input(buffer.data(), buffer.size());
auto decoded_header = DecodeHeader(input);
ASSERT_EQ(decoded_header.width, header.width);
ASSERT_EQ(decoded_header.height, header.height);
ASSERT_EQ(decoded_header.point_step, header.point_step);
ASSERT_EQ(decoded_header.encoding_opt, header.encoding_opt);
ASSERT_EQ(decoded_header.compression_opt, header.compression_opt);
ASSERT_EQ(decoded_header.fields.size(), header.fields.size());
for (size_t i = 0; i < header.fields.size(); ++i) {
ASSERT_EQ(decoded_header.fields[i].name, header.fields[i].name);
ASSERT_EQ(decoded_header.fields[i].offset, header.fields[i].offset);
ASSERT_EQ(decoded_header.fields[i].type, header.fields[i].type);
ASSERT_EQ(decoded_header.fields[i].resolution, header.fields[i].resolution);
}
}
TEST(Cloudini, HeaderTruncatedInput) {
using namespace Cloudini;
std::vector<uint8_t> buffer = {'C', 'L', 'O', 'U'};
ConstBufferView input(buffer.data(), buffer.size());
EXPECT_THROW(DecodeHeader(input), std::runtime_error);
}
TEST(Cloudini, HeaderMissingYamlTerminator) {
using namespace Cloudini;
EncodingInfo header;
header.width = 1;
header.height = 1;
header.point_step = sizeof(float) * 3;
header.encoding_opt = EncodingOptions::LOSSY;
header.compression_opt = CompressionOption::ZSTD;
header.fields.push_back({"x", 0, FieldType::FLOAT32, 0.01F});
header.fields.push_back({"y", 4, FieldType::FLOAT32, 0.01F});
header.fields.push_back({"z", 8, FieldType::FLOAT32, 0.01F});
std::vector<uint8_t> buffer;
EncodeHeader(header, buffer);
buffer.pop_back();
ConstBufferView input(buffer.data(), buffer.size());
EXPECT_THROW(DecodeHeader(input), std::runtime_error);
}