Sat, 30 Apr 2022 09:03:17 +0200
#170 first basic write tests
src/buffer.c | file | annotate | diff | comparison | revisions | |
test/test_buffer.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/buffer.c Sat Apr 30 08:40:40 2022 +0200 1.2 +++ b/src/buffer.c Sat Apr 30 09:03:17 2022 +0200 1.3 @@ -169,6 +169,26 @@ 1.4 return len / size; 1.5 } 1.6 1.7 +int cxBufferPut( 1.8 + CxBuffer *buffer, 1.9 + int c 1.10 +) { 1.11 + c &= 0xFF; 1.12 + unsigned char const ch = c; 1.13 + if (cxBufferWrite(&ch, 1, 1, buffer) == 1) { 1.14 + return c; 1.15 + } else { 1.16 + return EOF; 1.17 + } 1.18 +} 1.19 + 1.20 +size_t cxBufferPutString( 1.21 + CxBuffer *buffer, 1.22 + const char *str 1.23 +) { 1.24 + return cxBufferWrite(str, 1, strlen(str), buffer); 1.25 +} 1.26 + 1.27 size_t cxBufferRead( 1.28 void *ptr, 1.29 size_t size, 1.30 @@ -194,29 +214,6 @@ 1.31 return len / size; 1.32 } 1.33 1.34 -int cxBufferPut( 1.35 - CxBuffer *buffer, 1.36 - int c 1.37 -) { 1.38 - if (buffer->pos >= buffer->capacity) { 1.39 - if ((buffer->flags & CX_BUFFER_AUTO_EXTEND) == CX_BUFFER_AUTO_EXTEND) { 1.40 - if (cxBufferMinimumCapacity(buffer, buffer->capacity + 1)) { 1.41 - return EOF; 1.42 - } 1.43 - } else { 1.44 - return EOF; 1.45 - } 1.46 - } 1.47 - 1.48 - c &= 0xFF; 1.49 - buffer->bytes[buffer->pos] = (unsigned char) c; 1.50 - buffer->pos++; 1.51 - if (buffer->pos > buffer->size) { 1.52 - buffer->size = buffer->pos; 1.53 - } 1.54 - return c; 1.55 -} 1.56 - 1.57 int cxBufferGet(CxBuffer *buffer) { 1.58 if (cxBufferEof(buffer)) { 1.59 return EOF; 1.60 @@ -227,13 +224,6 @@ 1.61 } 1.62 } 1.63 1.64 -size_t cxBufferPutString( 1.65 - CxBuffer *buffer, 1.66 - const char *str 1.67 -) { 1.68 - return cxBufferWrite(str, 1, strlen(str), buffer); 1.69 -} 1.70 - 1.71 int cxBufferShiftLeft( 1.72 CxBuffer *buffer, 1.73 size_t shift
2.1 --- a/test/test_buffer.cpp Sat Apr 30 08:40:40 2022 +0200 2.2 +++ b/test/test_buffer.cpp Sat Apr 30 09:03:17 2022 +0200 2.3 @@ -258,4 +258,127 @@ 2.4 EXPECT_EQ(memcmp(space, "\0\0\0\0\0 test", 10), 0); 2.5 EXPECT_EQ(buf.size, 0); 2.6 EXPECT_EQ(buf.pos, 0); 2.7 + cxBufferDestroy(&buf); 2.8 } 2.9 + 2.10 +class BufferWrite : public ::testing::Test { 2.11 +protected: 2.12 + CxBuffer buf{}; 2.13 + 2.14 + void SetUp() override { 2.15 + cxBufferInit(&buf, nullptr, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.16 + buf.capacity = 8; // artificially reduce capacity to check OOB writes 2.17 + memset(buf.space, 0, 16); 2.18 + memcpy(buf.space, "prep", 4); 2.19 + buf.size = buf.pos = 4; 2.20 + } 2.21 + 2.22 + void TearDown() override { 2.23 + cxBufferDestroy(&buf); 2.24 + } 2.25 +}; 2.26 + 2.27 +TEST_F(BufferWrite, SizeOneFit) { 2.28 + const char *data = "test"; 2.29 + ASSERT_EQ(buf.capacity, 8); 2.30 + ASSERT_EQ(buf.pos, 4); 2.31 + size_t written = cxBufferWrite(data, 1, 4, &buf); 2.32 + EXPECT_EQ(written, 4); 2.33 + EXPECT_EQ(buf.size, 8); 2.34 + EXPECT_EQ(buf.pos, 8); 2.35 + EXPECT_EQ(buf.capacity, 8); 2.36 + EXPECT_EQ(memcmp(buf.space, "preptest", 8), 0); 2.37 +} 2.38 + 2.39 +TEST_F(BufferWrite, SizeOneOverwrite) { 2.40 + 2.41 +} 2.42 + 2.43 +TEST_F(BufferWrite, SizeOnePartialOverwrite) { 2.44 + 2.45 +} 2.46 + 2.47 +TEST_F(BufferWrite, SizeOneDiscard) { 2.48 + const char *data = "testing"; 2.49 + ASSERT_EQ(buf.capacity, 8); 2.50 + ASSERT_EQ(buf.pos, 4); 2.51 + size_t written = cxBufferWrite(data, 1, 7, &buf); 2.52 + EXPECT_EQ(written, 4); 2.53 + EXPECT_EQ(buf.size, 8); 2.54 + EXPECT_EQ(buf.pos, 8); 2.55 + EXPECT_EQ(buf.capacity, 8); 2.56 + EXPECT_EQ(memcmp(buf.space, "preptest\0", 9), 0); 2.57 +} 2.58 + 2.59 +TEST_F(BufferWrite, SizeOneExtend) { 2.60 + buf.flags |= CX_BUFFER_AUTO_EXTEND; 2.61 + const char *data = "testing"; 2.62 + ASSERT_EQ(buf.capacity, 8); 2.63 + ASSERT_EQ(buf.pos, 4); 2.64 + size_t written = cxBufferWrite(data, 1, 7, &buf); 2.65 + EXPECT_EQ(written, 7); 2.66 + EXPECT_EQ(buf.size, 11); 2.67 + EXPECT_EQ(buf.pos, 11); 2.68 + EXPECT_GE(buf.capacity, 11); 2.69 + EXPECT_EQ(memcmp(buf.space, "preptesting", 11), 0); 2.70 +} 2.71 + 2.72 +TEST_F(BufferWrite, MultibyteOverwrite) { 2.73 + 2.74 +} 2.75 + 2.76 +TEST_F(BufferWrite, MultibytePartialOverwrite) { 2.77 + 2.78 +} 2.79 + 2.80 +TEST_F(BufferWrite, MultibyteFit) { 2.81 + 2.82 +} 2.83 + 2.84 +TEST_F(BufferWrite, MultibyteDiscard) { 2.85 + // remember: whole elements are discarded if they do not fit 2.86 +} 2.87 + 2.88 +TEST_F(BufferWrite, MultibyteExtend) { 2.89 + 2.90 +} 2.91 + 2.92 +TEST_F(BufferWrite, PutcWrapperFit) { 2.93 + 2.94 +} 2.95 + 2.96 +TEST_F(BufferWrite, PutcWrapperOverwrite) { 2.97 + 2.98 +} 2.99 + 2.100 +TEST_F(BufferWrite, PutcWrapperPartialOverwrite) { 2.101 + 2.102 +} 2.103 + 2.104 +TEST_F(BufferWrite, PutcWrapperDiscard) { 2.105 + 2.106 +} 2.107 + 2.108 +TEST_F(BufferWrite, PutcWrapperExtend) { 2.109 + 2.110 +} 2.111 + 2.112 +TEST_F(BufferWrite, PutStringWrapperFit) { 2.113 + 2.114 +} 2.115 + 2.116 +TEST_F(BufferWrite, PutStringWrapperOverwrite) { 2.117 + 2.118 +} 2.119 + 2.120 +TEST_F(BufferWrite, PutStringWrapperPartialOverwrite) { 2.121 + 2.122 +} 2.123 + 2.124 +TEST_F(BufferWrite, PutStringWrapperDiscard) { 2.125 + 2.126 +} 2.127 + 2.128 +TEST_F(BufferWrite, PutStringWrapperExtend) { 2.129 + 2.130 +}