MemoryBufferCacheTest.cpp 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. //===- MemoryBufferCacheTest.cpp - MemoryBufferCache tests ----------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "clang/Basic/MemoryBufferCache.h"
  10. #include "llvm/Support/MemoryBuffer.h"
  11. #include "gtest/gtest.h"
  12. using namespace llvm;
  13. using namespace clang;
  14. namespace {
  15. std::unique_ptr<MemoryBuffer> getBuffer(int I) {
  16. SmallVector<char, 8> Bytes;
  17. raw_svector_ostream(Bytes) << "data:" << I;
  18. return MemoryBuffer::getMemBuffer(StringRef(Bytes.data(), Bytes.size()));
  19. }
  20. TEST(MemoryBufferCacheTest, addBuffer) {
  21. auto B1 = getBuffer(1);
  22. auto B2 = getBuffer(2);
  23. auto B3 = getBuffer(3);
  24. auto *RawB1 = B1.get();
  25. auto *RawB2 = B2.get();
  26. auto *RawB3 = B3.get();
  27. // Add a few buffers.
  28. MemoryBufferCache Cache;
  29. EXPECT_EQ(RawB1, &Cache.addBuffer("1", std::move(B1)));
  30. EXPECT_EQ(RawB2, &Cache.addBuffer("2", std::move(B2)));
  31. EXPECT_EQ(RawB3, &Cache.addBuffer("3", std::move(B3)));
  32. EXPECT_EQ(RawB1, Cache.lookupBuffer("1"));
  33. EXPECT_EQ(RawB2, Cache.lookupBuffer("2"));
  34. EXPECT_EQ(RawB3, Cache.lookupBuffer("3"));
  35. EXPECT_FALSE(Cache.isBufferFinal("1"));
  36. EXPECT_FALSE(Cache.isBufferFinal("2"));
  37. EXPECT_FALSE(Cache.isBufferFinal("3"));
  38. // Remove the middle buffer.
  39. EXPECT_FALSE(Cache.tryToRemoveBuffer("2"));
  40. EXPECT_EQ(nullptr, Cache.lookupBuffer("2"));
  41. EXPECT_FALSE(Cache.isBufferFinal("2"));
  42. // Replace the middle buffer.
  43. B2 = getBuffer(2);
  44. ASSERT_NE(RawB2, B2.get());
  45. RawB2 = B2.get();
  46. EXPECT_EQ(RawB2, &Cache.addBuffer("2", std::move(B2)));
  47. // Check that nothing is final.
  48. EXPECT_FALSE(Cache.isBufferFinal("1"));
  49. EXPECT_FALSE(Cache.isBufferFinal("2"));
  50. EXPECT_FALSE(Cache.isBufferFinal("3"));
  51. }
  52. TEST(MemoryBufferCacheTest, finalizeCurrentBuffers) {
  53. // Add a buffer.
  54. MemoryBufferCache Cache;
  55. auto B1 = getBuffer(1);
  56. auto *RawB1 = B1.get();
  57. Cache.addBuffer("1", std::move(B1));
  58. ASSERT_FALSE(Cache.isBufferFinal("1"));
  59. // Finalize it.
  60. Cache.finalizeCurrentBuffers();
  61. EXPECT_TRUE(Cache.isBufferFinal("1"));
  62. EXPECT_TRUE(Cache.tryToRemoveBuffer("1"));
  63. EXPECT_EQ(RawB1, Cache.lookupBuffer("1"));
  64. EXPECT_TRUE(Cache.isBufferFinal("1"));
  65. // Repeat.
  66. auto B2 = getBuffer(2);
  67. auto *RawB2 = B2.get();
  68. Cache.addBuffer("2", std::move(B2));
  69. EXPECT_FALSE(Cache.isBufferFinal("2"));
  70. Cache.finalizeCurrentBuffers();
  71. EXPECT_TRUE(Cache.isBufferFinal("1"));
  72. EXPECT_TRUE(Cache.isBufferFinal("2"));
  73. EXPECT_TRUE(Cache.tryToRemoveBuffer("1"));
  74. EXPECT_TRUE(Cache.tryToRemoveBuffer("2"));
  75. EXPECT_EQ(RawB1, Cache.lookupBuffer("1"));
  76. EXPECT_EQ(RawB2, Cache.lookupBuffer("2"));
  77. EXPECT_TRUE(Cache.isBufferFinal("1"));
  78. EXPECT_TRUE(Cache.isBufferFinal("2"));
  79. }
  80. } // namespace