changeset 39509:1bc3833fdb1e

scratch_buffer: Add tests. * tests/test-scratch-buffer.c: New file. * modules/scratch_buffer-tests: New file.
author Bruno Haible <bruno@clisp.org>
date Sat, 18 Aug 2018 21:37:03 +0200
parents 31dc336b7836
children bb061859fde8
files ChangeLog modules/scratch_buffer-tests tests/test-scratch-buffer.c
diffstat 3 files changed, 148 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sat Aug 18 21:35:11 2018 +0200
+++ b/ChangeLog	Sat Aug 18 21:37:03 2018 +0200
@@ -1,3 +1,9 @@
+2018-08-18  Bruno Haible  <bruno@clisp.org>
+
+	scratch_buffer: Add tests.
+	* tests/test-scratch-buffer.c: New file.
+	* modules/scratch_buffer-tests: New file.
+
 2018-08-18  Bruno Haible  <bruno@clisp.org>
 
 	scratch_buffer: Fix include file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/scratch_buffer-tests	Sat Aug 18 21:37:03 2018 +0200
@@ -0,0 +1,12 @@
+Files:
+tests/test-scratch-buffer.c
+tests/macros.h
+
+Depends-on:
+
+configure.ac:
+
+Makefile.am:
+TESTS += test-scratch-buffer
+check_PROGRAMS += test-scratch-buffer
+test_scratch_buffer_SOURCES = test-scratch-buffer.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-scratch-buffer.c	Sat Aug 18 21:37:03 2018 +0200
@@ -0,0 +1,130 @@
+/* Test of scratch_buffer functions.
+   Copyright (C) 2018 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2018.  */
+
+#include <config.h>
+
+#include <scratch_buffer.h>
+
+#include <string.h>
+#include "macros.h"
+
+static int
+byte_at (size_t i)
+{
+  return ((i % 13) + ((i * i) % 251)) & 0xff;
+}
+
+int
+main ()
+{
+  /* Check scratch_buffer_set_array_size.  */
+  {
+    size_t sizes[] = { 100, 1000, 10000, 100000 };
+    size_t s;
+    for (s = 0; s < SIZEOF (sizes); s++)
+      {
+        size_t size = sizes[s];
+        struct scratch_buffer buf;
+        bool ok;
+        size_t i;
+
+        scratch_buffer_init (&buf);
+
+        ok = scratch_buffer_set_array_size (&buf, size, 1);
+        ASSERT (ok);
+
+        for (i = 0; i < size; i++)
+          ((unsigned char *) buf.data)[i] = byte_at (i);
+
+        memset (buf.data, 'x', buf.length);
+        memset (buf.data, 'y', size);
+
+        scratch_buffer_free (&buf);
+      }
+  }
+
+  /* Check scratch_buffer_grow.  */
+  {
+    size_t sizes[] = { 100, 1000, 10000, 100000 };
+    size_t s;
+    for (s = 0; s < SIZEOF (sizes); s++)
+      {
+        size_t size = sizes[s];
+        struct scratch_buffer buf;
+        bool ok;
+        size_t i;
+
+        scratch_buffer_init (&buf);
+
+        while (buf.length < size)
+          {
+            ok = scratch_buffer_grow (&buf);
+            ASSERT (ok);
+          }
+
+        for (i = 0; i < size; i++)
+          ((unsigned char *) buf.data)[i] = byte_at (i);
+
+        memset (buf.data, 'x', buf.length);
+        memset (buf.data, 'y', size);
+
+        scratch_buffer_free (&buf);
+      }
+  }
+
+  /* Check scratch_buffer_grow_preserve.  */
+  {
+    size_t sizes[] = { 100, 1000, 10000, 100000 };
+    struct scratch_buffer buf;
+    size_t s;
+    size_t size;
+    bool ok;
+    size_t i;
+
+    scratch_buffer_init (&buf);
+
+    s = 0;
+    size = sizes[s];
+    ok = scratch_buffer_set_array_size (&buf, size, 1);
+    ASSERT (ok);
+
+    for (i = 0; i < size; i++)
+      ((unsigned char *) buf.data)[i] = byte_at (i);
+
+    for (; s < SIZEOF (sizes); s++)
+      {
+        size_t oldsize = size;
+        size = sizes[s];
+
+        while (buf.length < size)
+          {
+            ok = scratch_buffer_grow_preserve (&buf);
+            ASSERT (ok);
+          }
+
+        for (i = 0; i < oldsize; i++)
+          ASSERT(((unsigned char *) buf.data)[i] == byte_at (i));
+        for (i = oldsize; i < size; i++)
+          ((unsigned char *) buf.data)[i] = byte_at (i);
+      }
+
+    scratch_buffer_free (&buf);
+  }
+
+  return 0;
+}