#170 complete write tests for status quo

Sun, 01 May 2022 11:44:23 +0200

author
Mike Becker <universe@uap-core.de>
date
Sun, 01 May 2022 11:44:23 +0200
changeset 541
67e078518935
parent 540
47e0f2237a94
child 542
45bcfd152f85

#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 +}

mercurial