notcurses/tests/egcpool.cpp
Nick Black b93bcebf0b
Extended grapheme clusters (#15)
Introduce egcpool for attached storage
Hook up style support
Switch entirely to UTF-8 char from wchar_t (#14)
Pull out next EGC in cell_load (#14)
2019-11-24 12:36:46 -05:00

76 lines
2.2 KiB
C++

#include <notcurses.h>
#include "egcpool.h"
#include "main.h"
class EGCPoolTest : public :: testing::Test {
protected:
void SetUp() override {
}
void TearDown() override {
egcpool_dump(&pool_);
}
egcpool pool_{};
};
TEST_F(EGCPoolTest, Initialized) {
EXPECT_EQ(nullptr, pool_.pool);
EXPECT_EQ(0, pool_.poolsize);
EXPECT_EQ(0, pool_.poolwrite);
EXPECT_EQ(0, pool_.poolused);
}
TEST_F(EGCPoolTest, AddAndRemove) {
const char* wstr = "";
ASSERT_EQ(0, egcpool_stash(&pool_, wstr));
EXPECT_NE(nullptr, pool_.pool);
EXPECT_STREQ(pool_.pool, wstr);
EXPECT_LT(0, pool_.poolsize);
EXPECT_EQ(strlen(wstr) + 1, pool_.poolused);
EXPECT_LT(0, pool_.poolwrite);
EXPECT_LE(pool_.poolused, pool_.poolsize);
egcpool_release(&pool_, 0);
EXPECT_EQ('\0', *pool_.pool);
EXPECT_LT(0, pool_.poolsize);
EXPECT_EQ(0, pool_.poolused);
EXPECT_LT(0, pool_.poolwrite);
}
TEST_F(EGCPoolTest, AddTwiceRemoveFirst) {
const char* wstr = "血的神话: 公元1967年湖南道县文革大屠杀纪实";
int o1 = egcpool_stash(&pool_, wstr);
int o2 = egcpool_stash(&pool_, wstr);
ASSERT_LT(o1, o2);
EXPECT_NE(nullptr, pool_.pool);
EXPECT_STREQ(pool_.pool, wstr);
EXPECT_STREQ(pool_.pool + strlen(wstr) + 1, wstr);
EXPECT_LT(0, pool_.poolsize);
EXPECT_EQ(2 * (strlen(wstr) + 1), pool_.poolused);
EXPECT_EQ(2 * (strlen(wstr) + 1), pool_.poolwrite);
EXPECT_LE(pool_.poolused, pool_.poolsize);
egcpool_release(&pool_, o1);
EXPECT_EQ('\0', pool_.pool[o1]);
EXPECT_EQ(strlen(wstr) + 1, pool_.poolused);
EXPECT_LT(0, pool_.poolwrite);
}
TEST_F(EGCPoolTest, AddTwiceRemoveSecond) {
const char* wstr = "血的神话: 公元1967年湖南道县文革大屠杀纪实";
int o1 = egcpool_stash(&pool_, wstr);
int o2 = egcpool_stash(&pool_, wstr);
ASSERT_LT(o1, o2);
EXPECT_NE(nullptr, pool_.pool);
EXPECT_STREQ(pool_.pool, wstr);
EXPECT_STREQ(pool_.pool + strlen(wstr) + 1, wstr);
EXPECT_LT(0, pool_.poolsize);
EXPECT_EQ(2 * (strlen(wstr) + 1), pool_.poolused);
EXPECT_EQ(2 * (strlen(wstr) + 1), pool_.poolwrite);
EXPECT_LE(pool_.poolused, pool_.poolsize);
egcpool_release(&pool_, o2);
EXPECT_EQ('\0', pool_.pool[o2]);
EXPECT_EQ(strlen(wstr) + 1, pool_.poolused);
EXPECT_LT(0, pool_.poolwrite);
}