brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · a614a48 Raw
119 lines · cpp
1//===- OutlinedHashTreeRecordTest.cpp -------------------------------------===//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 "llvm/CGData/OutlinedHashTreeRecord.h"10#include "gmock/gmock.h"11#include "gtest/gtest.h"12 13using namespace llvm;14 15namespace {16 17TEST(OutlinedHashTreeRecordTest, Empty) {18  OutlinedHashTreeRecord HashTreeRecord;19  ASSERT_TRUE(HashTreeRecord.empty());20}21 22TEST(OutlinedHashTreeRecordTest, Print) {23  OutlinedHashTreeRecord HashTreeRecord;24  HashTreeRecord.HashTree->insert({{1, 2}, 3});25 26  const char *ExpectedTreeStr = R"(---270:28  Hash:            0x029  Terminals:       030  SuccessorIds:    [ 1 ]311:32  Hash:            0x133  Terminals:       034  SuccessorIds:    [ 2 ]352:36  Hash:            0x237  Terminals:       338  SuccessorIds:    [  ]39...40)";41  std::string TreeDump;42  raw_string_ostream OS(TreeDump);43  HashTreeRecord.print(OS);44  EXPECT_EQ(ExpectedTreeStr, TreeDump);45}46 47TEST(OutlinedHashTreeRecordTest, Stable) {48  OutlinedHashTreeRecord HashTreeRecord1;49  HashTreeRecord1.HashTree->insert({{1, 2}, 4});50  HashTreeRecord1.HashTree->insert({{1, 3}, 5});51 52  OutlinedHashTreeRecord HashTreeRecord2;53  HashTreeRecord2.HashTree->insert({{1, 3}, 5});54  HashTreeRecord2.HashTree->insert({{1, 2}, 4});55 56  // Output is stable regardless of insertion order.57  std::string TreeDump1;58  raw_string_ostream OS1(TreeDump1);59  HashTreeRecord1.print(OS1);60  std::string TreeDump2;61  raw_string_ostream OS2(TreeDump2);62  HashTreeRecord2.print(OS2);63 64  EXPECT_EQ(TreeDump1, TreeDump2);65}66 67TEST(OutlinedHashTreeRecordTest, Serialize) {68  OutlinedHashTreeRecord HashTreeRecord1;69  HashTreeRecord1.HashTree->insert({{1, 2}, 4});70  HashTreeRecord1.HashTree->insert({{1, 3}, 5});71 72  // Serialize and deserialize the tree.73  SmallVector<char> Out;74  raw_svector_ostream OS(Out);75  HashTreeRecord1.serialize(OS);76 77  OutlinedHashTreeRecord HashTreeRecord2;78  const uint8_t *Data = reinterpret_cast<const uint8_t *>(Out.data());79  HashTreeRecord2.deserialize(Data);80 81  // Two trees should be identical.82  std::string TreeDump1;83  raw_string_ostream OS1(TreeDump1);84  HashTreeRecord1.print(OS1);85  std::string TreeDump2;86  raw_string_ostream OS2(TreeDump2);87  HashTreeRecord2.print(OS2);88 89  EXPECT_EQ(TreeDump1, TreeDump2);90}91 92TEST(OutlinedHashTreeRecordTest, SerializeYAML) {93  OutlinedHashTreeRecord HashTreeRecord1;94  HashTreeRecord1.HashTree->insert({{1, 2}, 4});95  HashTreeRecord1.HashTree->insert({{1, 3}, 5});96 97  // Serialize and deserialize the tree in a YAML format.98  std::string Out;99  raw_string_ostream OS(Out);100  yaml::Output YOS(OS);101  HashTreeRecord1.serializeYAML(YOS);102 103  OutlinedHashTreeRecord HashTreeRecord2;104  yaml::Input YIS(StringRef(Out.data(), Out.size()));105  HashTreeRecord2.deserializeYAML(YIS);106 107  // Two trees should be identical.108  std::string TreeDump1;109  raw_string_ostream OS1(TreeDump1);110  HashTreeRecord1.print(OS1);111  std::string TreeDump2;112  raw_string_ostream OS2(TreeDump2);113  HashTreeRecord2.print(OS2);114 115  EXPECT_EQ(TreeDump1, TreeDump2);116}117 118} // end namespace119