Signed-off-by: Waldemar Kozaczuk <[email protected]>
---
 modules/tests/Makefile |   2 +-
 tests/tst-ctype.cc     | 123 ++++++++++++++++++++++++-----------------
 tests/tst-string.cc    |  61 ++++++++++++++++++++
 tests/tst-wctype.cc    |  38 +++++++++++--
 4 files changed, 166 insertions(+), 58 deletions(-)
 create mode 100644 tests/tst-string.cc

diff --git a/modules/tests/Makefile b/modules/tests/Makefile
index c984cb65..78f215e6 100644
--- a/modules/tests/Makefile
+++ b/modules/tests/Makefile
@@ -246,7 +246,7 @@ common-boost-tests := tst-vfs.so tst-libc-locking.so 
misc-fs-stress.so \
        tst-bsd-tcp1-zsndrcv.so tst-async.so tst-rcu-list.so tst-tcp-listen.so \
        tst-poll.so tst-bitset-iter.so tst-timer-set.so tst-clock.so \
        tst-rcu-hashtable.so tst-unordered-ring-mpsc.so \
-       tst-seek.so
+       tst-seek.so tst-ctype.so tst-wctype.so tst-string.so
 
 boost-tests := $(common-boost-tests)
 
diff --git a/tests/tst-ctype.cc b/tests/tst-ctype.cc
index 826d39a9..3f258aef 100644
--- a/tests/tst-ctype.cc
+++ b/tests/tst-ctype.cc
@@ -14,10 +14,31 @@
  * limitations under the License.
  */
 
-#include <gtest/gtest.h>
+/*
+ * Copyright (C) 2020 Waldemar Kozaczuk
+ *
+ * This work is open source software, licensed under the terms of the
+ * BSD license as described in the LICENSE file in the top-level directory.
+ */
+
+// This file is a verbatim copy of tests/ctype_test.cpp from the bionic project
+// (https://android.googlesource.com/platform/bionic as of commit: 
9c6d60d073db079a87fbeb5de3e72ac12838a480)
+// PLUS some minor tweaks (mostly macros) that adapt it to run with boost unit 
framework
+// instead of Google's test framework
+
+//#include <gtest/gtest.h>
+#define BOOST_TEST_MODULE tst-ctype
+
+#include <boost/test/unit_test.hpp>
+namespace utf = boost::unit_test;
 
 #include <ctype.h>
 
+#define TEST(MODULE_NAME,TEST_NAME) 
BOOST_AUTO_TEST_CASE(MODULE_NAME##TEST_NAME)
+#define EXPECT_TRUE(EXP) BOOST_REQUIRE_MESSAGE(EXP, "Failed for " << i)
+#define EXPECT_FALSE(EXP) BOOST_REQUIRE_MESSAGE(!(EXP), "Failed for " << i)
+#define EXPECT_EQ(EXP1,EXP2) BOOST_CHECK_EQUAL(EXP1,EXP2)
+
 // We test from -1 (EOF) to 0xff, because that's the range for which behavior
 // is actually defined. (It's explicitly undefined below or above that.) Most
 // of our routines are no longer table-based and behave correctly for the
@@ -31,9 +52,9 @@ TEST(ctype, isalnum) {
     if ((i >= '0' && i <= '9') ||
         (i >= 'A' && i <= 'Z') ||
         (i >= 'a' && i <= 'z')) {
-      EXPECT_TRUE(isalnum(i)) << i;
+      EXPECT_TRUE(isalnum(i));
     } else {
-      EXPECT_FALSE(isalnum(i)) << i;
+      EXPECT_FALSE(isalnum(i));
     }
   }
 }
@@ -43,9 +64,9 @@ TEST(ctype, isalnum_l) {
     if ((i >= '0' && i <= '9') ||
         (i >= 'A' && i <= 'Z') ||
         (i >= 'a' && i <= 'z')) {
-      EXPECT_TRUE(isalnum_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_TRUE(isalnum_l(i, LC_GLOBAL_LOCALE));
     } else {
-      EXPECT_FALSE(isalnum_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_FALSE(isalnum_l(i, LC_GLOBAL_LOCALE));
     }
   }
 }
@@ -54,9 +75,9 @@ TEST(ctype, isalpha) {
   for (int i = kMin; i < kMax; ++i) {
     if ((i >= 'A' && i <= 'Z') ||
         (i >= 'a' && i <= 'z')) {
-      EXPECT_TRUE(isalpha(i)) << i;
+      EXPECT_TRUE(isalpha(i));
     } else {
-      EXPECT_FALSE(isalpha(i)) << i;
+      EXPECT_FALSE(isalpha(i));
     }
   }
 }
@@ -65,9 +86,9 @@ TEST(ctype, isalpha_l) {
   for (int i = kMin; i < kMax; ++i) {
     if ((i >= 'A' && i <= 'Z') ||
         (i >= 'a' && i <= 'z')) {
-      EXPECT_TRUE(isalpha_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_TRUE(isalpha_l(i, LC_GLOBAL_LOCALE));
     } else {
-      EXPECT_FALSE(isalpha_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_FALSE(isalpha_l(i, LC_GLOBAL_LOCALE));
     }
   }
 }
@@ -75,9 +96,9 @@ TEST(ctype, isalpha_l) {
 TEST(ctype, isascii) {
   for (int i = kMin; i < kMax; ++i) {
     if (i >= 0 && i <= 0x7f) {
-      EXPECT_TRUE(isascii(i)) << i;
+      EXPECT_TRUE(isascii(i));
     } else {
-      EXPECT_FALSE(isascii(i)) << i;
+      EXPECT_FALSE(isascii(i));
     }
   }
 }
@@ -85,9 +106,9 @@ TEST(ctype, isascii) {
 TEST(ctype, isblank) {
   for (int i = kMin; i < kMax; ++i) {
     if (i == '\t' || i == ' ') {
-      EXPECT_TRUE(isblank(i)) << i;
+      EXPECT_TRUE(isblank(i));
     } else {
-      EXPECT_FALSE(isblank(i)) << i;
+      EXPECT_FALSE(isblank(i));
     }
   }
 }
@@ -95,9 +116,9 @@ TEST(ctype, isblank) {
 TEST(ctype, isblank_l) {
   for (int i = kMin; i < kMax; ++i) {
     if (i == '\t' || i == ' ') {
-      EXPECT_TRUE(isblank_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_TRUE(isblank_l(i, LC_GLOBAL_LOCALE));
     } else {
-      EXPECT_FALSE(isblank_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_FALSE(isblank_l(i, LC_GLOBAL_LOCALE));
     }
   }
 }
@@ -105,9 +126,9 @@ TEST(ctype, isblank_l) {
 TEST(ctype, iscntrl) {
   for (int i = kMin; i < kMax; ++i) {
     if ((i >= 0 && i < ' ') || i == 0x7f) {
-      EXPECT_TRUE(iscntrl(i)) << i;
+      EXPECT_TRUE(iscntrl(i));
     } else {
-      EXPECT_FALSE(iscntrl(i)) << i;
+      EXPECT_FALSE(iscntrl(i));
     }
   }
 }
@@ -115,9 +136,9 @@ TEST(ctype, iscntrl) {
 TEST(ctype, iscntrl_l) {
   for (int i = kMin; i < kMax; ++i) {
     if ((i >= 0 && i < ' ') || i == 0x7f) {
-      EXPECT_TRUE(iscntrl_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_TRUE(iscntrl_l(i, LC_GLOBAL_LOCALE));
     } else {
-      EXPECT_FALSE(iscntrl_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_FALSE(iscntrl_l(i, LC_GLOBAL_LOCALE));
     }
   }
 }
@@ -125,9 +146,9 @@ TEST(ctype, iscntrl_l) {
 TEST(ctype, isdigit) {
   for (int i = kMin; i < kMax; ++i) {
     if (i >= '0' && i <= '9') {
-      EXPECT_TRUE(isdigit(i)) << i;
+      EXPECT_TRUE(isdigit(i));
     } else {
-      EXPECT_FALSE(isdigit(i)) << i;
+      EXPECT_FALSE(isdigit(i));
     }
   }
 }
@@ -135,9 +156,9 @@ TEST(ctype, isdigit) {
 TEST(ctype, isdigit_l) {
   for (int i = kMin; i < kMax; ++i) {
     if (i >= '0' && i <= '9') {
-      EXPECT_TRUE(isdigit_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_TRUE(isdigit_l(i, LC_GLOBAL_LOCALE));
     } else {
-      EXPECT_FALSE(isdigit_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_FALSE(isdigit_l(i, LC_GLOBAL_LOCALE));
     }
   }
 }
@@ -145,9 +166,9 @@ TEST(ctype, isdigit_l) {
 TEST(ctype, isgraph) {
   for (int i = kMin; i < kMax; ++i) {
     if (i >= '!' && i <= '~') {
-      EXPECT_TRUE(isgraph(i)) << i;
+      EXPECT_TRUE(isgraph(i));
     } else {
-      EXPECT_FALSE(isgraph(i)) << i;
+      EXPECT_FALSE(isgraph(i));
     }
   }
 }
@@ -155,9 +176,9 @@ TEST(ctype, isgraph) {
 TEST(ctype, isgraph_l) {
   for (int i = kMin; i < kMax; ++i) {
     if (i >= '!' && i <= '~') {
-      EXPECT_TRUE(isgraph_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_TRUE(isgraph_l(i, LC_GLOBAL_LOCALE));
     } else {
-      EXPECT_FALSE(isgraph_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_FALSE(isgraph_l(i, LC_GLOBAL_LOCALE));
     }
   }
 }
@@ -165,9 +186,9 @@ TEST(ctype, isgraph_l) {
 TEST(ctype, islower) {
   for (int i = kMin; i < kMax; ++i) {
     if (i >= 'a' && i <= 'z') {
-      EXPECT_TRUE(islower(i)) << i;
+      EXPECT_TRUE(islower(i));
     } else {
-      EXPECT_FALSE(islower(i)) << i;
+      EXPECT_FALSE(islower(i));
     }
   }
 }
@@ -175,9 +196,9 @@ TEST(ctype, islower) {
 TEST(ctype, islower_l) {
   for (int i = kMin; i < kMax; ++i) {
     if (i >= 'a' && i <= 'z') {
-      EXPECT_TRUE(islower_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_TRUE(islower_l(i, LC_GLOBAL_LOCALE));
     } else {
-      EXPECT_FALSE(islower_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_FALSE(islower_l(i, LC_GLOBAL_LOCALE));
     }
   }
 }
@@ -185,9 +206,9 @@ TEST(ctype, islower_l) {
 TEST(ctype, isprint) {
   for (int i = kMin; i < kMax; ++i) {
     if (i >= ' ' && i <= '~') {
-      EXPECT_TRUE(isprint(i)) << i;
+      EXPECT_TRUE(isprint(i));
     } else {
-      EXPECT_FALSE(isprint(i)) << i;
+      EXPECT_FALSE(isprint(i));
     }
   }
 }
@@ -195,9 +216,9 @@ TEST(ctype, isprint) {
 TEST(ctype, isprint_l) {
   for (int i = kMin; i < kMax; ++i) {
     if (i >= ' ' && i <= '~') {
-      EXPECT_TRUE(isprint_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_TRUE(isprint_l(i, LC_GLOBAL_LOCALE));
     } else {
-      EXPECT_FALSE(isprint_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_FALSE(isprint_l(i, LC_GLOBAL_LOCALE));
     }
   }
 }
@@ -208,9 +229,9 @@ TEST(ctype, ispunct) {
         (i >= ':' && i <= '@') ||
         (i >= '[' && i <= '`') ||
         (i >= '{' && i <= '~')) {
-      EXPECT_TRUE(ispunct(i)) << i;
+      EXPECT_TRUE(ispunct(i));
     } else {
-      EXPECT_FALSE(ispunct(i)) << i;
+      EXPECT_FALSE(ispunct(i));
     }
   }
 }
@@ -221,9 +242,9 @@ TEST(ctype, ispunct_l) {
         (i >= ':' && i <= '@') ||
         (i >= '[' && i <= '`') ||
         (i >= '{' && i <= '~')) {
-      EXPECT_TRUE(ispunct_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_TRUE(ispunct_l(i, LC_GLOBAL_LOCALE));
     } else {
-      EXPECT_FALSE(ispunct_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_FALSE(ispunct_l(i, LC_GLOBAL_LOCALE));
     }
   }
 }
@@ -231,9 +252,9 @@ TEST(ctype, ispunct_l) {
 TEST(ctype, isspace) {
   for (int i = kMin; i < kMax; ++i) {
     if ((i >= '\t' && i <= '\r') || i == ' ') {
-      EXPECT_TRUE(isspace(i)) << i;
+      EXPECT_TRUE(isspace(i));
     } else {
-      EXPECT_FALSE(isspace(i)) << i;
+      EXPECT_FALSE(isspace(i));
     }
   }
 }
@@ -241,9 +262,9 @@ TEST(ctype, isspace) {
 TEST(ctype, isspace_l) {
   for (int i = kMin; i < kMax; ++i) {
     if ((i >= '\t' && i <= '\r') || i == ' ') {
-      EXPECT_TRUE(isspace_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_TRUE(isspace_l(i, LC_GLOBAL_LOCALE));
     } else {
-      EXPECT_FALSE(isspace_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_FALSE(isspace_l(i, LC_GLOBAL_LOCALE));
     }
   }
 }
@@ -251,9 +272,9 @@ TEST(ctype, isspace_l) {
 TEST(ctype, isupper) {
   for (int i = kMin; i < kMax; ++i) {
     if (i >= 'A' && i <= 'Z') {
-      EXPECT_TRUE(isupper(i)) << i;
+      EXPECT_TRUE(isupper(i));
     } else {
-      EXPECT_FALSE(isupper(i)) << i;
+      EXPECT_FALSE(isupper(i));
     }
   }
 }
@@ -261,9 +282,9 @@ TEST(ctype, isupper) {
 TEST(ctype, isupper_l) {
   for (int i = kMin; i < kMax; ++i) {
     if (i >= 'A' && i <= 'Z') {
-      EXPECT_TRUE(isupper_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_TRUE(isupper_l(i, LC_GLOBAL_LOCALE));
     } else {
-      EXPECT_FALSE(isupper_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_FALSE(isupper_l(i, LC_GLOBAL_LOCALE));
     }
   }
 }
@@ -273,9 +294,9 @@ TEST(ctype, isxdigit) {
     if ((i >= '0' && i <= '9') ||
         (i >= 'A' && i <= 'F') ||
         (i >= 'a' && i <= 'f')) {
-      EXPECT_TRUE(isxdigit(i)) << i;
+      EXPECT_TRUE(isxdigit(i));
     } else {
-      EXPECT_FALSE(isxdigit(i)) << i;
+      EXPECT_FALSE(isxdigit(i));
     }
   }
 }
@@ -285,9 +306,9 @@ TEST(ctype, isxdigit_l) {
     if ((i >= '0' && i <= '9') ||
         (i >= 'A' && i <= 'F') ||
         (i >= 'a' && i <= 'f')) {
-      EXPECT_TRUE(isxdigit_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_TRUE(isxdigit_l(i, LC_GLOBAL_LOCALE));
     } else {
-      EXPECT_FALSE(isxdigit_l(i, LC_GLOBAL_LOCALE)) << i;
+      EXPECT_FALSE(isxdigit_l(i, LC_GLOBAL_LOCALE));
     }
   }
 }
diff --git a/tests/tst-string.cc b/tests/tst-string.cc
new file mode 100644
index 00000000..f6ce1990
--- /dev/null
+++ b/tests/tst-string.cc
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Copyright (C) 2020 Waldemar Kozaczuk
+ *
+ * This work is open source software, licensed under the terms of the
+ * BSD license as described in the LICENSE file in the top-level directory.
+ */
+
+// This test is based on tests/string_test.cpp from the bionic project
+// (https://android.googlesource.com/platform/bionic as of commit: 
9c6d60d073db079a87fbeb5de3e72ac12838a480)
+// PLUS some minor tweaks (mostly macros) that adapt it to run with boost unit 
framework
+// instead of Google's test framework
+
+#define BOOST_TEST_MODULE tst-string
+
+#include <boost/test/unit_test.hpp>
+namespace utf = boost::unit_test;
+
+#define TEST(MODULE_NAME,TEST_NAME) 
BOOST_AUTO_TEST_CASE(MODULE_NAME##TEST_NAME)
+#define ASSERT_TRUE(EXP) BOOST_REQUIRE(EXP)
+#define ASSERT_GT(EXP1,EXP2) BOOST_REQUIRE((EXP1)>(EXP2))
+
+TEST(STRING_TEST, strxfrm_smoke) {
+  locale_t l(newlocale(LC_ALL, "C.UTF-8", nullptr));
+  const char* src1 = "aab";
+  char dst1[16] = {};
+  ASSERT_GT(strxfrm(dst1, src1, sizeof(dst1)), 0U);
+  ASSERT_GT(strxfrm_l(dst1, src1, sizeof(dst1), l), 0U);
+  const char* src2 = "aac";
+  char dst2[16] = {};
+  ASSERT_GT(strxfrm(dst2, src2, sizeof(dst2)), 0U);
+  ASSERT_GT(strxfrm_l(dst2, src2, sizeof(dst2), l), 0U);
+  ASSERT_TRUE(strcmp(dst1, dst2) < 0);
+  freelocale(l);
+}
+
+TEST(STRING_TEST, strcoll_smoke) {
+  locale_t l(newlocale(LC_ALL, "C.UTF-8", nullptr));
+  ASSERT_TRUE(strcoll("aab", "aac") < 0);
+  ASSERT_TRUE(strcoll_l("aab", "aac", l) < 0);
+  ASSERT_TRUE(strcoll("aab", "aab") == 0);
+  ASSERT_TRUE(strcoll_l("aab", "aab", l) == 0);
+  ASSERT_TRUE(strcoll("aac", "aab") > 0);
+  ASSERT_TRUE(strcoll_l("aac", "aab", l) > 0);
+  freelocale(l);
+}
diff --git a/tests/tst-wctype.cc b/tests/tst-wctype.cc
index 85a46aa4..9e6fc066 100644
--- a/tests/tst-wctype.cc
+++ b/tests/tst-wctype.cc
@@ -14,13 +14,39 @@
  * limitations under the License.
  */
 
+/*
+ * Copyright (C) 2020 Waldemar Kozaczuk
+ *
+ * This work is open source software, licensed under the terms of the
+ * BSD license as described in the LICENSE file in the top-level directory.
+ */
+
+// This file is a verbatim copy of tests/ctype_test.cpp from the bionic project
+// (https://android.googlesource.com/platform/bionic as of commit: 
9c6d60d073db079a87fbeb5de3e72ac12838a480)
+// PLUS some minor tweaks (mostly macros) that adapt it to run with boost unit 
framework
+// instead of Google's test framework
+
 #include <wctype.h>
 
 #include <dlfcn.h>
 
-#include <gtest/gtest.h>
+//#include <gtest/gtest.h>
+#define BOOST_TEST_MODULE tst-wctype
+
+#include <boost/test/unit_test.hpp>
+namespace utf = boost::unit_test;
+
+//#include "utils.h"
+#define have_dl() (true)
 
-#include "utils.h"
+#define TEST(MODULE_NAME,TEST_NAME) 
BOOST_AUTO_TEST_CASE(MODULE_NAME##TEST_NAME)
+#define EXPECT_TRUE(EXP) BOOST_REQUIRE(EXP)
+#define EXPECT_FALSE(EXP) BOOST_REQUIRE(!(EXP))
+#define EXPECT_TRUE_P(EXP,P) BOOST_REQUIRE_MESSAGE(EXP, "Failed for " << P)
+#define EXPECT_FALSE_P(EXP,P) BOOST_REQUIRE_MESSAGE(!(EXP), "Failed for " << P)
+#define EXPECT_EQ(EXP1,EXP2) BOOST_CHECK_EQUAL(EXP1,EXP2)
+#define GTEST_LOG_(I) std::cout
+#define GTEST_SKIP() std::cout
 
 class UtfLocale {
  public:
@@ -39,16 +65,16 @@ static void TestIsWideFn(int fn(wint_t),
       GTEST_LOG_(INFO) << "skipping unicode test " << *p;
       continue;
     }
-    EXPECT_TRUE(fn(*p)) << *p;
-    EXPECT_TRUE(fn_l(*p, l.l)) << *p;
+    EXPECT_TRUE_P(fn(*p), *p);
+    EXPECT_TRUE_P(fn_l(*p, l.l), *p);
   }
   for (const wchar_t* p = falses; *p; ++p) {
     if (!have_dl() && *p > 0x7f) {
       GTEST_LOG_(INFO) << "skipping unicode test " << *p;
       continue;
     }
-    EXPECT_FALSE(fn(*p)) << *p;
-    EXPECT_FALSE(fn_l(*p, l.l)) << *p;
+    EXPECT_FALSE_P(fn(*p), *p);
+    EXPECT_FALSE_P(fn_l(*p, l.l), *p);
   }
 }
 
-- 
2.25.1

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/20200815042129.50941-2-jwkozaczuk%40gmail.com.

Reply via email to