improve GapBuffer test coverage

This commit is contained in:
Josh Holtrop 2016-12-18 19:20:48 -05:00
parent 24eb47b0ad
commit e78a3672c5
3 changed files with 25 additions and 4 deletions

View File

@ -56,7 +56,7 @@ bool Buffer::load_from_file(const char * filename)
return false;
}
size_t buffer_size = ((unsigned long)file_size + 2u * System::page_size) & System::page_base_mask;
size_t buffer_size = ((unsigned long)file_size + System::page_size + (64u * 1024u)) & System::page_base_mask;
uint8_t * buffer = (uint8_t *)System::alloc_pages(buffer_size >> System::page_size_log);
if (buffer == NULL)
{

View File

@ -4,7 +4,8 @@
GapBuffer::GapBuffer()
{
m_buffer = (uint8_t *)System::alloc_pages(1u);
int num_pages = (64u * 1024u + System::page_size - 1u) >> System::page_size_log;
m_buffer = (uint8_t *)System::alloc_pages(num_pages);
m_buffer_size = System::page_size;
m_size = 0u;
m_gap_position = 0u;

View File

@ -1,6 +1,7 @@
#include "gtest/gtest.h"
#include "GapBuffer.h"
#include "System.h"
#include <string>
TEST(GapBufferTest, creates_an_empty_buffer)
{
@ -22,12 +23,16 @@ TEST(GapBufferTest, allows_inserting)
GapBuffer gp;
gp.insert(0u, (const uint8_t *)"test", 4u);
EXPECT_EQ("test", gp.get_string());
EXPECT_EQ('s', *gp.address(2u));
EXPECT_EQ(4u, gp.size());
EXPECT_EQ("test", gp.get_string());
gp.insert(2u, (const uint8_t *)"12", 2u);
EXPECT_EQ("te12st", gp.get_string());
/* The gap should be between the '2' and 's' now */
EXPECT_GT(gp.address(4u) - gp.address(3u), 100u);
EXPECT_EQ('s', *gp.address(4u));
EXPECT_EQ(6u, gp.size());
EXPECT_EQ("te12st", gp.get_string());
gp.insert(0u, (const uint8_t *)"-", 1u);
EXPECT_EQ("-te12st", gp.get_string());
@ -37,3 +42,18 @@ TEST(GapBufferTest, allows_inserting)
EXPECT_EQ("-te12st!", gp.get_string());
EXPECT_EQ(8u, gp.size());
}
TEST(GapBufferTest, allocates_more_memory_and_copies_buffer_contents_when_needed)
{
GapBuffer gp;
std::string s("ABCD");
gp.insert(0u, (const uint8_t *)"ABCDEFGH", 8u);
for (size_t i = 0u; i < (80u * 1024u); i++)
{
gp.insert(4u, (const uint8_t *)"-", 1u);
s += "-";
}
s += "EFGH";
EXPECT_EQ(s, gp.get_string());
}