Sun, 01 May 2022 11:44:23 +0200
#170 complete write tests for status quo
src/buffer.c | file | annotate | diff | comparison | revisions | |
src/cx/buffer.h | file | annotate | diff | comparison | revisions | |
test/test_buffer.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/buffer.c Sun May 01 10:39:13 2022 +0200 1.2 +++ b/src/buffer.c Sun May 01 11:44:23 2022 +0200 1.3 @@ -57,6 +57,7 @@ 1.4 buffer->pos = 0; 1.5 1.6 buffer->flush_func = NULL; 1.7 + buffer->flush_target = NULL; 1.8 buffer->flush_blkmax = 0; 1.9 buffer->flush_blksize = 4096; 1.10 buffer->flush_threshold = SIZE_MAX;
2.1 --- a/src/cx/buffer.h Sun May 01 10:39:13 2022 +0200 2.2 +++ b/src/cx/buffer.h Sun May 01 11:44:23 2022 +0200 2.3 @@ -125,6 +125,11 @@ 2.4 ); 2.5 2.6 /** 2.7 + * The target for \c flush_func. 2.8 + */ 2.9 + void *flush_target; 2.10 + 2.11 + /** 2.12 * Flag register for buffer features. 2.13 * @see #CX_BUFFER_DEFAULT 2.14 * @see #CX_BUFFER_FREE_CONTENTS
3.1 --- a/test/test_buffer.cpp Sun May 01 10:39:13 2022 +0200 3.2 +++ b/test/test_buffer.cpp Sun May 01 11:44:23 2022 +0200 3.3 @@ -36,6 +36,7 @@ 3.4 EXPECT_EQ(buf->flush_blksize, 4096); 3.5 EXPECT_EQ(buf->flush_threshold, SIZE_MAX); 3.6 EXPECT_EQ(buf->flush_func, nullptr); 3.7 + EXPECT_EQ(buf->flush_target, nullptr); 3.8 } 3.9 3.10 TEST(BufferInit, WrapSpace) { 3.11 @@ -311,6 +312,7 @@ 3.12 const char *data = "test"; 3.13 ASSERT_EQ(buf.capacity, 8); 3.14 ASSERT_EQ(buf.pos, 4); 3.15 + ASSERT_EQ(buf.size, 4); 3.16 size_t written = cxBufferWrite(data, 1, 4, &buf); 3.17 EXPECT_EQ(written, 4); 3.18 EXPECT_EQ(buf.size, 8); 3.19 @@ -319,18 +321,11 @@ 3.20 EXPECT_EQ(memcmp(buf.space, "preptest", 8), 0); 3.21 } 3.22 3.23 -TEST_F(BufferWrite, SizeOneOverwrite) { 3.24 - 3.25 -} 3.26 - 3.27 -TEST_F(BufferWrite, SizeOnePartialOverwrite) { 3.28 - 3.29 -} 3.30 - 3.31 TEST_F(BufferWrite, SizeOneDiscard) { 3.32 const char *data = "testing"; 3.33 ASSERT_EQ(buf.capacity, 8); 3.34 ASSERT_EQ(buf.pos, 4); 3.35 + ASSERT_EQ(buf.size, 4); 3.36 size_t written = cxBufferWrite(data, 1, 7, &buf); 3.37 EXPECT_EQ(written, 4); 3.38 EXPECT_EQ(buf.size, 8); 3.39 @@ -344,6 +339,7 @@ 3.40 const char *data = "testing"; 3.41 ASSERT_EQ(buf.capacity, 8); 3.42 ASSERT_EQ(buf.pos, 4); 3.43 + ASSERT_EQ(buf.size, 4); 3.44 size_t written = cxBufferWrite(data, 1, 7, &buf); 3.45 EXPECT_EQ(written, 7); 3.46 EXPECT_EQ(buf.size, 11); 3.47 @@ -352,62 +348,162 @@ 3.48 EXPECT_EQ(memcmp(buf.space, "preptesting", 11), 0); 3.49 } 3.50 3.51 -TEST_F(BufferWrite, MultibyteOverwrite) { 3.52 - 3.53 -} 3.54 - 3.55 -TEST_F(BufferWrite, MultibytePartialOverwrite) { 3.56 - 3.57 -} 3.58 - 3.59 TEST_F(BufferWrite, MultibyteFit) { 3.60 - 3.61 + const char *data = "test"; 3.62 + ASSERT_EQ(buf.capacity, 8); 3.63 + ASSERT_EQ(buf.pos, 4); 3.64 + ASSERT_EQ(buf.size, 4); 3.65 + size_t written = cxBufferWrite(data, 2, 2, &buf); 3.66 + EXPECT_EQ(written, 2); 3.67 + EXPECT_EQ(buf.size, 8); 3.68 + EXPECT_EQ(buf.pos, 8); 3.69 + EXPECT_EQ(buf.capacity, 8); 3.70 + EXPECT_EQ(memcmp(buf.space, "preptest", 8), 0); 3.71 } 3.72 3.73 TEST_F(BufferWrite, MultibyteDiscard) { 3.74 + const char *data = "tester"; 3.75 + ASSERT_EQ(buf.capacity, 8); 3.76 + ASSERT_EQ(buf.size, 4); 3.77 + buf.pos = 3; 3.78 + size_t written = cxBufferWrite(data, 2, 3, &buf); 3.79 // remember: whole elements are discarded if they do not fit 3.80 + EXPECT_EQ(written, 2); 3.81 + EXPECT_EQ(buf.size, 7); 3.82 + EXPECT_EQ(buf.pos, 7); 3.83 + EXPECT_EQ(buf.capacity, 8); 3.84 + EXPECT_EQ(memcmp(buf.space, "pretest\0", 8), 0); 3.85 } 3.86 3.87 TEST_F(BufferWrite, MultibyteExtend) { 3.88 - 3.89 + buf.flags |= CX_BUFFER_AUTO_EXTEND; 3.90 + const char *data = "tester"; 3.91 + ASSERT_EQ(buf.capacity, 8); 3.92 + ASSERT_EQ(buf.size, 4); 3.93 + buf.pos = 3; 3.94 + size_t written = cxBufferWrite(data, 2, 3, &buf); 3.95 + // remember: whole elements are discarded if they do not fit 3.96 + EXPECT_EQ(written, 3); 3.97 + EXPECT_EQ(buf.size, 9); 3.98 + EXPECT_EQ(buf.pos, 9); 3.99 + EXPECT_GE(buf.capacity, 9); 3.100 + EXPECT_EQ(memcmp(buf.space, "pretester\0", 10), 0); 3.101 } 3.102 3.103 TEST_F(BufferWrite, PutcWrapperFit) { 3.104 - 3.105 -} 3.106 - 3.107 -TEST_F(BufferWrite, PutcWrapperOverwrite) { 3.108 - 3.109 -} 3.110 - 3.111 -TEST_F(BufferWrite, PutcWrapperPartialOverwrite) { 3.112 - 3.113 + ASSERT_EQ(buf.capacity, 8); 3.114 + ASSERT_EQ(buf.pos, 4); 3.115 + ASSERT_EQ(buf.size, 4); 3.116 + int c = cxBufferPut(&buf, 0x20 | 'a'); 3.117 + EXPECT_EQ(c, 'a'); 3.118 + EXPECT_EQ(buf.size, 5); 3.119 + EXPECT_EQ(buf.pos, 5); 3.120 + EXPECT_EQ(buf.capacity, 8); 3.121 + EXPECT_EQ(memcmp(buf.space, "prepa\0", 6), 0); 3.122 } 3.123 3.124 TEST_F(BufferWrite, PutcWrapperDiscard) { 3.125 - 3.126 + ASSERT_EQ(buf.capacity, 8); 3.127 + ASSERT_EQ(buf.size, 4); 3.128 + buf.pos = 8; 3.129 + int c = cxBufferPut(&buf, 0x20 | 'a'); 3.130 + EXPECT_EQ(c, EOF); 3.131 + EXPECT_EQ(buf.size, 4); 3.132 + EXPECT_EQ(buf.pos, 8); 3.133 + EXPECT_EQ(buf.capacity, 8); 3.134 + EXPECT_EQ(memcmp(buf.space, "prep\0\0\0\0\0", 9), 0); 3.135 } 3.136 3.137 TEST_F(BufferWrite, PutcWrapperExtend) { 3.138 - 3.139 + buf.flags |= CX_BUFFER_AUTO_EXTEND; 3.140 + ASSERT_EQ(buf.capacity, 8); 3.141 + ASSERT_EQ(buf.size, 4); 3.142 + buf.pos = 8; 3.143 + int c = cxBufferPut(&buf, 0x20 | 'a'); 3.144 + EXPECT_EQ(c, 'a'); 3.145 + EXPECT_EQ(buf.size, 9); 3.146 + EXPECT_EQ(buf.pos, 9); 3.147 + EXPECT_GE(buf.capacity, 9); 3.148 + EXPECT_EQ(memcmp(buf.space, "prep\0\0\0\0a\0", 10), 0); 3.149 } 3.150 3.151 TEST_F(BufferWrite, PutStringWrapperFit) { 3.152 - 3.153 -} 3.154 - 3.155 -TEST_F(BufferWrite, PutStringWrapperOverwrite) { 3.156 - 3.157 -} 3.158 - 3.159 -TEST_F(BufferWrite, PutStringWrapperPartialOverwrite) { 3.160 - 3.161 + const char *data = "test"; 3.162 + ASSERT_EQ(buf.capacity, 8); 3.163 + ASSERT_EQ(buf.pos, 4); 3.164 + ASSERT_EQ(buf.size, 4); 3.165 + size_t written = cxBufferPutString(&buf, data); 3.166 + EXPECT_EQ(written, 4); 3.167 + EXPECT_EQ(buf.size, 8); 3.168 + EXPECT_EQ(buf.pos, 8); 3.169 + EXPECT_EQ(buf.capacity, 8); 3.170 + EXPECT_EQ(memcmp(buf.space, "preptest", 8), 0); 3.171 } 3.172 3.173 TEST_F(BufferWrite, PutStringWrapperDiscard) { 3.174 - 3.175 + const char *data = "testing"; 3.176 + ASSERT_EQ(buf.capacity, 8); 3.177 + ASSERT_EQ(buf.pos, 4); 3.178 + ASSERT_EQ(buf.size, 4); 3.179 + size_t written = cxBufferPutString(&buf, data); 3.180 + EXPECT_EQ(written, 4); 3.181 + EXPECT_EQ(buf.size, 8); 3.182 + EXPECT_EQ(buf.pos, 8); 3.183 + EXPECT_EQ(buf.capacity, 8); 3.184 + EXPECT_EQ(memcmp(buf.space, "preptest\0", 9), 0); 3.185 } 3.186 3.187 TEST_F(BufferWrite, PutStringWrapperExtend) { 3.188 + buf.flags |= CX_BUFFER_AUTO_EXTEND; 3.189 + const char *data = "testing"; 3.190 + ASSERT_EQ(buf.capacity, 8); 3.191 + ASSERT_EQ(buf.pos, 4); 3.192 + ASSERT_EQ(buf.size, 4); 3.193 + size_t written = cxBufferPutString(&buf, data); 3.194 + EXPECT_EQ(written, 7); 3.195 + EXPECT_EQ(buf.size, 11); 3.196 + EXPECT_EQ(buf.pos, 11); 3.197 + EXPECT_GE(buf.capacity, 11); 3.198 + EXPECT_EQ(memcmp(buf.space, "preptesting", 11), 0); 3.199 +} 3.200 3.201 +TEST_F(BufferWrite, MultOverflow) { 3.202 + const char *data = "testing"; 3.203 + ASSERT_EQ(buf.capacity, 8); 3.204 + ASSERT_EQ(buf.pos, 4); 3.205 + ASSERT_EQ(buf.size, 4); 3.206 + size_t written = cxBufferWrite(data, 8, SIZE_MAX / 4, &buf); 3.207 + EXPECT_EQ(written, 0); 3.208 + EXPECT_EQ(buf.capacity, 8); 3.209 + EXPECT_EQ(buf.pos, 4); 3.210 + EXPECT_EQ(buf.size, 4); 3.211 + EXPECT_EQ(memcmp(buf.space, "prep\0", 5), 0); 3.212 } 3.213 + 3.214 +TEST_F(BufferWrite, MaxCapaOverflow) { 3.215 + buf.flags |= CX_BUFFER_AUTO_EXTEND; 3.216 + const char *data = "testing"; 3.217 + ASSERT_EQ(buf.capacity, 8); 3.218 + ASSERT_EQ(buf.pos, 4); 3.219 + ASSERT_EQ(buf.size, 4); 3.220 + size_t written = cxBufferWrite(data, 1, SIZE_MAX - 2, &buf); 3.221 + EXPECT_EQ(written, 0); 3.222 + EXPECT_EQ(buf.capacity, 8); 3.223 + EXPECT_EQ(buf.pos, 4); 3.224 + EXPECT_EQ(buf.size, 4); 3.225 + EXPECT_EQ(memcmp(buf.space, "prep\0", 5), 0); 3.226 +} 3.227 + 3.228 +TEST_F(BufferWrite, OnlyOverwrite) { 3.229 + buf.flags |= CX_BUFFER_AUTO_EXTEND; 3.230 + ASSERT_EQ(buf.capacity, 8); 3.231 + memcpy(buf.space, "preptest", 8); 3.232 + buf.pos = 3; 3.233 + buf.size = 8; 3.234 + size_t written = cxBufferWrite("XXX", 2, 2, &buf); 3.235 + EXPECT_EQ(written, 2); 3.236 + EXPECT_EQ(buf.capacity, 8); 3.237 + EXPECT_EQ(buf.size, 8); 3.238 + EXPECT_EQ(buf.pos, 7); 3.239 + EXPECT_EQ(memcmp(buf.space, "preXXX\0t", 8), 0); 3.240 +}