[Openmp-commits] [openmp] [OpenMP] Add libomp unit test infrastructure (PR #168063)

Jan Patrick Lehr via Openmp-commits openmp-commits at lists.llvm.org
Wed Dec 17 02:46:28 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) {
----------------
jplehr wrote:

same as above: should we test negative too? 

https://github.com/llvm/llvm-project/pull/168063


More information about the Openmp-commits mailing list