More tests could probably be added, but this should cover concatenation, resizing, clearing, formatted printing, and checking the length, so it should be quite complete. --- configure.ac | 1 + src/util/Makefile.am | 3 +- src/util/tests/string_buffer/Makefile.am | 34 ++++++++++ src/util/tests/string_buffer/append_and_print.c | 82 +++++++++++++++++++++++++ 4 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 src/util/tests/string_buffer/Makefile.am create mode 100644 src/util/tests/string_buffer/append_and_print.c
diff --git a/configure.ac b/configure.ac index 06883a9667..0d44d99e76 100644 --- a/configure.ac +++ b/configure.ac @@ -2833,6 +2833,7 @@ AC_CONFIG_FILES([Makefile src/mesa/main/tests/Makefile src/util/Makefile src/util/tests/hash_table/Makefile + src/util/tests/string_buffer/Makefile src/vulkan/Makefile]) AC_OUTPUT diff --git a/src/util/Makefile.am b/src/util/Makefile.am index f094eb4a0d..c730fb48d3 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am @@ -19,7 +19,8 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. -SUBDIRS = . tests/hash_table +SUBDIRS = . tests/hash_table \ + . tests/string_buffer include Makefile.sources diff --git a/src/util/tests/string_buffer/Makefile.am b/src/util/tests/string_buffer/Makefile.am new file mode 100644 index 0000000000..60039a90d2 --- /dev/null +++ b/src/util/tests/string_buffer/Makefile.am @@ -0,0 +1,34 @@ +# Copyright © 2009 Intel Corporation +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# on the rights to use, copy, modify, merge, publish, distribute, sub +# license, and/or sell copies of the Software, and to permit persons to whom +# the Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL +# ADAM JACKSON BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +AM_CPPFLAGS = \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/src/util \ + $(DEFINES) + +LDADD = \ + $(top_builddir)/src/util/libmesautil.la \ + $(PTHREAD_LIBS) \ + $(DLOPEN_LIBS) + +TESTS = append_and_print \ + $() + +check_PROGRAMS = $(TESTS) diff --git a/src/util/tests/string_buffer/append_and_print.c b/src/util/tests/string_buffer/append_and_print.c new file mode 100644 index 0000000000..bbc2727877 --- /dev/null +++ b/src/util/tests/string_buffer/append_and_print.c @@ -0,0 +1,82 @@ +/* + * Copyright © 2017 Thomas Helland + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <assert.h> +#include "string_buffer.h" + +int +main(int argc, char **argv) +{ + (void) argc; + (void) argv; + + struct _mesa_string_buffer *buf; + char *str1 = "test1"; + char *str2 = "test2"; + char *str3 = "test1test2"; + char str4[20]; + + buf = _mesa_string_buffer_create(NULL, 6); + + /* The string terminator needs one byte, so there should be five left */ + assert(_mesa_string_buffer_space_left(buf) == 5); + + _mesa_string_buffer_append(buf, str1); + + /* The string should now be full */ + assert(_mesa_string_buffer_space_left(buf) == 0); + + /* The content should be equal */ + assert(strcmp(buf->buf, str1) == 0); + + /* Add more, so that the string is resized */ + _mesa_string_buffer_append(buf, str2); + + /* The size of the buffer should have been doubled. + * We have 5 + 5 + 1 characters, so there should be one left. + */ + assert(_mesa_string_buffer_space_left(buf) == 1); + + /* The string should now be equal to str3 */ + assert(strcmp(buf->buf, str3) == 0); + + /* Compile a string with some formatting */ + sprintf(str4, "Testing formatting %d, %f", 100, 1.0); + + /* Clear the string buffer first */ + _mesa_string_buffer_clear(buf); + + /* Then test printing some formatted text */ + _mesa_string_buffer_printf(buf, "Testing formatting %d, %f", 100, 1.0); + + /* The string should now be equal to str3 */ + assert(strcmp(buf->buf, &str4) == 0); + + _mesa_string_buffer_destroy(buf); + + return 0; +} -- 2.13.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev