[Openmp-commits] [openmp] [OpenMP] Add libomp unit test infrastructure (PR #168063)
Robert Imschweiler via Openmp-commits
openmp-commits at lists.llvm.org
Wed Dec 3 13:13:31 PST 2025
================
@@ -0,0 +1,239 @@
+//===- TestKmpStr.cpp - Tests for kmp_str utilities ----------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "kmp_str.h"
+#include "gtest/gtest.h"
+#include <cstring>
+
+namespace {
+
+// Test basic string buffer initialization
+TEST(KmpStrTest, BufferInit) {
+ kmp_str_buf_t buffer;
+ __kmp_str_buf_init(&buffer);
+
+ EXPECT_NE(buffer.str, nullptr);
+ EXPECT_GT(buffer.size, 0u);
+ EXPECT_EQ(buffer.used, 0);
+ EXPECT_EQ(buffer.str[0], '\0');
+}
+
+// Test string buffer clear
+TEST(KmpStrTest, BufferClear) {
+ kmp_str_buf_t buffer;
+ __kmp_str_buf_init(&buffer);
+ __kmp_str_buf_print(&buffer, "test string");
+
+ EXPECT_GT(buffer.used, 0);
+
+ __kmp_str_buf_clear(&buffer);
+ EXPECT_EQ(buffer.used, 0);
+ EXPECT_EQ(buffer.str[0], '\0');
+
+ __kmp_str_buf_free(&buffer);
+}
+
+// Test string buffer print
+TEST(KmpStrTest, BufferPrint) {
+ kmp_str_buf_t buffer;
+ __kmp_str_buf_init(&buffer);
+
+ __kmp_str_buf_print(&buffer, "Hello, %s!", "World");
+
+ EXPECT_STREQ(buffer.str, "Hello, World!");
+ EXPECT_EQ(buffer.used, 13);
+
+ __kmp_str_buf_free(&buffer);
+}
+
+// Test string buffer concatenation
+TEST(KmpStrTest, BufferCat) {
+ kmp_str_buf_t buffer;
+ __kmp_str_buf_init(&buffer);
+
+ __kmp_str_buf_cat(&buffer, "Hello", 5);
+ __kmp_str_buf_cat(&buffer, " ", 1);
+ __kmp_str_buf_cat(&buffer, "World", 5);
+
+ EXPECT_STREQ(buffer.str, "Hello World");
+
+ __kmp_str_buf_free(&buffer);
+}
+
+// Test string buffer reservation
+TEST(KmpStrTest, BufferReserve) {
+ kmp_str_buf_t buffer;
+ __kmp_str_buf_init(&buffer);
+
+ size_t large_size = 2048;
+ __kmp_str_buf_reserve(&buffer, large_size);
+
+ EXPECT_GE(buffer.size, large_size);
+
+ __kmp_str_buf_free(&buffer);
+}
+
+// Test basic string to int conversion
+TEST(KmpStrTest, BasicStrToInt) {
+ EXPECT_EQ(__kmp_basic_str_to_int("0"), 0);
+ EXPECT_EQ(__kmp_basic_str_to_int("1"), 1);
+ EXPECT_EQ(__kmp_basic_str_to_int("42"), 42);
+ EXPECT_EQ(__kmp_basic_str_to_int("123"), 123);
+}
+
+// Test string match
+TEST(KmpStrTest, StrMatch) {
+ const char *data = "Hello World";
+
+ // Test exact match (len == 0)
+ EXPECT_TRUE(__kmp_str_match("Hello World", 0, data));
+ EXPECT_FALSE(__kmp_str_match("Hello", 0, data)); // Not exact (data is longer)
+
+ // Test prefix match (len < 0)
+ EXPECT_TRUE(
+ __kmp_str_match("Hello", -1, data)); // "Hello" is prefix of "Hello World"
+ EXPECT_FALSE(__kmp_str_match("World", -1, data)); // "World" is not a prefix
+
+ // Test minimum length match (len > 0)
+ EXPECT_TRUE(__kmp_str_match("Hello", 5, data)); // At least 5 chars match
+ EXPECT_TRUE(__kmp_str_match("Hello", 3, data)); // At least 3 chars match
+ EXPECT_FALSE(__kmp_str_match("World", 5, data)); // First chars don't match
+}
+
+// Test string contains
+TEST(KmpStrTest, StrContains) {
+ const char *data = "Hello World";
+
+ EXPECT_TRUE(__kmp_str_contains("Hello", 5, data));
+ EXPECT_TRUE(__kmp_str_contains("World", 5, data));
+ EXPECT_TRUE(__kmp_str_contains("lo Wo", 5, data));
+ EXPECT_FALSE(__kmp_str_contains("Goodbye", 7, data));
+}
+
+// Test string match for true/false values
+TEST(KmpStrTest, MatchBool) {
+ // Test true values
+ EXPECT_TRUE(__kmp_str_match_true("true"));
+ EXPECT_TRUE(__kmp_str_match_true("TRUE"));
+ EXPECT_TRUE(__kmp_str_match_true("on"));
+ EXPECT_TRUE(__kmp_str_match_true("ON"));
+ EXPECT_TRUE(__kmp_str_match_true("1"));
+ EXPECT_TRUE(__kmp_str_match_true("yes"));
+ EXPECT_TRUE(__kmp_str_match_true("YES"));
+
+ // Test false values
+ EXPECT_TRUE(__kmp_str_match_false("false"));
+ EXPECT_TRUE(__kmp_str_match_false("FALSE"));
+ EXPECT_TRUE(__kmp_str_match_false("off"));
+ EXPECT_TRUE(__kmp_str_match_false("OFF"));
+ EXPECT_TRUE(__kmp_str_match_false("0"));
+ EXPECT_TRUE(__kmp_str_match_false("no"));
+ EXPECT_TRUE(__kmp_str_match_false("NO"));
+}
+
+// Test string replace
+TEST(KmpStrTest, StrReplace) {
+ char str[] = "Hello World";
+ __kmp_str_replace(str, ' ', '_');
+ EXPECT_STREQ(str, "Hello_World");
+
+ __kmp_str_replace(str, 'o', '0');
+ EXPECT_STREQ(str, "Hell0_W0rld");
+}
+
+// Test string split
+TEST(KmpStrTest, StrSplit) {
+ char str[] = "key=value";
+ char *head = nullptr;
+ char *tail = nullptr;
+
+ __kmp_str_split(str, '=', &head, &tail);
----------------
ro-i wrote:
no, head and tail point into str
https://github.com/llvm/llvm-project/pull/168063
More information about the Openmp-commits
mailing list