From 1ae04f897c0302134d817ee57bf3ae7af6701fb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cs=C3=A1sz=C3=A1r=20M=C3=A1ty=C3=A1s?= Date: Mon, 17 Jul 2023 14:49:06 +0200 Subject: [PATCH] Fix ktx_strncasecmp (#741) Fixes #740. --- lib/mkvkformatfiles | 2 + lib/vkformat_str.c | 2 + tests/tests.cmake | 1 + tests/unittests/test_fragment_uri.cc | 8 ++-- tests/unittests/test_string_to_vkformat.cc | 54 ++++++++++++++++++++++ 5 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 tests/unittests/test_string_to_vkformat.cc diff --git a/lib/mkvkformatfiles b/lib/mkvkformatfiles index 7d0ef1d249..f433a0d9b7 100755 --- a/lib/mkvkformatfiles +++ b/lib/mkvkformatfiles @@ -183,6 +183,8 @@ END { begin_str2vk = begin_str2vk " ++us2;\n" begin_str2vk = begin_str2vk " --length;\n" begin_str2vk = begin_str2vk " }\n" + begin_str2vk = begin_str2vk " if (length == 0)\n" + begin_str2vk = begin_str2vk " return 0;\n" begin_str2vk = begin_str2vk " return tolower(*us1) - tolower(*us2);\n" begin_str2vk = begin_str2vk "}\n" begin_str2vk = begin_str2vk "\n" diff --git a/lib/vkformat_str.c b/lib/vkformat_str.c index 7fc5e0e20b..7517ee67ca 100644 --- a/lib/vkformat_str.c +++ b/lib/vkformat_str.c @@ -594,6 +594,8 @@ static int ktx_strncasecmp(const char* s1, const char* s2, int length) { ++us2; --length; } + if (length == 0) + return 0; return tolower(*us1) - tolower(*us2); } diff --git a/tests/tests.cmake b/tests/tests.cmake index aa1f5b45c5..60940d06dc 100644 --- a/tests/tests.cmake +++ b/tests/tests.cmake @@ -33,6 +33,7 @@ add_subdirectory(streamtests) add_executable( unittests unittests/image_unittests.cc unittests/test_fragment_uri.cc + unittests/test_string_to_vkformat.cc unittests/unittests.cc unittests/wthelper.h tests.cmake diff --git a/tests/unittests/test_fragment_uri.cc b/tests/unittests/test_fragment_uri.cc index 42ddcc5e4d..3490e8c8bd 100644 --- a/tests/unittests/test_fragment_uri.cc +++ b/tests/unittests/test_fragment_uri.cc @@ -1,10 +1,8 @@ /* -*- tab-width: 4; -*- */ /* vi: set sw=2 ts=4 expandtab: */ - -/* - * Copyright 2010-2020 Mark Callow. - * SPDX-License-Identifier: Apache-2.0 - */ +// Copyright 2022-2023 The Khronos Group Inc. +// Copyright 2022-2023 RasterGrid Kft. +// SPDX-License-Identifier: Apache-2.0 #include #include "gtest/gtest.h" diff --git a/tests/unittests/test_string_to_vkformat.cc b/tests/unittests/test_string_to_vkformat.cc new file mode 100644 index 0000000000..2ac67f5628 --- /dev/null +++ b/tests/unittests/test_string_to_vkformat.cc @@ -0,0 +1,54 @@ +/* -*- tab-width: 4; -*- */ +/* vi: set sw=2 ts=4 expandtab: */ +// Copyright 2022-2023 The Khronos Group Inc. +// Copyright 2022-2023 RasterGrid Kft. +// SPDX-License-Identifier: Apache-2.0 + +#include "vkformat_enum.h" +#include "gtest/gtest.h" + + +extern "C" { + VkFormat stringToVkFormat(const char* str); +} + +// ------------------------------------------------------------------------------------------------- + +class StringToVkFormatTest : public ::testing::Test { +protected: + StringToVkFormatTest() {} +}; + +// ------------------------------------------------------------------------------------------------- + +namespace { + +TEST_F(StringToVkFormatTest, stringToVkFormat) { + EXPECT_EQ(stringToVkFormat("UNDEFINED"), VK_FORMAT_UNDEFINED); + EXPECT_EQ(stringToVkFormat("VK_FORMAT_UNDEFINED"), VK_FORMAT_UNDEFINED); + EXPECT_EQ(stringToVkFormat("Not a format"), VK_FORMAT_UNDEFINED); + + EXPECT_EQ(stringToVkFormat("R4G4_UNORM_PACK8"), VK_FORMAT_R4G4_UNORM_PACK8); + EXPECT_EQ(stringToVkFormat("VK_FORMAT_R4G4_UNORM_PACK8"), VK_FORMAT_R4G4_UNORM_PACK8); + + EXPECT_EQ(stringToVkFormat("R8G8B8_UNORM"), VK_FORMAT_R8G8B8_UNORM); + EXPECT_EQ(stringToVkFormat("VK_FORMAT_R8G8B8_UNORM"), VK_FORMAT_R8G8B8_UNORM); + EXPECT_EQ(stringToVkFormat("R8G8B8_SNORM"), VK_FORMAT_R8G8B8_SNORM); + EXPECT_EQ(stringToVkFormat("VK_FORMAT_R8G8B8_SNORM"), VK_FORMAT_R8G8B8_SNORM); + + EXPECT_EQ(stringToVkFormat("ASTC_6x6_UNORM_BLOCK"), VK_FORMAT_ASTC_6x6_UNORM_BLOCK); + EXPECT_EQ(stringToVkFormat("ASTC_6X6_UNORM_BLOCK"), VK_FORMAT_ASTC_6x6_UNORM_BLOCK); + EXPECT_EQ(stringToVkFormat("astc_6x6_unorm_block"), VK_FORMAT_ASTC_6x6_UNORM_BLOCK); + EXPECT_EQ(stringToVkFormat("VK_FORMAT_ASTC_6x6_UNORM_BLOCK"), VK_FORMAT_ASTC_6x6_UNORM_BLOCK); + EXPECT_EQ(stringToVkFormat("VK_FORMAT_ASTC_6X6_UNORM_BLOCK"), VK_FORMAT_ASTC_6x6_UNORM_BLOCK); + EXPECT_EQ(stringToVkFormat("VK_FORMAT_ASTC_6X6_UNORM_BLOCK"), VK_FORMAT_ASTC_6x6_UNORM_BLOCK); + EXPECT_EQ(stringToVkFormat("vk_format_astc_6x6_unorm_block"), VK_FORMAT_ASTC_6x6_UNORM_BLOCK); + + EXPECT_EQ(stringToVkFormat("VK_FORMAT_ASTC_6x6_UNORM"), VK_FORMAT_UNDEFINED); + EXPECT_EQ(stringToVkFormat("VK_FORMAT_ASTC_6x6_UNORM_BLOC"), VK_FORMAT_UNDEFINED); + EXPECT_EQ(stringToVkFormat("K_FORMAT_ASTC_6x6_UNORM_BLOCK"), VK_FORMAT_UNDEFINED); + EXPECT_EQ(stringToVkFormat("_ASTC_6x6_UNORM_BLOCK"), VK_FORMAT_UNDEFINED); + EXPECT_EQ(stringToVkFormat("STC_6x6_UNORM_BLOCK"), VK_FORMAT_UNDEFINED); +} + +} // namespace