pw_unit_test migration: lib support batch #1 (#33091)

* pw_unit_test migration: lib support batch #1

* apply restyled patch

* integrate comments
diff --git a/src/BUILD.gn b/src/BUILD.gn
index d283c7e..60ba11c 100644
--- a/src/BUILD.gn
+++ b/src/BUILD.gn
@@ -98,6 +98,7 @@
         "${chip_root}/src/credentials/tests",
         "${chip_root}/src/lib/format/tests",
         "${chip_root}/src/lib/support/tests",
+        "${chip_root}/src/lib/support/tests:tests_nltest",
         "${chip_root}/src/protocols/secure_channel/tests",
         "${chip_root}/src/system/tests",
         "${chip_root}/src/transport/tests",
diff --git a/src/lib/support/tests/BUILD.gn b/src/lib/support/tests/BUILD.gn
index ab91a4f..2a9c1ac 100644
--- a/src/lib/support/tests/BUILD.gn
+++ b/src/lib/support/tests/BUILD.gn
@@ -15,33 +15,61 @@
 import("//build_overrides/build.gni")
 import("//build_overrides/chip.gni")
 import("//build_overrides/nlunit_test.gni")
+import("//build_overrides/pigweed.gni")
 
 import("${chip_root}/build/chip/chip_test_suite.gni")
 
-chip_test_suite_using_nltest("tests") {
+chip_test_suite("tests") {
   output_name = "libSupportTests"
 
   test_sources = [
     "TestBitMask.cpp",
     "TestBufferReader.cpp",
+    "TestDefer.cpp",
+    "TestFixedBufferAllocator.cpp",
+    "TestFold.cpp",
+    "TestIniEscaping.cpp",
+    "TestSafeInt.cpp",
+  ]
+  sources = []
+
+  cflags = [
+    "-Wconversion",
+
+    # TODO(#21255): work-around for SimpleStateMachine constructor issue.
+    "-Wno-uninitialized",
+
+    # TestStringSplitter intentionally validates string overflows.
+    "-Wno-stringop-truncation",
+  ]
+
+  public_deps = [
+    "${chip_root}/src/credentials",
+    "${chip_root}/src/lib/core",
+    "${chip_root}/src/lib/support:static-support",
+    "${chip_root}/src/lib/support:testing",
+    "${chip_root}/src/lib/support/jsontlv",
+    "${chip_root}/src/platform",
+  ]
+}
+
+chip_test_suite_using_nltest("tests_nltest") {
+  output_name = "libSupportTestsNL"
+
+  test_sources = [
     "TestBufferWriter.cpp",
     "TestBytesCircularBuffer.cpp",
     "TestBytesToHex.cpp",
     "TestCHIPCounter.cpp",
     "TestCHIPMem.cpp",
     "TestCHIPMemString.cpp",
-    "TestDefer.cpp",
     "TestErrorStr.cpp",
-    "TestFixedBufferAllocator.cpp",
-    "TestFold.cpp",
-    "TestIniEscaping.cpp",
     "TestIntrusiveList.cpp",
     "TestJsonToTlv.cpp",
     "TestJsonToTlvToJson.cpp",
     "TestPersistedCounter.cpp",
     "TestPool.cpp",
     "TestPrivateHeap.cpp",
-    "TestSafeInt.cpp",
     "TestSafeString.cpp",
     "TestScoped.cpp",
     "TestScopedBuffer.cpp",
diff --git a/src/lib/support/tests/TestBitMask.cpp b/src/lib/support/tests/TestBitMask.cpp
index 36f603b..f19c90f 100644
--- a/src/lib/support/tests/TestBitMask.cpp
+++ b/src/lib/support/tests/TestBitMask.cpp
@@ -14,13 +14,12 @@
  *    See the License for the specific language governing permissions and
  *    limitations under the License.
  */
+#include <gtest/gtest.h>
 #include <lib/support/BitMask.h>
-#include <lib/support/UnitTestRegistration.h>
 
 #include <algorithm>
 #include <cstring>
 #include <initializer_list>
-#include <nlunit-test.h>
 
 using namespace chip;
 
@@ -37,68 +36,68 @@
     kBits_High8 = 0xFF00,
 };
 
-void TestBitMaskOperations(nlTestSuite * inSuite, void * inContext)
+TEST(TestBitMask, TestBitMaskOperations)
 {
     BitMask<TestEnum> mask;
 
-    NL_TEST_ASSERT(inSuite, mask.Raw() == 0);
+    EXPECT_EQ(mask.Raw(), 0);
 
     mask.SetField(TestEnum::kBits_1_2, 2);
-    NL_TEST_ASSERT(inSuite, mask.Raw() == 0x0004);
+    EXPECT_EQ(mask.Raw(), 0x0004);
 
     mask.SetRaw(0);
     mask.SetField(TestEnum::kBits_4_7, 0x0B);
-    NL_TEST_ASSERT(inSuite, mask.Raw() == 0x00B0);
+    EXPECT_EQ(mask.Raw(), 0x00B0);
 
     mask.SetRaw(0);
 
     for (uint16_t i = 0; i < 0x10; i++)
     {
         mask.SetField(TestEnum::kBits_High4, i);
-        NL_TEST_ASSERT(inSuite, mask.Raw() == (i << 12));
+        EXPECT_EQ(mask.Raw(), (i << 12));
     }
 
     mask.SetField(TestEnum::kBits_High8, 0x23);
-    NL_TEST_ASSERT(inSuite, mask.Raw() == 0x2300);
+    EXPECT_EQ(mask.Raw(), 0x2300);
 
     mask.SetField(TestEnum::kBits_High4, 0xA);
-    NL_TEST_ASSERT(inSuite, mask.Raw() == 0xA300);
+    EXPECT_EQ(mask.Raw(), 0xA300);
 }
 
-void TestBitFieldLogic(nlTestSuite * inSuite, void * inContext)
+TEST(TestBitMask, TestBitFieldLogic)
 {
     BitMask<TestEnum> mask;
 
     // some general logic that still applies for bit fields just in case
-    NL_TEST_ASSERT(inSuite, !mask.HasAny(TestEnum::kBits_High4));
-    NL_TEST_ASSERT(inSuite, !mask.HasAny(TestEnum::kBits_High8));
+    EXPECT_FALSE(mask.HasAny(TestEnum::kBits_High4));
+    EXPECT_FALSE(mask.HasAny(TestEnum::kBits_High8));
 
     // setting something non-zero in the upper 4 bits sets "something" in both
     // upper and 4 and 8 bits
     mask.SetField(TestEnum::kBits_High4, 0x01);
-    NL_TEST_ASSERT(inSuite, mask.HasAny(TestEnum::kBits_High4));
-    NL_TEST_ASSERT(inSuite, mask.HasAny(TestEnum::kBits_High8));
+    EXPECT_TRUE(mask.HasAny(TestEnum::kBits_High4));
+    EXPECT_TRUE(mask.HasAny(TestEnum::kBits_High8));
 
     // sets something visible in high 8 bits, but not high 4 bits
     mask.SetField(TestEnum::kBits_High8, 0x01);
-    NL_TEST_ASSERT(inSuite, !mask.HasAny(TestEnum::kBits_High4));
-    NL_TEST_ASSERT(inSuite, mask.HasAny(TestEnum::kBits_High8));
+    EXPECT_FALSE(mask.HasAny(TestEnum::kBits_High4));
+    EXPECT_TRUE(mask.HasAny(TestEnum::kBits_High8));
 }
 
-void TestBitMaskInvalid(nlTestSuite * inSuite, void * inContext)
+TEST(TestBitMask, TestBitMaskInvalid)
 {
     BitMask<TestEnum> mask;
 
     // This generally tests for no infinite loops. Nothing to set here
     mask.SetField(TestEnum::kZero, 0x01);
-    NL_TEST_ASSERT(inSuite, mask.Raw() == 0);
+    EXPECT_EQ(mask.Raw(), 0);
 
     mask.SetRaw(0x1234);
     mask.SetField(TestEnum::kZero, 0x01);
-    NL_TEST_ASSERT(inSuite, mask.Raw() == 0x1234);
+    EXPECT_EQ(mask.Raw(), 0x1234);
 }
 
-void TestClear(nlTestSuite * inSuite, void * inContext)
+TEST(TestBitMask, TestClear)
 {
     BitMask<TestEnum> mask1;
     BitMask<TestEnum> mask2;
@@ -110,26 +109,7 @@
     mask2.Set(TestEnum::kBits_1_2);
     mask1.Clear(mask2);
 
-    NL_TEST_ASSERT(inSuite, mask1.Raw() == 0xFF01);
+    EXPECT_EQ(mask1.Raw(), 0xFF01);
 }
 
-const nlTest sTests[] = {
-    NL_TEST_DEF("BitMask operations", TestBitMaskOperations), //
-    NL_TEST_DEF("BitFields logic", TestBitFieldLogic),        //
-    NL_TEST_DEF("Invalid operations", TestBitMaskInvalid),    //
-    NL_TEST_DEF("Clear operations", TestClear),               //
-    NL_TEST_SENTINEL()                                        //
-};
-
 } // namespace
-
-int TestBitMask()
-{
-    nlTestSuite theSuite = { "BitMask tests", &sTests[0], nullptr, nullptr };
-
-    // Run test suite against one context.
-    nlTestRunner(&theSuite, nullptr);
-    return nlTestRunnerStats(&theSuite);
-}
-
-CHIP_REGISTER_TEST_SUITE(TestBitMask)
diff --git a/src/lib/support/tests/TestBufferReader.cpp b/src/lib/support/tests/TestBufferReader.cpp
index f21d04b..6d14c39 100644
--- a/src/lib/support/tests/TestBufferReader.cpp
+++ b/src/lib/support/tests/TestBufferReader.cpp
@@ -22,11 +22,10 @@
  *
  */
 
+#include <gtest/gtest.h>
 #include <lib/support/BufferReader.h>
-#include <lib/support/UnitTestRegistration.h>
-#include <type_traits>
 
-#include <nlunit-test.h>
+#include <type_traits>
 
 using namespace chip;
 using namespace chip::Encoding::LittleEndian;
@@ -43,7 +42,7 @@
     TestSpanReader() : Reader(ByteSpan{ test_buffer, std::extent<decltype(test_buffer)>::value }) {}
 };
 
-static void TestBufferReader_BasicImpl(nlTestSuite * inSuite, void * inContext, Reader & reader)
+static void TestBufferReader_BasicImpl(Reader & reader)
 {
     uint8_t first;
     uint16_t second;
@@ -55,62 +54,62 @@
 
     CHIP_ERROR err =
         reader.Read8(&first).Read16(&second).Read32(&third).Read64(&fourth).ReadBytes(&read_buf[0], sizeof(read_buf)).StatusCode();
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, first == 0x01);
-    NL_TEST_ASSERT(inSuite, second == 0x0302);
-    NL_TEST_ASSERT(inSuite, third == 0x07060504);
-    NL_TEST_ASSERT(inSuite, fourth == 0x0f0e0d0c0b0a0908);
-    NL_TEST_ASSERT(inSuite, memcmp(&read_buf[0], &read_buf_expected[0], sizeof(read_buf)) == 0);
-    NL_TEST_ASSERT(inSuite, reader.OctetsRead() == 18);
-    NL_TEST_ASSERT(inSuite, reader.Remaining() == 3);
-    NL_TEST_ASSERT(inSuite, reader.HasAtLeast(2));
-    NL_TEST_ASSERT(inSuite, reader.HasAtLeast(3));
-    NL_TEST_ASSERT(inSuite, !reader.HasAtLeast(4));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(first, 0x01);
+    EXPECT_EQ(second, 0x0302);
+    EXPECT_EQ(third, 0x07060504u);
+    EXPECT_EQ(fourth, 0x0f0e0d0c0b0a0908u);
+    EXPECT_EQ(memcmp(&read_buf[0], &read_buf_expected[0], sizeof(read_buf)), 0);
+    EXPECT_EQ(reader.OctetsRead(), 18u);
+    EXPECT_EQ(reader.Remaining(), 3u);
+    EXPECT_TRUE(reader.HasAtLeast(2));
+    EXPECT_TRUE(reader.HasAtLeast(3));
+    EXPECT_FALSE(reader.HasAtLeast(4));
 
     uint32_t fourMore;
     err = reader.Read32(&fourMore).StatusCode();
-    NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+    EXPECT_NE(err, CHIP_NO_ERROR);
 }
 
-static void TestBufferReader_Basic(nlTestSuite * inSuite, void * inContext)
+TEST(TestBufferReader, TestBufferReader_Basic)
 {
     TestReader reader;
 
-    TestBufferReader_BasicImpl(inSuite, inContext, reader);
+    TestBufferReader_BasicImpl(reader);
 }
 
-static void TestBufferReader_BasicSpan(nlTestSuite * inSuite, void * inContext)
+TEST(TestBufferReader, TestBufferReader_BasicSpan)
 {
     TestSpanReader reader;
 
-    TestBufferReader_BasicImpl(inSuite, inContext, reader);
+    TestBufferReader_BasicImpl(reader);
 }
 
-static void TestBufferReader_Saturation(nlTestSuite * inSuite, void * inContext)
+TEST(TestBufferReader, TestBufferReader_Saturation)
 {
     TestReader reader;
     uint64_t temp;
     // Read some bytes out so we can get to the end of the buffer.
     CHIP_ERROR err = reader.Read64(&temp).StatusCode();
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
     err = reader.Read64(&temp).StatusCode();
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
 
-    NL_TEST_ASSERT(inSuite, reader.HasAtLeast(5));
-    NL_TEST_ASSERT(inSuite, !reader.HasAtLeast(6));
+    EXPECT_TRUE(reader.HasAtLeast(5));
+    EXPECT_FALSE(reader.HasAtLeast(6));
     uint64_t tooBig;
     err = reader.Read64(&tooBig).StatusCode();
-    NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, !reader.HasAtLeast(1));
+    EXPECT_NE(err, CHIP_NO_ERROR);
+    EXPECT_FALSE(reader.HasAtLeast(1));
 
     // Check that even though we only really read out 16 bytes, we can't read
     // out one more bytes, because our previous read failed.
     uint8_t small;
     err = reader.Read8(&small).StatusCode();
-    NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+    EXPECT_NE(err, CHIP_NO_ERROR);
 }
 
-static void TestBufferReader_Skip(nlTestSuite * inSuite, void * inContext)
+TEST(TestBufferReader, TestBufferReader_Skip)
 {
     TestReader reader;
     uint8_t temp          = 0;
@@ -118,22 +117,22 @@
 
     // Verify Skip() advances the start pointer the correct amount.
     CHIP_ERROR err = reader.Skip(firstSkipLen).Read8(&temp).StatusCode();
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, temp == test_buffer[firstSkipLen]);
-    NL_TEST_ASSERT(inSuite, reader.OctetsRead() == (firstSkipLen + 1u));
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(temp, test_buffer[firstSkipLen]);
+    EXPECT_EQ(reader.OctetsRead(), (firstSkipLen + 1u));
 
     // Verify Skip() called with a length larger than available buffer space jumps to the end.
     err = reader.Skip(sizeof(test_buffer)).StatusCode();
-    NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
-    NL_TEST_ASSERT(inSuite, reader.OctetsRead() == sizeof(test_buffer));
-    NL_TEST_ASSERT(inSuite, reader.Remaining() == 0);
+    EXPECT_EQ(err, CHIP_NO_ERROR);
+    EXPECT_EQ(reader.OctetsRead(), sizeof(test_buffer));
+    EXPECT_EQ(reader.Remaining(), 0u);
 
     // Verify no read allowed after jumping to the end.
     err = reader.Read8(&temp).StatusCode();
-    NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
+    EXPECT_NE(err, CHIP_NO_ERROR);
 }
 
-static void TestBufferReader_LittleEndianScalars(nlTestSuite * inSuite, void * inContext)
+TEST(TestBufferReader, TestBufferReader_LittleEndianScalars)
 {
     const uint8_t test_buf1[10] = { 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01 };
 
@@ -142,9 +141,9 @@
         chip::Encoding::LittleEndian::Reader reader{ ByteSpan{ test_buf1 } };
         uint8_t val1 = 0;
         uint8_t val2 = 0;
-        NL_TEST_ASSERT(inSuite, reader.Read8(&val1).Read8(&val2).IsSuccess());
-        NL_TEST_ASSERT(inSuite, val1 == 0xfe);
-        NL_TEST_ASSERT(inSuite, val2 == 0xff);
+        EXPECT_TRUE(reader.Read8(&val1).Read8(&val2).IsSuccess());
+        EXPECT_EQ(val1, 0xfe);
+        EXPECT_EQ(val2, 0xff);
     }
 
     // Unsigned 16 bits reads
@@ -152,9 +151,9 @@
         chip::Encoding::LittleEndian::Reader reader{ ByteSpan{ test_buf1 } };
         uint16_t val1 = 0;
         uint16_t val2 = 0;
-        NL_TEST_ASSERT(inSuite, reader.Read16(&val1).Read16(&val2).IsSuccess());
-        NL_TEST_ASSERT(inSuite, val1 == 0xfffe);
-        NL_TEST_ASSERT(inSuite, val2 == 0xffff);
+        EXPECT_TRUE(reader.Read16(&val1).Read16(&val2).IsSuccess());
+        EXPECT_EQ(val1, 0xfffe);
+        EXPECT_EQ(val2, 0xffff);
     }
 
     // Unsigned 32 bits reads
@@ -162,9 +161,9 @@
         chip::Encoding::LittleEndian::Reader reader{ ByteSpan{ test_buf1 } };
         uint32_t val1 = 0;
         uint32_t val2 = 0;
-        NL_TEST_ASSERT(inSuite, reader.Read32(&val1).Read32(&val2).IsSuccess());
-        NL_TEST_ASSERT(inSuite, val1 == static_cast<uint32_t>(0xfffffffeUL));
-        NL_TEST_ASSERT(inSuite, val2 == static_cast<uint32_t>(0xffffffffUL));
+        EXPECT_TRUE(reader.Read32(&val1).Read32(&val2).IsSuccess());
+        EXPECT_EQ(val1, static_cast<uint32_t>(0xfffffffeUL));
+        EXPECT_EQ(val2, static_cast<uint32_t>(0xffffffffUL));
     }
 
     // Unsigned 32 bits reads, unaligned
@@ -174,19 +173,19 @@
 
         uint32_t val1 = 0;
         uint32_t val2 = 0;
-        NL_TEST_ASSERT(inSuite, reader.Skip(1).Read32(&val1).Read32(&val2).IsSuccess());
-        NL_TEST_ASSERT(inSuite, reader.Remaining() == 1);
-        NL_TEST_ASSERT(inSuite, val1 == static_cast<uint32_t>(0xfffffffeUL));
-        NL_TEST_ASSERT(inSuite, val2 == static_cast<uint32_t>(0xffffffffUL));
+        EXPECT_TRUE(reader.Skip(1).Read32(&val1).Read32(&val2).IsSuccess());
+        EXPECT_EQ(reader.Remaining(), 1u);
+        EXPECT_EQ(val1, static_cast<uint32_t>(0xfffffffeUL));
+        EXPECT_EQ(val2, static_cast<uint32_t>(0xffffffffUL));
     }
 
     // Unsigned 64 bits read
     {
         chip::Encoding::LittleEndian::Reader reader{ ByteSpan{ test_buf1 } };
         uint64_t val = 0;
-        NL_TEST_ASSERT(inSuite, reader.Read64(&val).IsSuccess());
-        NL_TEST_ASSERT(inSuite, reader.Remaining() == 2);
-        NL_TEST_ASSERT(inSuite, val == static_cast<uint64_t>(0xfffffffffffffffeULL));
+        EXPECT_TRUE(reader.Read64(&val).IsSuccess());
+        EXPECT_EQ(reader.Remaining(), 2u);
+        EXPECT_EQ(val, static_cast<uint64_t>(0xfffffffffffffffeULL));
     }
 
     // Signed 8 bits reads
@@ -194,9 +193,9 @@
         chip::Encoding::LittleEndian::Reader reader{ ByteSpan{ test_buf1 } };
         int8_t val1 = 0;
         int8_t val2 = 0;
-        NL_TEST_ASSERT(inSuite, reader.ReadSigned8(&val1).ReadSigned8(&val2).IsSuccess());
-        NL_TEST_ASSERT(inSuite, val1 == -2);
-        NL_TEST_ASSERT(inSuite, val2 == -1);
+        EXPECT_TRUE(reader.ReadSigned8(&val1).ReadSigned8(&val2).IsSuccess());
+        EXPECT_EQ(val1, -2);
+        EXPECT_EQ(val2, -1);
     }
 
     // Signed 16 bits reads
@@ -204,9 +203,9 @@
         chip::Encoding::LittleEndian::Reader reader{ ByteSpan{ test_buf1 } };
         int16_t val1 = 0;
         int16_t val2 = 0;
-        NL_TEST_ASSERT(inSuite, reader.ReadSigned16(&val1).ReadSigned16(&val2).IsSuccess());
-        NL_TEST_ASSERT(inSuite, val1 == -2);
-        NL_TEST_ASSERT(inSuite, val2 == -1);
+        EXPECT_TRUE(reader.ReadSigned16(&val1).ReadSigned16(&val2).IsSuccess());
+        EXPECT_EQ(val1, -2);
+        EXPECT_EQ(val2, -1);
     }
 
     // Signed 32 bits reads
@@ -214,9 +213,9 @@
         chip::Encoding::LittleEndian::Reader reader{ ByteSpan{ test_buf1 } };
         int32_t val1 = 0;
         int32_t val2 = 0;
-        NL_TEST_ASSERT(inSuite, reader.ReadSigned32(&val1).ReadSigned32(&val2).IsSuccess());
-        NL_TEST_ASSERT(inSuite, val1 == -2);
-        NL_TEST_ASSERT(inSuite, val2 == -1);
+        EXPECT_TRUE(reader.ReadSigned32(&val1).ReadSigned32(&val2).IsSuccess());
+        EXPECT_EQ(val1, -2);
+        EXPECT_EQ(val2, -1);
     }
 
     // Signed 32 bits reads, unaligned
@@ -226,19 +225,19 @@
 
         int32_t val1 = 0;
         int32_t val2 = 0;
-        NL_TEST_ASSERT(inSuite, reader.Skip(1).ReadSigned32(&val1).ReadSigned32(&val2).IsSuccess());
-        NL_TEST_ASSERT(inSuite, reader.Remaining() == 1);
-        NL_TEST_ASSERT(inSuite, val1 == static_cast<int32_t>(-2L));
-        NL_TEST_ASSERT(inSuite, val2 == static_cast<int32_t>(-1L));
+        EXPECT_TRUE(reader.Skip(1).ReadSigned32(&val1).ReadSigned32(&val2).IsSuccess());
+        EXPECT_EQ(reader.Remaining(), 1u);
+        EXPECT_EQ(val1, static_cast<int32_t>(-2L));
+        EXPECT_EQ(val2, static_cast<int32_t>(-1L));
     }
 
     // Signed 64 bits read
     {
         chip::Encoding::LittleEndian::Reader reader{ ByteSpan{ test_buf1 } };
         int64_t val = 0;
-        NL_TEST_ASSERT(inSuite, reader.ReadSigned64(&val).IsSuccess());
-        NL_TEST_ASSERT(inSuite, reader.Remaining() == 2);
-        NL_TEST_ASSERT(inSuite, val == static_cast<int64_t>(-2LL));
+        EXPECT_TRUE(reader.ReadSigned64(&val).IsSuccess());
+        EXPECT_EQ(reader.Remaining(), 2u);
+        EXPECT_EQ(val, static_cast<int64_t>(-2LL));
     }
 
     // Bools
@@ -249,11 +248,11 @@
         bool val2 = false;
         bool val3 = false;
 
-        NL_TEST_ASSERT(inSuite, reader.ReadBool(&val1).ReadBool(&val2).ReadBool(&val3).IsSuccess());
-        NL_TEST_ASSERT(inSuite, reader.Remaining() == 2);
-        NL_TEST_ASSERT(inSuite, val1 == false);
-        NL_TEST_ASSERT(inSuite, val2 == true);
-        NL_TEST_ASSERT(inSuite, val3 == true);
+        EXPECT_TRUE(reader.ReadBool(&val1).ReadBool(&val2).ReadBool(&val3).IsSuccess());
+        EXPECT_EQ(reader.Remaining(), 2u);
+        EXPECT_EQ(val1, false);
+        EXPECT_EQ(val2, true);
+        EXPECT_EQ(val3, true);
     }
 
     // Chars
@@ -264,32 +263,10 @@
         char val2 = 'z';
         char val3 = 'z';
 
-        NL_TEST_ASSERT(inSuite, reader.ReadChar(&val1).ReadChar(&val2).ReadChar(&val3).IsSuccess());
-        NL_TEST_ASSERT(inSuite, reader.Remaining() == 2);
-        NL_TEST_ASSERT(inSuite, val1 == 'a');
-        NL_TEST_ASSERT(inSuite, val2 == '\0');
-        NL_TEST_ASSERT(inSuite, val3 == '\xff');
+        EXPECT_TRUE(reader.ReadChar(&val1).ReadChar(&val2).ReadChar(&val3).IsSuccess());
+        EXPECT_EQ(reader.Remaining(), 2u);
+        EXPECT_EQ(val1, 'a');
+        EXPECT_EQ(val2, '\0');
+        EXPECT_EQ(val3, '\xff');
     }
 }
-
-#define NL_TEST_DEF_FN(fn) NL_TEST_DEF("Test " #fn, fn)
-/**
- *   Test Suite. It lists all the test functions.
- */
-static const nlTest sTests[] = { NL_TEST_DEF_FN(TestBufferReader_Basic),
-                                 NL_TEST_DEF_FN(TestBufferReader_BasicSpan),
-                                 NL_TEST_DEF_FN(TestBufferReader_Saturation),
-                                 NL_TEST_DEF_FN(TestBufferReader_Skip),
-                                 NL_TEST_DEF("Test Little-endian buffer Reader scalar reads", TestBufferReader_LittleEndianScalars),
-                                 NL_TEST_SENTINEL() };
-
-int TestBufferReader()
-{
-    nlTestSuite theSuite = { "CHIP BufferReader tests", &sTests[0], nullptr, nullptr };
-
-    // Run test suite against one context.
-    nlTestRunner(&theSuite, nullptr);
-    return nlTestRunnerStats(&theSuite);
-}
-
-CHIP_REGISTER_TEST_SUITE(TestBufferReader)
diff --git a/src/lib/support/tests/TestDefer.cpp b/src/lib/support/tests/TestDefer.cpp
index c16583a..9b5159b 100644
--- a/src/lib/support/tests/TestDefer.cpp
+++ b/src/lib/support/tests/TestDefer.cpp
@@ -17,48 +17,28 @@
  */
 
 #include <lib/support/Defer.h>
-#include <lib/support/UnitTestRegistration.h>
 
 #include <memory>
 
-#include <nlunit-test.h>
-
-using namespace chip;
+#include <gtest/gtest.h>
 
 namespace {
 
-static void TestDeferUsage(nlTestSuite * inSuite, void * inContext)
+TEST(TestDefer, TestDeferUsage)
 {
     bool deferred = false;
     {
         auto deferredFunction = MakeDefer([&]() { deferred = true; });
-        NL_TEST_ASSERT(inSuite, !deferred);
+        EXPECT_FALSE(deferred);
     }
-    NL_TEST_ASSERT(inSuite, deferred);
+    EXPECT_TRUE(deferred);
 
     deferred = false;
     {
         std::unique_ptr<int> movable;
         auto deferredFunction = MakeDefer([movable = std::move(movable), &deferred]() { deferred = true; });
     }
-    NL_TEST_ASSERT(inSuite, deferred);
+    EXPECT_TRUE(deferred);
 }
 
 } // namespace
-
-#define NL_TEST_DEF_FN(fn) NL_TEST_DEF("Test " #fn, fn)
-/**
- *   Test Suite. It lists all the test functions.
- */
-static const nlTest sTests[] = { NL_TEST_DEF_FN(TestDeferUsage), NL_TEST_SENTINEL() };
-
-int TestDefer()
-{
-    nlTestSuite theSuite = { "CHIP Defer tests", &sTests[0], nullptr, nullptr };
-
-    // Run test suite against one context.
-    nlTestRunner(&theSuite, nullptr);
-    return nlTestRunnerStats(&theSuite);
-}
-
-CHIP_REGISTER_TEST_SUITE(TestDefer)
diff --git a/src/lib/support/tests/TestFixedBufferAllocator.cpp b/src/lib/support/tests/TestFixedBufferAllocator.cpp
index ceb52f0..c5c5880 100644
--- a/src/lib/support/tests/TestFixedBufferAllocator.cpp
+++ b/src/lib/support/tests/TestFixedBufferAllocator.cpp
@@ -17,17 +17,15 @@
  */
 
 #include <lib/support/FixedBufferAllocator.h>
-#include <lib/support/UnitTestContext.h>
-#include <lib/support/UnitTestRegistration.h>
 
 #include <cstring>
-#include <nlunit-test.h>
+#include <gtest/gtest.h>
 
 using namespace chip;
 
 namespace {
 
-void TestClone(nlTestSuite * inSuite, void * inContext)
+TEST(TestFixedBufferAllocator, TestClone)
 {
     uint8_t buffer[128];
     FixedBufferAllocator alloc(buffer);
@@ -35,23 +33,23 @@
     static const char kTestString[] = "Test string";
     const char * allocatedString    = alloc.Clone(kTestString);
 
-    NL_TEST_EXIT_ON_FAILED_ASSERT(inSuite, allocatedString != nullptr);
-    NL_TEST_ASSERT(inSuite, allocatedString != kTestString);
+    ASSERT_NE(allocatedString, nullptr);
+    EXPECT_NE(allocatedString, kTestString);
 
     // NOLINTNEXTLINE(clang-analyzer-unix.cstring.NullArg): null check for allocated string already done
-    NL_TEST_ASSERT(inSuite, strcmp(allocatedString, kTestString) == 0);
+    EXPECT_STREQ(allocatedString, kTestString);
 
     const uint8_t kTestData[]     = { 0xDE, 0xAD, 0xBE, 0xEF };
     const uint8_t * allocatedData = alloc.Clone(kTestData, sizeof(kTestData));
 
-    NL_TEST_EXIT_ON_FAILED_ASSERT(inSuite, allocatedData != nullptr);
-    NL_TEST_ASSERT(inSuite, allocatedData != kTestData);
+    ASSERT_NE(allocatedData, nullptr);
+    EXPECT_NE(allocatedData, kTestData);
 
     // NOLINTNEXTLINE(clang-analyzer-unix.cstring.NullArg): null check for allocated data already done
-    NL_TEST_ASSERT(inSuite, memcmp(allocatedData, kTestData, sizeof(kTestData)) == 0);
+    EXPECT_EQ(memcmp(allocatedData, kTestData, sizeof(kTestData)), 0);
 }
 
-void TestOutOfMemory(nlTestSuite * inSuite, void * inContext)
+TEST(TestFixedBufferAllocator, TestOutOfMemory)
 {
     uint8_t buffer[16];
     FixedBufferAllocator alloc(buffer);
@@ -59,26 +57,11 @@
     static const char kTestData[] = "0123456789abcdef";
 
     // Allocating 16 bytes still works...
-    NL_TEST_ASSERT(inSuite, alloc.Clone(kTestData, 16) != nullptr);
-    NL_TEST_ASSERT(inSuite, !alloc.AnyAllocFailed());
+    EXPECT_NE(alloc.Clone(kTestData, 16), nullptr);
+    EXPECT_FALSE(alloc.AnyAllocFailed());
 
     // ...but cannot allocate even one more byte...
-    NL_TEST_ASSERT(inSuite, alloc.Clone(kTestData, 1) == nullptr);
-    NL_TEST_ASSERT(inSuite, alloc.AnyAllocFailed());
+    EXPECT_EQ(alloc.Clone(kTestData, 1), nullptr);
+    EXPECT_TRUE(alloc.AnyAllocFailed());
 }
-
-const nlTest sTests[] = { NL_TEST_DEF("Test successful clone", TestClone), NL_TEST_DEF("Test out of memory", TestOutOfMemory),
-                          NL_TEST_SENTINEL() };
-
 } // namespace
-
-int TestFixedBufferAllocator()
-{
-    nlTestSuite theSuite = { "CHIP FixedBufferAllocator tests", &sTests[0], nullptr, nullptr };
-
-    // Run test suite against one context.
-    nlTestRunner(&theSuite, nullptr);
-    return nlTestRunnerStats(&theSuite);
-}
-
-CHIP_REGISTER_TEST_SUITE(TestFixedBufferAllocator)
diff --git a/src/lib/support/tests/TestFold.cpp b/src/lib/support/tests/TestFold.cpp
index f35160f..48dbb45 100644
--- a/src/lib/support/tests/TestFold.cpp
+++ b/src/lib/support/tests/TestFold.cpp
@@ -16,67 +16,52 @@
  *    limitations under the License.
  */
 
+#include <gtest/gtest.h>
 #include <lib/support/Fold.h>
-#include <lib/support/UnitTestRegistration.h>
 
 #include <algorithm>
 #include <cstring>
 #include <initializer_list>
-#include <nlunit-test.h>
-
 using namespace chip;
 
 namespace {
 
-void TestFoldMax(nlTestSuite * inSuite, void * inContext)
+TEST(TestFold, TestFoldMax)
 {
     using List     = std::initializer_list<int>;
     using Limits   = std::numeric_limits<int>;
     const auto max = [](int left, int right) { return std::max(left, right); };
 
     // Test empty list
-    NL_TEST_ASSERT(inSuite, Fold(List{}, -1000, max) == -1000);
+    EXPECT_EQ(Fold(List{}, -1000, max), -1000);
 
     // Test one-element (less than the initial value)
-    NL_TEST_ASSERT(inSuite, Fold(List{ -1001 }, -1000, max) == -1000);
+    EXPECT_EQ(Fold(List{ -1001 }, -1000, max), -1000);
 
     // Test one-element (greater than the initial value)
-    NL_TEST_ASSERT(inSuite, Fold(List{ -999 }, -1000, max) == -999);
+    EXPECT_EQ(Fold(List{ -999 }, -1000, max), -999);
 
     // Test limits
-    NL_TEST_ASSERT(inSuite, Fold(List{ 1000, Limits::max(), 0 }, 0, max) == Limits::max());
-    NL_TEST_ASSERT(inSuite, Fold(List{ Limits::max(), 1000, Limits::min() }, Limits::min(), max) == Limits::max());
+    EXPECT_EQ(Fold(List{ 1000, Limits::max(), 0 }, 0, max), Limits::max());
+    EXPECT_EQ(Fold(List{ Limits::max(), 1000, Limits::min() }, Limits::min(), max), Limits::max());
 }
 
-void TestSum(nlTestSuite * inSuite, void * inContext)
+TEST(TestFold, TestSum)
 {
     using List   = std::initializer_list<int>;
     using Limits = std::numeric_limits<int>;
 
     // Test empty list
-    NL_TEST_ASSERT(inSuite, Sum(List{}) == 0);
+    EXPECT_FALSE(Sum(List{}));
 
     // Test one-element (min)
-    NL_TEST_ASSERT(inSuite, Sum(List{ Limits::min() }) == Limits::min());
+    EXPECT_EQ(Sum(List{ Limits::min() }), Limits::min());
 
     // Test one-element (max)
-    NL_TEST_ASSERT(inSuite, Sum(List{ Limits::max() }) == Limits::max());
+    EXPECT_EQ(Sum(List{ Limits::max() }), Limits::max());
 
     // Test multiple elements
-    NL_TEST_ASSERT(inSuite, Sum(List{ 0, 5, 1, 4, 2, 3 }) == 15);
+    EXPECT_EQ(Sum(List{ 0, 5, 1, 4, 2, 3 }), 15);
 }
 
-const nlTest sTests[] = { NL_TEST_DEF("Test fold (max)", TestFoldMax), NL_TEST_DEF("Test sum", TestSum), NL_TEST_SENTINEL() };
-
 } // namespace
-
-int TestFold()
-{
-    nlTestSuite theSuite = { "Fold tests", &sTests[0], nullptr, nullptr };
-
-    // Run test suite against one context.
-    nlTestRunner(&theSuite, nullptr);
-    return nlTestRunnerStats(&theSuite);
-}
-
-CHIP_REGISTER_TEST_SUITE(TestFold)
diff --git a/src/lib/support/tests/TestIniEscaping.cpp b/src/lib/support/tests/TestIniEscaping.cpp
index 734ddf8..90570ad 100644
--- a/src/lib/support/tests/TestIniEscaping.cpp
+++ b/src/lib/support/tests/TestIniEscaping.cpp
@@ -16,10 +16,8 @@
  *    limitations under the License.
  */
 
+#include <gtest/gtest.h>
 #include <lib/support/IniEscaping.h>
-#include <lib/support/UnitTestRegistration.h>
-#include <nlunit-test.h>
-
 #include <string>
 
 using namespace chip;
@@ -33,80 +31,67 @@
     const char * expectedOutput;
 };
 
-void TestEscaping(nlTestSuite * inSuite, void * inContext)
+TEST(TestIniEscaping, TestEscaping)
 {
-    NL_TEST_ASSERT(inSuite, EscapeKey("") == "");
-    NL_TEST_ASSERT(inSuite, EscapeKey("abcd1234,!") == "abcd1234,!");
-    NL_TEST_ASSERT(inSuite, EscapeKey("ab\ncd =12\\34\x7f") == "ab\\x0acd\\x20\\x3d12\\x5c34\\x7f");
-    NL_TEST_ASSERT(inSuite, EscapeKey(" ") == "\\x20");
-    NL_TEST_ASSERT(inSuite, EscapeKey("===") == "\\x3d\\x3d\\x3d");
+    EXPECT_EQ(EscapeKey(""), "");
+    EXPECT_EQ(EscapeKey("abcd1234,!"), "abcd1234,!");
+    EXPECT_EQ(EscapeKey("ab\ncd =12\\34\x7f"), "ab\\x0acd\\x20\\x3d12\\x5c34\\x7f");
+    EXPECT_EQ(EscapeKey(" "), "\\x20");
+    EXPECT_EQ(EscapeKey("==="), "\\x3d\\x3d\\x3d");
 }
 
-void TestUnescaping(nlTestSuite * inSuite, void * inContext)
+TEST(TestIniEscaping, TestUnescaping)
 {
     // Test valid cases
-    NL_TEST_ASSERT(inSuite, UnescapeKey("") == "");
-    NL_TEST_ASSERT(inSuite, UnescapeKey("abcd1234,!") == "abcd1234,!");
-    NL_TEST_ASSERT(inSuite, UnescapeKey("ab\\x0acd\\x20\\x3d12\\x5c34\\x7f") == "ab\ncd =12\\34\x7f");
-    NL_TEST_ASSERT(inSuite, UnescapeKey("\\x20") == " ");
-    NL_TEST_ASSERT(inSuite, UnescapeKey("\\x3d\\x3d\\x3d") == "===");
-    NL_TEST_ASSERT(inSuite, UnescapeKey("\\x0d") == "\r");
+    EXPECT_EQ(UnescapeKey(""), "");
+    EXPECT_EQ(UnescapeKey("abcd1234,!"), "abcd1234,!");
+    EXPECT_EQ(UnescapeKey("ab\\x0acd\\x20\\x3d12\\x5c34\\x7f"), "ab\ncd =12\\34\x7f");
+    EXPECT_EQ(UnescapeKey("\\x20"), " ");
+    EXPECT_EQ(UnescapeKey("\\x3d\\x3d\\x3d"), "===");
+    EXPECT_EQ(UnescapeKey("\\x0d"), "\r");
 
-    NL_TEST_ASSERT(inSuite, UnescapeKey("\\x01\\x02\\x03\\x04\\x05\\x06\\x07") == "\x01\x02\x03\x04\x05\x06\x07");
-    NL_TEST_ASSERT(inSuite, UnescapeKey("\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e") == "\x08\x09\x0a\x0b\x0c\x0d\x0e");
-    NL_TEST_ASSERT(inSuite, UnescapeKey("\\x0f\\x10\\x11\\x12\\x13\\x14\\x15") == "\x0f\x10\x11\x12\x13\x14\x15");
-    NL_TEST_ASSERT(inSuite, UnescapeKey("\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c") == "\x16\x17\x18\x19\x1a\x1b\x1c");
-    NL_TEST_ASSERT(inSuite, UnescapeKey("\\x1d\\x1e\\x1f\\x20\\x7f\\x3d\\x5c") == "\x1d\x1e\x1f \x7f=\\");
-    NL_TEST_ASSERT(inSuite, UnescapeKey("\\x81\\x82\\xff") == "\x81\x82\xff");
+    EXPECT_EQ(UnescapeKey("\\x01\\x02\\x03\\x04\\x05\\x06\\x07"), "\x01\x02\x03\x04\x05\x06\x07");
+    EXPECT_EQ(UnescapeKey("\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e"), "\x08\x09\x0a\x0b\x0c\x0d\x0e");
+    EXPECT_EQ(UnescapeKey("\\x0f\\x10\\x11\\x12\\x13\\x14\\x15"), "\x0f\x10\x11\x12\x13\x14\x15");
+    EXPECT_EQ(UnescapeKey("\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c"), "\x16\x17\x18\x19\x1a\x1b\x1c");
+    EXPECT_EQ(UnescapeKey("\\x1d\\x1e\\x1f\\x20\\x7f\\x3d\\x5c"), "\x1d\x1e\x1f \x7f=\\");
+    EXPECT_EQ(UnescapeKey("\\x81\\x82\\xff"), "\x81\x82\xff");
 
     // Test invalid cases
 
     // letters should never be escaped
-    NL_TEST_ASSERT(inSuite, UnescapeKey("\\x5a\55") != "ZU");
-    NL_TEST_ASSERT(inSuite, UnescapeKey("\\x5a\55") == "");
+    EXPECT_NE(UnescapeKey("\\x5a\55"), "ZU");
+    EXPECT_EQ(UnescapeKey("\\x5a\55"), "");
 
     // Capitalized hex forbidden
-    NL_TEST_ASSERT(inSuite, UnescapeKey("\\x0D") == "");
+    EXPECT_EQ(UnescapeKey("\\x0D"), "");
 
     // Partial escapes forbidden
-    NL_TEST_ASSERT(inSuite, UnescapeKey("1\\x0") == "");
+    EXPECT_EQ(UnescapeKey("1\\x0"), "");
 }
 
-void TestRoundTrip(nlTestSuite * inSuite, void * inContext)
+TEST(TestIniEscaping, TestRoundTrip)
 {
-    NL_TEST_ASSERT(inSuite, UnescapeKey(EscapeKey("")) == "");
-    NL_TEST_ASSERT(inSuite, UnescapeKey(EscapeKey("abcd1234,!")) == "abcd1234,!");
-    NL_TEST_ASSERT(inSuite, UnescapeKey(EscapeKey("ab\ncd =12\\34\x7f")) == "ab\ncd =12\\34\x7f");
-    NL_TEST_ASSERT(inSuite, UnescapeKey(EscapeKey(" ")) == " ");
-    NL_TEST_ASSERT(inSuite, UnescapeKey(EscapeKey("===")) == "===");
-    NL_TEST_ASSERT(inSuite, UnescapeKey(EscapeKey("\r")) == "\r");
+    EXPECT_EQ(UnescapeKey(EscapeKey("")), "");
+    EXPECT_EQ(UnescapeKey(EscapeKey("abcd1234,!")), "abcd1234,!");
+    EXPECT_EQ(UnescapeKey(EscapeKey("ab\ncd =12\\34\x7f")), "ab\ncd =12\\34\x7f");
+    EXPECT_EQ(UnescapeKey(EscapeKey(" ")), " ");
+    EXPECT_EQ(UnescapeKey(EscapeKey("===")), "===");
+    EXPECT_EQ(UnescapeKey(EscapeKey("\r")), "\r");
 
-    NL_TEST_ASSERT(inSuite, UnescapeKey(EscapeKey("\x01\x02\x03\x04\x05\x06\x07")) == "\x01\x02\x03\x04\x05\x06\x07");
-    NL_TEST_ASSERT(inSuite, UnescapeKey(EscapeKey("\x08\x09\x0a\x0b\x0c\x0d\x0e")) == "\x08\x09\x0a\x0b\x0c\x0d\x0e");
-    NL_TEST_ASSERT(inSuite, UnescapeKey(EscapeKey("\x0f\x10\x11\x12\x13\x14\x15")) == "\x0f\x10\x11\x12\x13\x14\x15");
-    NL_TEST_ASSERT(inSuite, UnescapeKey(EscapeKey("\x16\x17\x18\x19\x1a\x1b\x1c")) == "\x16\x17\x18\x19\x1a\x1b\x1c");
-    NL_TEST_ASSERT(inSuite, UnescapeKey(EscapeKey("\x1d\x1e\x1f \x7f=\\")) == "\x1d\x1e\x1f \x7f=\\");
-    NL_TEST_ASSERT(inSuite, UnescapeKey(EscapeKey("\x81\x82\xff")) == "\x81\x82\xff");
+    EXPECT_EQ(UnescapeKey(EscapeKey("\x01\x02\x03\x04\x05\x06\x07")), "\x01\x02\x03\x04\x05\x06\x07");
+    EXPECT_EQ(UnescapeKey(EscapeKey("\x08\x09\x0a\x0b\x0c\x0d\x0e")), "\x08\x09\x0a\x0b\x0c\x0d\x0e");
+    EXPECT_EQ(UnescapeKey(EscapeKey("\x0f\x10\x11\x12\x13\x14\x15")), "\x0f\x10\x11\x12\x13\x14\x15");
+    EXPECT_EQ(UnescapeKey(EscapeKey("\x16\x17\x18\x19\x1a\x1b\x1c")), "\x16\x17\x18\x19\x1a\x1b\x1c");
+    EXPECT_EQ(UnescapeKey(EscapeKey("\x1d\x1e\x1f \x7f=\\")), "\x1d\x1e\x1f \x7f=\\");
+    EXPECT_EQ(UnescapeKey(EscapeKey("\x81\x82\xff")), "\x81\x82\xff");
 
     // Make sure entire range is escapable
     for (int c = 0; c <= 255; c++)
     {
         std::string s(5, static_cast<char>(c));
-        NL_TEST_ASSERT_LOOP(inSuite, c, UnescapeKey(EscapeKey(s)) == s);
+        EXPECT_EQ(UnescapeKey(EscapeKey(s)), s) << "c: " << c;
     }
 }
 
-const nlTest sTests[] = { NL_TEST_DEF("Test escaping API", TestEscaping), NL_TEST_DEF("Test unescaping API", TestUnescaping),
-                          NL_TEST_DEF("Test escaping API round-tripping with itself", TestRoundTrip), NL_TEST_SENTINEL() };
-
 } // namespace
-
-int TestIniEscaping()
-{
-    nlTestSuite theSuite = { "IniEscaping tests", &sTests[0], nullptr, nullptr };
-
-    nlTestRunner(&theSuite, nullptr);
-    return nlTestRunnerStats(&theSuite);
-}
-
-CHIP_REGISTER_TEST_SUITE(TestIniEscaping);
diff --git a/src/lib/support/tests/TestSafeInt.cpp b/src/lib/support/tests/TestSafeInt.cpp
index 3108e74..1464c0e 100644
--- a/src/lib/support/tests/TestSafeInt.cpp
+++ b/src/lib/support/tests/TestSafeInt.cpp
@@ -22,346 +22,325 @@
  *
  */
 
+#include <gtest/gtest.h>
 #include <lib/support/SafeInt.h>
-#include <lib/support/UnitTestRegistration.h>
-
-#include <nlunit-test.h>
 
 using namespace chip;
 
-static void TestCanCastTo_Int8(nlTestSuite * inSuite, void * inContext)
+TEST(TestSafeInt, TestCanCastTo_Int8)
 {
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint8_t>(0));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint8_t>(127));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint8_t>(128));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint8_t>(129));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint8_t>(255));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(256));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(32767));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(32768));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(32769));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(65535));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(65536));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(2147483647ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(2147483648ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(2147483649ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(4294967295ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(4294967296ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(9223372036854775807ull));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(9223372036854775808ull));
+    EXPECT_TRUE(CanCastTo<uint8_t>(0));
+    EXPECT_TRUE(CanCastTo<uint8_t>(127));
+    EXPECT_TRUE(CanCastTo<uint8_t>(128));
+    EXPECT_TRUE(CanCastTo<uint8_t>(129));
+    EXPECT_TRUE(CanCastTo<uint8_t>(255));
+    EXPECT_FALSE(CanCastTo<uint8_t>(256));
+    EXPECT_FALSE(CanCastTo<uint8_t>(32767));
+    EXPECT_FALSE(CanCastTo<uint8_t>(32768));
+    EXPECT_FALSE(CanCastTo<uint8_t>(32769));
+    EXPECT_FALSE(CanCastTo<uint8_t>(65535));
+    EXPECT_FALSE(CanCastTo<uint8_t>(65536));
+    EXPECT_FALSE(CanCastTo<uint8_t>(2147483647ll));
+    EXPECT_FALSE(CanCastTo<uint8_t>(2147483648ll));
+    EXPECT_FALSE(CanCastTo<uint8_t>(2147483649ll));
+    EXPECT_FALSE(CanCastTo<uint8_t>(4294967295ll));
+    EXPECT_FALSE(CanCastTo<uint8_t>(4294967296ll));
+    EXPECT_FALSE(CanCastTo<uint8_t>(9223372036854775807ull));
+    EXPECT_FALSE(CanCastTo<uint8_t>(9223372036854775808ull));
 
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-1));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-127));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-128));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-129));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-255));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-256));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-32767));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-32768));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-32769));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-65535));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-65536));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-2147483647ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-2147483648ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-2147483649ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-4294967295ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-4294967296ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-9223372036854775807ll));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-1));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-127));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-128));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-129));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-255));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-256));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-32767));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-32768));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-32769));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-65535));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-65536));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-2147483647ll));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-2147483648ll));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-2147483649ll));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-4294967295ll));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-4294967296ll));
+    EXPECT_FALSE(CanCastTo<uint8_t>(-9223372036854775807ll));
 
-    NL_TEST_ASSERT(inSuite, CanCastTo<int8_t>(0));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int8_t>(127));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(128));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(129));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(255));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(256));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(32767));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(32768));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(32769));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(65535));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(65536));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(2147483647ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(2147483648ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(2147483649ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(4294967295ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(4294967296ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(9223372036854775807ull));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(9223372036854775808ull));
+    EXPECT_TRUE(CanCastTo<int8_t>(0));
+    EXPECT_TRUE(CanCastTo<int8_t>(127));
+    EXPECT_FALSE(CanCastTo<int8_t>(128));
+    EXPECT_FALSE(CanCastTo<int8_t>(129));
+    EXPECT_FALSE(CanCastTo<int8_t>(255));
+    EXPECT_FALSE(CanCastTo<int8_t>(256));
+    EXPECT_FALSE(CanCastTo<int8_t>(32767));
+    EXPECT_FALSE(CanCastTo<int8_t>(32768));
+    EXPECT_FALSE(CanCastTo<int8_t>(32769));
+    EXPECT_FALSE(CanCastTo<int8_t>(65535));
+    EXPECT_FALSE(CanCastTo<int8_t>(65536));
+    EXPECT_FALSE(CanCastTo<int8_t>(2147483647ll));
+    EXPECT_FALSE(CanCastTo<int8_t>(2147483648ll));
+    EXPECT_FALSE(CanCastTo<int8_t>(2147483649ll));
+    EXPECT_FALSE(CanCastTo<int8_t>(4294967295ll));
+    EXPECT_FALSE(CanCastTo<int8_t>(4294967296ll));
+    EXPECT_FALSE(CanCastTo<int8_t>(9223372036854775807ull));
+    EXPECT_FALSE(CanCastTo<int8_t>(9223372036854775808ull));
 
-    NL_TEST_ASSERT(inSuite, CanCastTo<int8_t>(-1));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int8_t>(-127));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int8_t>(-128));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-129));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-255));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-256));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-32767));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-32768));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-32769));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-65535));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-65536));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-2147483647ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-2147483648ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-2147483649ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-4294967295ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-4294967296ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-9223372036854775807ll));
+    EXPECT_TRUE(CanCastTo<int8_t>(-1));
+    EXPECT_TRUE(CanCastTo<int8_t>(-127));
+    EXPECT_TRUE(CanCastTo<int8_t>(-128));
+    EXPECT_FALSE(CanCastTo<int8_t>(-129));
+    EXPECT_FALSE(CanCastTo<int8_t>(-255));
+    EXPECT_FALSE(CanCastTo<int8_t>(-256));
+    EXPECT_FALSE(CanCastTo<int8_t>(-32767));
+    EXPECT_FALSE(CanCastTo<int8_t>(-32768));
+    EXPECT_FALSE(CanCastTo<int8_t>(-32769));
+    EXPECT_FALSE(CanCastTo<int8_t>(-65535));
+    EXPECT_FALSE(CanCastTo<int8_t>(-65536));
+    EXPECT_FALSE(CanCastTo<int8_t>(-2147483647ll));
+    EXPECT_FALSE(CanCastTo<int8_t>(-2147483648ll));
+    EXPECT_FALSE(CanCastTo<int8_t>(-2147483649ll));
+    EXPECT_FALSE(CanCastTo<int8_t>(-4294967295ll));
+    EXPECT_FALSE(CanCastTo<int8_t>(-4294967296ll));
+    EXPECT_FALSE(CanCastTo<int8_t>(-9223372036854775807ll));
 }
 
-static void TestCanCastTo_Int16(nlTestSuite * inSuite, void * inContext)
+TEST(TestSafeInt, TestCanCastTo_Int16)
 {
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(0));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(127));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(128));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(129));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(255));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(256));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(32767));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(32768));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(32769));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(65535));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(65536));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(2147483647ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(2147483648ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(2147483649ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(4294967295ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(4294967296ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(9223372036854775807ull));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(9223372036854775808ull));
+    EXPECT_TRUE(CanCastTo<uint16_t>(0));
+    EXPECT_TRUE(CanCastTo<uint16_t>(127));
+    EXPECT_TRUE(CanCastTo<uint16_t>(128));
+    EXPECT_TRUE(CanCastTo<uint16_t>(129));
+    EXPECT_TRUE(CanCastTo<uint16_t>(255));
+    EXPECT_TRUE(CanCastTo<uint16_t>(256));
+    EXPECT_TRUE(CanCastTo<uint16_t>(32767));
+    EXPECT_TRUE(CanCastTo<uint16_t>(32768));
+    EXPECT_TRUE(CanCastTo<uint16_t>(32769));
+    EXPECT_TRUE(CanCastTo<uint16_t>(65535));
+    EXPECT_FALSE(CanCastTo<uint16_t>(65536));
+    EXPECT_FALSE(CanCastTo<uint16_t>(2147483647ll));
+    EXPECT_FALSE(CanCastTo<uint16_t>(2147483648ll));
+    EXPECT_FALSE(CanCastTo<uint16_t>(2147483649ll));
+    EXPECT_FALSE(CanCastTo<uint16_t>(4294967295ll));
+    EXPECT_FALSE(CanCastTo<uint16_t>(4294967296ll));
+    EXPECT_FALSE(CanCastTo<uint16_t>(9223372036854775807ull));
+    EXPECT_FALSE(CanCastTo<uint16_t>(9223372036854775808ull));
 
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-1));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-127));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-128));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-129));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-255));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-256));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-32767));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-32768));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-32769));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-65535));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-65536));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-2147483647ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-2147483648ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-2147483649ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-4294967295ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-4294967296ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-9223372036854775807ll));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-1));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-127));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-128));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-129));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-255));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-256));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-32767));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-32768));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-32769));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-65535));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-65536));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-2147483647ll));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-2147483648ll));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-2147483649ll));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-4294967295ll));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-4294967296ll));
+    EXPECT_FALSE(CanCastTo<uint16_t>(-9223372036854775807ll));
 
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(0));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(127));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(128));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(129));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(255));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(256));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(32767));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(32768));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(32769));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(65535));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(65536));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(2147483647ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(2147483648ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(2147483649ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(4294967295ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(4294967296ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(9223372036854775807ull));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(9223372036854775808ull));
+    EXPECT_TRUE(CanCastTo<int16_t>(0));
+    EXPECT_TRUE(CanCastTo<int16_t>(127));
+    EXPECT_TRUE(CanCastTo<int16_t>(128));
+    EXPECT_TRUE(CanCastTo<int16_t>(129));
+    EXPECT_TRUE(CanCastTo<int16_t>(255));
+    EXPECT_TRUE(CanCastTo<int16_t>(256));
+    EXPECT_TRUE(CanCastTo<int16_t>(32767));
+    EXPECT_FALSE(CanCastTo<int16_t>(32768));
+    EXPECT_FALSE(CanCastTo<int16_t>(32769));
+    EXPECT_FALSE(CanCastTo<int16_t>(65535));
+    EXPECT_FALSE(CanCastTo<int16_t>(65536));
+    EXPECT_FALSE(CanCastTo<int16_t>(2147483647ll));
+    EXPECT_FALSE(CanCastTo<int16_t>(2147483648ll));
+    EXPECT_FALSE(CanCastTo<int16_t>(2147483649ll));
+    EXPECT_FALSE(CanCastTo<int16_t>(4294967295ll));
+    EXPECT_FALSE(CanCastTo<int16_t>(4294967296ll));
+    EXPECT_FALSE(CanCastTo<int16_t>(9223372036854775807ull));
+    EXPECT_FALSE(CanCastTo<int16_t>(9223372036854775808ull));
 
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-1));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-127));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-128));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-129));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-255));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-256));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-32767));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-32768));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-32769));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-65535));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-65536));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-2147483647ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-2147483648ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-2147483649ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-4294967295ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-4294967296ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-9223372036854775807ll));
+    EXPECT_TRUE(CanCastTo<int16_t>(-1));
+    EXPECT_TRUE(CanCastTo<int16_t>(-127));
+    EXPECT_TRUE(CanCastTo<int16_t>(-128));
+    EXPECT_TRUE(CanCastTo<int16_t>(-129));
+    EXPECT_TRUE(CanCastTo<int16_t>(-255));
+    EXPECT_TRUE(CanCastTo<int16_t>(-256));
+    EXPECT_TRUE(CanCastTo<int16_t>(-32767));
+    EXPECT_TRUE(CanCastTo<int16_t>(-32768));
+    EXPECT_FALSE(CanCastTo<int16_t>(-32769));
+    EXPECT_FALSE(CanCastTo<int16_t>(-65535));
+    EXPECT_FALSE(CanCastTo<int16_t>(-65536));
+    EXPECT_FALSE(CanCastTo<int16_t>(-2147483647ll));
+    EXPECT_FALSE(CanCastTo<int16_t>(-2147483648ll));
+    EXPECT_FALSE(CanCastTo<int16_t>(-2147483649ll));
+    EXPECT_FALSE(CanCastTo<int16_t>(-4294967295ll));
+    EXPECT_FALSE(CanCastTo<int16_t>(-4294967296ll));
+    EXPECT_FALSE(CanCastTo<int16_t>(-9223372036854775807ll));
 }
 
-static void TestCanCastTo_Int32(nlTestSuite * inSuite, void * inContext)
+TEST(TestSafeInt, TestCanCastTo_Int32)
 {
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(0));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(127));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(128));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(129));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(255));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(256));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(32767));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(32768));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(32769));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(65535));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(65536));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(2147483647ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(2147483648ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(2147483649ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(4294967295ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(4294967296ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(9223372036854775807ull));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(9223372036854775808ull));
+    EXPECT_TRUE(CanCastTo<uint32_t>(0));
+    EXPECT_TRUE(CanCastTo<uint32_t>(127));
+    EXPECT_TRUE(CanCastTo<uint32_t>(128));
+    EXPECT_TRUE(CanCastTo<uint32_t>(129));
+    EXPECT_TRUE(CanCastTo<uint32_t>(255));
+    EXPECT_TRUE(CanCastTo<uint32_t>(256));
+    EXPECT_TRUE(CanCastTo<uint32_t>(32767));
+    EXPECT_TRUE(CanCastTo<uint32_t>(32768));
+    EXPECT_TRUE(CanCastTo<uint32_t>(32769));
+    EXPECT_TRUE(CanCastTo<uint32_t>(65535));
+    EXPECT_TRUE(CanCastTo<uint32_t>(65536));
+    EXPECT_TRUE(CanCastTo<uint32_t>(2147483647ll));
+    EXPECT_TRUE(CanCastTo<uint32_t>(2147483648ll));
+    EXPECT_TRUE(CanCastTo<uint32_t>(2147483649ll));
+    EXPECT_TRUE(CanCastTo<uint32_t>(4294967295ll));
+    EXPECT_FALSE(CanCastTo<uint32_t>(4294967296ll));
+    EXPECT_FALSE(CanCastTo<uint32_t>(9223372036854775807ull));
+    EXPECT_FALSE(CanCastTo<uint32_t>(9223372036854775808ull));
 
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-1));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-127));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-128));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-129));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-255));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-256));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-32767));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-32768));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-32769));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-65535));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-65536));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-2147483647ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-2147483648ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-2147483649ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-4294967295ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-4294967296ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-9223372036854775807ll));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-1));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-127));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-128));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-129));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-255));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-256));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-32767));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-32768));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-32769));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-65535));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-65536));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-2147483647ll));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-2147483648ll));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-2147483649ll));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-4294967295ll));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-4294967296ll));
+    EXPECT_FALSE(CanCastTo<uint32_t>(-9223372036854775807ll));
 
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(0));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(127));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(128));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(129));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(255));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(256));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(32767));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(32768));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(32769));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(65535));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(65536));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(2147483647ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(2147483648ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(2147483649ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(4294967295ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(4294967296ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(9223372036854775807ull));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(9223372036854775808ull));
+    EXPECT_TRUE(CanCastTo<int32_t>(0));
+    EXPECT_TRUE(CanCastTo<int32_t>(127));
+    EXPECT_TRUE(CanCastTo<int32_t>(128));
+    EXPECT_TRUE(CanCastTo<int32_t>(129));
+    EXPECT_TRUE(CanCastTo<int32_t>(255));
+    EXPECT_TRUE(CanCastTo<int32_t>(256));
+    EXPECT_TRUE(CanCastTo<int32_t>(32767));
+    EXPECT_TRUE(CanCastTo<int32_t>(32768));
+    EXPECT_TRUE(CanCastTo<int32_t>(32769));
+    EXPECT_TRUE(CanCastTo<int32_t>(65535));
+    EXPECT_TRUE(CanCastTo<int32_t>(65536));
+    EXPECT_TRUE(CanCastTo<int32_t>(2147483647ll));
+    EXPECT_FALSE(CanCastTo<int32_t>(2147483648ll));
+    EXPECT_FALSE(CanCastTo<int32_t>(2147483649ll));
+    EXPECT_FALSE(CanCastTo<int32_t>(4294967295ll));
+    EXPECT_FALSE(CanCastTo<int32_t>(4294967296ll));
+    EXPECT_FALSE(CanCastTo<int32_t>(9223372036854775807ull));
+    EXPECT_FALSE(CanCastTo<int32_t>(9223372036854775808ull));
 
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-1));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-127));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-128));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-129));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-255));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-256));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-32767));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-32768));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-32769));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-65535));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-65536));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-2147483647ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-2147483648ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(-2147483649ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(-4294967295ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(-4294967296ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(-9223372036854775807ll));
+    EXPECT_TRUE(CanCastTo<int32_t>(-1));
+    EXPECT_TRUE(CanCastTo<int32_t>(-127));
+    EXPECT_TRUE(CanCastTo<int32_t>(-128));
+    EXPECT_TRUE(CanCastTo<int32_t>(-129));
+    EXPECT_TRUE(CanCastTo<int32_t>(-255));
+    EXPECT_TRUE(CanCastTo<int32_t>(-256));
+    EXPECT_TRUE(CanCastTo<int32_t>(-32767));
+    EXPECT_TRUE(CanCastTo<int32_t>(-32768));
+    EXPECT_TRUE(CanCastTo<int32_t>(-32769));
+    EXPECT_TRUE(CanCastTo<int32_t>(-65535));
+    EXPECT_TRUE(CanCastTo<int32_t>(-65536));
+    EXPECT_TRUE(CanCastTo<int32_t>(-2147483647ll));
+    EXPECT_TRUE(CanCastTo<int32_t>(-2147483648ll));
+    EXPECT_FALSE(CanCastTo<int32_t>(-2147483649ll));
+    EXPECT_FALSE(CanCastTo<int32_t>(-4294967295ll));
+    EXPECT_FALSE(CanCastTo<int32_t>(-4294967296ll));
+    EXPECT_FALSE(CanCastTo<int32_t>(-9223372036854775807ll));
 }
 
-static void TestCanCastTo_Int64(nlTestSuite * inSuite, void * inContext)
+TEST(TestSafeInt, TestCanCastTo_Int64)
 {
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(0));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(127));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(128));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(129));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(255));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(256));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(32767));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(32768));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(32769));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(65535));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(65536));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(2147483647ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(2147483648ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(2147483649ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(4294967295ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(4294967296ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(9223372036854775807ull));
-    NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(9223372036854775808ull));
+    EXPECT_TRUE(CanCastTo<uint64_t>(0));
+    EXPECT_TRUE(CanCastTo<uint64_t>(127));
+    EXPECT_TRUE(CanCastTo<uint64_t>(128));
+    EXPECT_TRUE(CanCastTo<uint64_t>(129));
+    EXPECT_TRUE(CanCastTo<uint64_t>(255));
+    EXPECT_TRUE(CanCastTo<uint64_t>(256));
+    EXPECT_TRUE(CanCastTo<uint64_t>(32767));
+    EXPECT_TRUE(CanCastTo<uint64_t>(32768));
+    EXPECT_TRUE(CanCastTo<uint64_t>(32769));
+    EXPECT_TRUE(CanCastTo<uint64_t>(65535));
+    EXPECT_TRUE(CanCastTo<uint64_t>(65536));
+    EXPECT_TRUE(CanCastTo<uint64_t>(2147483647ll));
+    EXPECT_TRUE(CanCastTo<uint64_t>(2147483648ll));
+    EXPECT_TRUE(CanCastTo<uint64_t>(2147483649ll));
+    EXPECT_TRUE(CanCastTo<uint64_t>(4294967295ll));
+    EXPECT_TRUE(CanCastTo<uint64_t>(4294967296ll));
+    EXPECT_TRUE(CanCastTo<uint64_t>(9223372036854775807ull));
+    EXPECT_TRUE(CanCastTo<uint64_t>(9223372036854775808ull));
 
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-1));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-127));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-128));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-129));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-255));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-256));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-32767));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-32768));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-32769));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-65535));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-65536));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-2147483647ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-2147483648ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-2147483649ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-4294967295ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-4294967296ll));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-9223372036854775807ll));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-1));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-127));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-128));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-129));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-255));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-256));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-32767));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-32768));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-32769));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-65535));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-65536));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-2147483647ll));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-2147483648ll));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-2147483649ll));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-4294967295ll));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-4294967296ll));
+    EXPECT_FALSE(CanCastTo<uint64_t>(-9223372036854775807ll));
 
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(0));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(127));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(128));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(129));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(255));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(256));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(32767));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(32768));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(32769));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(65535));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(65536));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(2147483647ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(2147483648ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(2147483649ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(4294967295ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(4294967296ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(9223372036854775807ull));
-    NL_TEST_ASSERT(inSuite, !CanCastTo<int64_t>(9223372036854775808ull));
+    EXPECT_TRUE(CanCastTo<int64_t>(0));
+    EXPECT_TRUE(CanCastTo<int64_t>(127));
+    EXPECT_TRUE(CanCastTo<int64_t>(128));
+    EXPECT_TRUE(CanCastTo<int64_t>(129));
+    EXPECT_TRUE(CanCastTo<int64_t>(255));
+    EXPECT_TRUE(CanCastTo<int64_t>(256));
+    EXPECT_TRUE(CanCastTo<int64_t>(32767));
+    EXPECT_TRUE(CanCastTo<int64_t>(32768));
+    EXPECT_TRUE(CanCastTo<int64_t>(32769));
+    EXPECT_TRUE(CanCastTo<int64_t>(65535));
+    EXPECT_TRUE(CanCastTo<int64_t>(65536));
+    EXPECT_TRUE(CanCastTo<int64_t>(2147483647ll));
+    EXPECT_TRUE(CanCastTo<int64_t>(2147483648ll));
+    EXPECT_TRUE(CanCastTo<int64_t>(2147483649ll));
+    EXPECT_TRUE(CanCastTo<int64_t>(4294967295ll));
+    EXPECT_TRUE(CanCastTo<int64_t>(4294967296ll));
+    EXPECT_TRUE(CanCastTo<int64_t>(9223372036854775807ull));
+    EXPECT_FALSE(CanCastTo<int64_t>(9223372036854775808ull));
 
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-1));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-127));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-128));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-129));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-255));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-256));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-32767));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-32768));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-32769));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-65535));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-65536));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-2147483647ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-2147483648ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-2147483649ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-4294967295ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-4294967296ll));
-    NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-9223372036854775807ll));
+    EXPECT_TRUE(CanCastTo<int64_t>(-1));
+    EXPECT_TRUE(CanCastTo<int64_t>(-127));
+    EXPECT_TRUE(CanCastTo<int64_t>(-128));
+    EXPECT_TRUE(CanCastTo<int64_t>(-129));
+    EXPECT_TRUE(CanCastTo<int64_t>(-255));
+    EXPECT_TRUE(CanCastTo<int64_t>(-256));
+    EXPECT_TRUE(CanCastTo<int64_t>(-32767));
+    EXPECT_TRUE(CanCastTo<int64_t>(-32768));
+    EXPECT_TRUE(CanCastTo<int64_t>(-32769));
+    EXPECT_TRUE(CanCastTo<int64_t>(-65535));
+    EXPECT_TRUE(CanCastTo<int64_t>(-65536));
+    EXPECT_TRUE(CanCastTo<int64_t>(-2147483647ll));
+    EXPECT_TRUE(CanCastTo<int64_t>(-2147483648ll));
+    EXPECT_TRUE(CanCastTo<int64_t>(-2147483649ll));
+    EXPECT_TRUE(CanCastTo<int64_t>(-4294967295ll));
+    EXPECT_TRUE(CanCastTo<int64_t>(-4294967296ll));
+    EXPECT_TRUE(CanCastTo<int64_t>(-9223372036854775807ll));
 }
 
-static void TestCastToSigned(nlTestSuite * inSuite, void * inContext)
+TEST(TestSafeInt, TestCastToSigned)
 {
-    NL_TEST_ASSERT(inSuite, CastToSigned(static_cast<uint8_t>(5)) == 5);
-    NL_TEST_ASSERT(inSuite, CastToSigned(static_cast<uint8_t>(-5)) == -5);
-    NL_TEST_ASSERT(inSuite, CastToSigned(static_cast<uint8_t>(254)) == -2);
-    NL_TEST_ASSERT(inSuite, CastToSigned(static_cast<uint8_t>(65533)) == -3);
-    NL_TEST_ASSERT(inSuite, CastToSigned(static_cast<uint16_t>(254)) == 254);
-    NL_TEST_ASSERT(inSuite, CastToSigned(static_cast<uint16_t>(65533)) == -3);
+    EXPECT_EQ(CastToSigned(static_cast<uint8_t>(5)), 5);
+    EXPECT_EQ(CastToSigned(static_cast<uint8_t>(-5)), -5);
+    EXPECT_EQ(CastToSigned(static_cast<uint8_t>(254)), -2);
+    EXPECT_EQ(CastToSigned(static_cast<uint8_t>(65533)), -3);
+    EXPECT_EQ(CastToSigned(static_cast<uint16_t>(254)), 254);
+    EXPECT_EQ(CastToSigned(static_cast<uint16_t>(65533)), -3);
 }
-
-#define NL_TEST_DEF_FN(fn) NL_TEST_DEF("Test " #fn, fn)
-/**
- *   Test Suite. It lists all the test functions.
- */
-static const nlTest sTests[] = { NL_TEST_DEF_FN(TestCanCastTo_Int8),  NL_TEST_DEF_FN(TestCanCastTo_Int16),
-                                 NL_TEST_DEF_FN(TestCanCastTo_Int32), NL_TEST_DEF_FN(TestCanCastTo_Int64),
-                                 NL_TEST_DEF_FN(TestCastToSigned),    NL_TEST_SENTINEL() };
-
-int TestSafeInt()
-{
-    nlTestSuite theSuite = { "CHIP SafeInt tests", &sTests[0], nullptr, nullptr };
-
-    // Run test suite against one context.
-    nlTestRunner(&theSuite, nullptr);
-    return nlTestRunnerStats(&theSuite);
-}
-
-CHIP_REGISTER_TEST_SUITE(TestSafeInt)
diff --git a/src/test_driver/openiotsdk/unit-tests/test_components.txt b/src/test_driver/openiotsdk/unit-tests/test_components.txt
index 5c3dcba..43a4bf8 100644
--- a/src/test_driver/openiotsdk/unit-tests/test_components.txt
+++ b/src/test_driver/openiotsdk/unit-tests/test_components.txt
@@ -8,4 +8,5 @@
 PlatformTests
 SystemLayerTests
 TestShell
-SetupPayloadTests
\ No newline at end of file
+SetupPayloadTests
+SupportTests
\ No newline at end of file
diff --git a/src/test_driver/openiotsdk/unit-tests/test_components_nl.txt b/src/test_driver/openiotsdk/unit-tests/test_components_nl.txt
index 7806ae3..809a36b 100644
--- a/src/test_driver/openiotsdk/unit-tests/test_components_nl.txt
+++ b/src/test_driver/openiotsdk/unit-tests/test_components_nl.txt
@@ -9,6 +9,6 @@
 RetransmitTests
 SecureChannelTests
 SetupPayloadTestsNL
-SupportTests
+SupportTestsNL
 TransportLayerTests
 UserDirectedCommissioningTests