CommonLibraries/YoloRuntime/tests/runner_mask_output_test.cpp

27 lines
1.2 KiB
C++
Raw Permalink Normal View History

#include "runner_mask_output.h"
#include <cassert>
#include <vector>
#include <sstream>
#include <iterator>
int main() {
unsigned char data[]={255,0,99, 0,255,99}; // Padded rows; preserve holes.
yolo_mask_view_v1_t mask{};mask.data=data;mask.width=mask.height=2;
mask.row_stride_bytes=3;mask.origin_x=1;mask.origin_y=1;
std::vector<unsigned char> image(4*4*4,100);
assert(runner_mask_output::blend(image.data(),4,4,16,4,mask,0));
assert(image[20]==61 && image[21]==147 && image[22]==108 && image[23]==100);
assert(image[24]==100 && image[36]==100 && image[40]!=100);
auto invalid=mask;invalid.origin_x=4;
assert(!runner_mask_output::blend(image.data(),4,4,16,4,invalid,0));
const auto path=std::filesystem::temp_directory_path()/"yolo-instance-mask-contract.pgm";
assert(runner_mask_output::save(path,mask));
std::ifstream file(path,std::ios::binary);
std::vector<unsigned char> bytes((std::istreambuf_iterator<char>(file)),{});
const std::string header="P5\n2 2\n255\n";
assert(bytes.size()==header.size()+4);
assert(std::equal(header.begin(),header.end(),bytes.begin()));
assert(bytes[header.size()]==255 && bytes[header.size()+1]==0 && bytes.back()==255);
file.close();std::filesystem::remove(path);
}