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; 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); uint8_t * buffer = (uint8_t *)System::alloc_pages(buffer_size >> System::page_size_log);
if (buffer == NULL) if (buffer == NULL)
{ {

View File

@ -4,7 +4,8 @@
GapBuffer::GapBuffer() 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_buffer_size = System::page_size;
m_size = 0u; m_size = 0u;
m_gap_position = 0u; m_gap_position = 0u;

View File

@ -1,6 +1,7 @@
#include "gtest/gtest.h" #include "gtest/gtest.h"
#include "GapBuffer.h" #include "GapBuffer.h"
#include "System.h" #include "System.h"
#include <string>
TEST(GapBufferTest, creates_an_empty_buffer) TEST(GapBufferTest, creates_an_empty_buffer)
{ {
@ -22,12 +23,16 @@ TEST(GapBufferTest, allows_inserting)
GapBuffer gp; GapBuffer gp;
gp.insert(0u, (const uint8_t *)"test", 4u); 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(4u, gp.size());
EXPECT_EQ("test", gp.get_string());
gp.insert(2u, (const uint8_t *)"12", 2u); 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(6u, gp.size());
EXPECT_EQ("te12st", gp.get_string());
gp.insert(0u, (const uint8_t *)"-", 1u); gp.insert(0u, (const uint8_t *)"-", 1u);
EXPECT_EQ("-te12st", gp.get_string()); EXPECT_EQ("-te12st", gp.get_string());
@ -37,3 +42,18 @@ TEST(GapBufferTest, allows_inserting)
EXPECT_EQ("-te12st!", gp.get_string()); EXPECT_EQ("-te12st!", gp.get_string());
EXPECT_EQ(8u, gp.size()); 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());
}