resource.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include <gtest/gtest.h>
  2. #include <entt/resource/cache.hpp>
  3. struct Resource { const int value; };
  4. struct Loader: entt::ResourceLoader<Loader, Resource> {
  5. std::shared_ptr<Resource> load(int value) const {
  6. return std::shared_ptr<Resource>(new Resource{ value });
  7. }
  8. };
  9. struct BrokenLoader: entt::ResourceLoader<BrokenLoader, Resource> {
  10. std::shared_ptr<Resource> load(int) const {
  11. return nullptr;
  12. }
  13. };
  14. TEST(ResourceCache, Functionalities) {
  15. entt::ResourceCache<Resource> cache;
  16. constexpr auto hs1 = entt::HashedString{"res1"};
  17. constexpr auto hs2 = entt::HashedString{"res2"};
  18. ASSERT_EQ(cache.size(), entt::ResourceCache<Resource>::size_type{});
  19. ASSERT_TRUE(cache.empty());
  20. ASSERT_FALSE(cache.contains(hs1));
  21. ASSERT_FALSE(cache.contains(hs2));
  22. ASSERT_FALSE(cache.load<BrokenLoader>(hs1, 42));
  23. ASSERT_EQ(cache.size(), entt::ResourceCache<Resource>::size_type{});
  24. ASSERT_TRUE(cache.empty());
  25. ASSERT_FALSE(cache.contains(hs1));
  26. ASSERT_FALSE(cache.contains(hs2));
  27. ASSERT_TRUE(cache.load<Loader>(hs1, 42));
  28. ASSERT_NE(cache.size(), entt::ResourceCache<Resource>::size_type{});
  29. ASSERT_FALSE(cache.empty());
  30. ASSERT_TRUE(cache.contains(hs1));
  31. ASSERT_FALSE(cache.contains(hs2));
  32. ASSERT_EQ((*cache.handle(hs1)).value, 42);
  33. ASSERT_TRUE(cache.load<Loader>(hs2, 42));
  34. ASSERT_NE(cache.size(), entt::ResourceCache<Resource>::size_type{});
  35. ASSERT_FALSE(cache.empty());
  36. ASSERT_TRUE(cache.contains(hs1));
  37. ASSERT_TRUE(cache.contains(hs2));
  38. ASSERT_EQ((*cache.handle(hs1)).value, 42);
  39. ASSERT_EQ(cache.handle(hs2)->value, 42);
  40. ASSERT_NO_THROW(cache.discard(hs1));
  41. ASSERT_FALSE(cache.contains(hs1));
  42. ASSERT_TRUE(cache.contains(hs2));
  43. ASSERT_EQ(cache.handle(hs2)->value, 42);
  44. ASSERT_TRUE(cache.load<Loader>(hs1, 42));
  45. ASSERT_NO_THROW(cache.clear());
  46. ASSERT_EQ(cache.size(), entt::ResourceCache<Resource>::size_type{});
  47. ASSERT_TRUE(cache.empty());
  48. ASSERT_FALSE(cache.contains(hs1));
  49. ASSERT_FALSE(cache.contains(hs2));
  50. ASSERT_TRUE(cache.load<Loader>(hs1, 42));
  51. ASSERT_NE(cache.size(), entt::ResourceCache<Resource>::size_type{});
  52. ASSERT_FALSE(cache.empty());
  53. ASSERT_TRUE(cache.handle(hs1));
  54. ASSERT_FALSE(cache.handle(hs2));
  55. ASSERT_TRUE(cache.handle(hs1));
  56. ASSERT_EQ(&cache.handle(hs1).get(), &static_cast<const Resource &>(cache.handle(hs1)));
  57. ASSERT_NO_THROW(cache.clear());
  58. ASSERT_EQ(cache.size(), entt::ResourceCache<Resource>::size_type{});
  59. ASSERT_TRUE(cache.empty());
  60. ASSERT_TRUE(cache.temp<Loader>(42));
  61. ASSERT_TRUE(cache.empty());
  62. }