From f723a791d50a0e61c340cb0b706dfa3038c5e353 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zef=20Kucia?= Date: Mon, 17 Jun 2019 15:43:31 +0200 Subject: [PATCH] tests: Add test for parsing version. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Józef Kucia Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- Makefile.am | 1 + include/private/vkd3d_common.h | 14 ++++++++++ libs/vkd3d/device.c | 15 +---------- tests/vkd3d_common.c | 49 ++++++++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 tests/vkd3d_common.c diff --git a/Makefile.am b/Makefile.am index 299ec260..fe3a3639 100644 --- a/Makefile.am +++ b/Makefile.am @@ -36,6 +36,7 @@ vkd3d_demos_shaders = \ vkd3d_tests = \ tests/vkd3d_api \ + tests/vkd3d_common \ tests/vkd3d_shader_api vkd3d_cross_tests = \ diff --git a/include/private/vkd3d_common.h b/include/private/vkd3d_common.h index 16c31e63..c696f885 100644 --- a/include/private/vkd3d_common.h +++ b/include/private/vkd3d_common.h @@ -22,6 +22,8 @@ #include "config.h" #include "vkd3d_windows.h" +#include + #ifndef ARRAY_SIZE # define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x))) #endif @@ -137,4 +139,16 @@ static inline LONG InterlockedDecrement(LONG volatile *x) # error "atomic_add_fetch() not implemented for this platform" #endif /* HAVE_SYNC_ADD_AND_FETCH */ +static inline void vkd3d_parse_version(const char *version, int *major, int *minor) +{ + *major = atoi(version); + + while (isdigit(*version)) + ++version; + if (*version == '.') + ++version; + + *minor = atoi(version); +} + #endif /* __VKD3D_COMMON_H */ diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 1092cffa..7522c413 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -18,8 +18,6 @@ #include "vkd3d_private.h" -#include - #ifdef HAVE_DLFCN_H #include @@ -94,20 +92,9 @@ struct vk_struct static uint32_t vkd3d_get_vk_version(void) { - const char *ptr = PACKAGE_VERSION; int major, minor; - major = atoi(ptr); - - while (isdigit(*ptr)) - ++ptr; - if (*ptr == '.') - ++ptr; - - minor = atoi(ptr); - - TRACE("Version %d.%d.\n", major, minor); - + vkd3d_parse_version(PACKAGE_VERSION, &major, &minor); return VK_MAKE_VERSION(major, minor, 0); } diff --git a/tests/vkd3d_common.c b/tests/vkd3d_common.c new file mode 100644 index 00000000..379c8b06 --- /dev/null +++ b/tests/vkd3d_common.c @@ -0,0 +1,49 @@ +/* + * Copyright 2019 Józef Kucia for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "vkd3d_common.h" +#include "vkd3d_test.h" + +static void check_version(const char *v, int expected_major, int expected_minor) +{ + int major, minor; + + vkd3d_parse_version(v, &major, &minor); + ok(major == expected_major && minor == expected_minor, + "Got %d.%d, expected %d.%d for %s.\n", + major, minor, expected_major, expected_minor, v); +} + +static void test_parse_version(void) +{ + check_version("", 0, 0); + check_version(".3", 0, 3); + check_version(".4.5", 0, 4); + + check_version("1", 1, 0); + check_version("2", 2, 0); + + check_version("1.0", 1, 0); + check_version("1.1", 1, 1); + check_version("2.3.0", 2, 3); +} + +START_TEST(vkd3d_common) +{ + run_test(test_parse_version); +}