brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 456a1d4 Raw
67 lines · cpp
1//===---------- string_pool_test.cpp - Unit tests for StringPool ----------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "string_pool.h"10#include "gtest/gtest.h"11 12using namespace orc_rt;13 14namespace {15 16TEST(StringPool, UniquingAndComparisons) {17  StringPool SP;18  auto P1 = SP.intern("hello");19 20  std::string S("hel");21  S += "lo";22  auto P2 = SP.intern(S);23 24  auto P3 = SP.intern("goodbye");25 26  EXPECT_EQ(P1, P2) << "Failed to unique entries";27  EXPECT_NE(P1, P3) << "Unequal pooled strings comparing equal";28 29  // We want to test that less-than comparison of PooledStringPtrs compiles,30  // however we can't test the actual result as this is a pointer comparison and31  // PooledStringPtr doesn't expose the underlying address of the string.32  (void)(P1 < P3);33}34 35TEST(StringPool, Dereference) {36  StringPool SP;37  auto Foo = SP.intern("foo");38  EXPECT_EQ(*Foo, "foo") << "Equality on dereferenced string failed";39}40 41TEST(StringPool, ClearDeadEntries) {42  StringPool SP;43  {44    auto P1 = SP.intern("s1");45    SP.clearDeadEntries();46    EXPECT_FALSE(SP.empty()) << "\"s1\" entry in pool should still be retained";47  }48  SP.clearDeadEntries();49  EXPECT_TRUE(SP.empty()) << "pool should be empty";50}51 52TEST(StringPool, NullPtr) {53  // Make sure that we can default construct and then destroy a null54  // PooledStringPtr.55  PooledStringPtr Null;56}57 58TEST(StringPool, Hashable) {59  StringPool SP;60  PooledStringPtr P1 = SP.intern("s1");61  PooledStringPtr Null;62  EXPECT_NE(std::hash<PooledStringPtr>()(P1),63            std::hash<PooledStringPtr>()(Null));64}65 66} // end anonymous namespace67