add BitmapStretch unit test #1558

pull/1567/head
nick black 3 years ago
parent 0ff59e5a95
commit f19c6c88ff
No known key found for this signature in database
GPG Key ID: 5F43400C21CBFACC

@ -1,4 +1,5 @@
#include "main.h"
#include "visual-details.h"
#include <vector>
TEST_CASE("Bitmaps") {
@ -31,17 +32,73 @@ TEST_CASE("Bitmaps") {
auto newn = ncvisual_render(nc_, ncv, &vopts);
CHECK(newn);
CHECK(0 == notcurses_render(nc_));
ncplane_destroy(newn);
CHECK(0 == ncplane_destroy(newn));
CHECK(0 == notcurses_render(nc_));
ncvisual_destroy(ncv);
}
#endif
SUBCASE("BitmapStretch") {
// first, assemble a visual equivalent to 1 cell
auto y = nc_->tcache.cellpixy;
auto x = nc_->tcache.cellpixx;
std::vector<uint32_t> v(x * y, htole(0xffffff00));
auto ncv = ncvisual_from_rgba(v.data(), y, sizeof(decltype(v)::value_type) * x, x);
REQUIRE(nullptr != ncv);
struct ncvisual_options vopts = {
.n = nullptr,
.scaling = NCSCALE_NONE,
.y = 0, .x = 0,
.begy = 0, .begx = 0,
.leny = y, .lenx = x,
.blitter = NCBLIT_PIXEL,
.flags = NCVISUAL_OPTION_NODEGRADE,
.transcolor = 0,
};
auto n = ncvisual_render(nc_, ncv, &vopts);
REQUIRE(nullptr != n);
auto s = n->sprite;
REQUIRE(nullptr != s);
CHECK(nc_->tcache.cellpixy == ncv->rows);
CHECK(nc_->tcache.cellpixx == ncv->cols);
CHECK(0 == notcurses_render(nc_));
struct ncplane_options nopts = {
.y = 1,
.x = 1,
.rows = 4,
.cols = 4,
.userptr = nullptr, .name = "bigp", .resizecb = nullptr,
.flags = 0, .margin_b = 0, .margin_r = 0,
};
vopts.scaling = NCSCALE_STRETCH;
vopts.n = ncplane_create(n_, &nopts);
REQUIRE(vopts.n);
uint64_t white = CHANNELS_RGB_INITIALIZER(0xff, 0xff, 0xff, 0xff, 0xff, 0xff);
ncplane_set_base(vopts.n, "x", 0, white);
CHECK(vopts.n == ncvisual_render(nc_, ncv, &vopts));
CHECK(0 == notcurses_render(nc_));
CHECK(0 == ncvisual_inflate(ncv, 4));
CHECK(4 * nc_->tcache.cellpixy == ncv->rows);
CHECK(4 * nc_->tcache.cellpixx == ncv->cols);
vopts.y = 1;
vopts.x = 6;
vopts.n = nullptr;
vopts.scaling = NCSCALE_NONE;
auto infn = ncvisual_render(nc_, ncv, &vopts);
REQUIRE(infn);
CHECK(4 == ncplane_dim_y(infn));
CHECK(4 == ncplane_dim_x(infn));
CHECK(0 == notcurses_render(nc_));
CHECK(0 == ncplane_destroy(vopts.n));
CHECK(0 == ncplane_destroy(n));
ncvisual_destroy(ncv);
}
SUBCASE("PixelCellWipe") {
// first, assemble a visual equivalent to 4 cells
auto y = 2 * nc_->tcache.cellpixy;
auto x = 2 * nc_->tcache.cellpixx;
std::vector<uint32_t> v(x * y, 0xffffffff);
std::vector<uint32_t> v(x * y, htole(0xffffffff));
auto ncv = ncvisual_from_rgba(v.data(), y, sizeof(decltype(v)::value_type) * x, x);
REQUIRE(nullptr != ncv);
struct ncvisual_options vopts = {
@ -67,7 +124,7 @@ TEST_CASE("Bitmaps") {
CHECK(0 == notcurses_render(nc_));
CHECK(1 == ncplane_putchar_yx(n_, 0, 1, 'x'));
CHECK(0 == notcurses_render(nc_));
ncplane_destroy(n);
CHECK(0 == ncplane_destroy(n));
ncvisual_destroy(ncv);
CHECK(0 == notcurses_render(nc_));
}
@ -76,7 +133,7 @@ TEST_CASE("Bitmaps") {
// first, assemble a visual equivalent to 4 cells
auto y = 2 * nc_->tcache.cellpixy;
auto x = 2 * nc_->tcache.cellpixx;
std::vector<uint32_t> v(x * y, 0xffffffff);
std::vector<uint32_t> v(x * y, htole(0xffffffff));
for(auto& e : v){
e -= random() % 0x1000000;
}
@ -105,7 +162,7 @@ TEST_CASE("Bitmaps") {
CHECK(0 == notcurses_render(nc_));
CHECK(1 == ncplane_putchar_yx(n_, 0, 1, 'x'));
CHECK(0 == notcurses_render(nc_));
ncplane_destroy(n);
CHECK(0 == ncplane_destroy(n));
ncvisual_destroy(ncv);
CHECK(0 == notcurses_render(nc_));
}
@ -114,7 +171,7 @@ TEST_CASE("Bitmaps") {
// first, assemble a visual equivalent to 100 cells
auto y = 10 * nc_->tcache.cellpixy;
auto x = 10 * nc_->tcache.cellpixx;
std::vector<uint32_t> v(x * y, 0xffffffff);
std::vector<uint32_t> v(x * y, htole(0xffffffff));
for(auto& e : v){
e -= random() % 0x1000000;
}
@ -143,7 +200,7 @@ TEST_CASE("Bitmaps") {
CHECK(0 == notcurses_render(nc_));
CHECK(1 == ncplane_putchar_yx(n_, 8, 3, 'x'));
CHECK(0 == notcurses_render(nc_));
ncplane_destroy(n);
CHECK(0 == ncplane_destroy(n));
ncvisual_destroy(ncv);
CHECK(0 == notcurses_render(nc_));
}
@ -155,7 +212,7 @@ TEST_CASE("Bitmaps") {
auto dimx = 9;
auto y = dimy * nc_->tcache.cellpixy;
auto x = dimx * nc_->tcache.cellpixx;
std::vector<uint32_t> v(x * y, 0xffffffff);
std::vector<uint32_t> v(x * y, htole(0xffffffff));
// every other cell, set some pixels transparent
for(int i = 0 ; i < dimy * dimx ; ++i){
if(i % 2){
@ -198,7 +255,7 @@ TEST_CASE("Bitmaps") {
CHECK(((yy * dimx + xx) % 2) == sprixel_state(s, yy, xx));
}
}
ncplane_destroy(n);
CHECK(0 == ncplane_destroy(n));
}
// too much output -- OOMs ctest FIXME
@ -225,7 +282,7 @@ TEST_CASE("Bitmaps") {
CHECK(0 == notcurses_render(nc_));
}
}
ncplane_destroy(newn);
CHECK(0 == ncplane_destroy(newn));
CHECK(0 == notcurses_render(nc_));
ncvisual_destroy(ncv);
}

Loading…
Cancel
Save