mirror of
				https://github.com/bblanchon/ArduinoJson.git
				synced 2025-11-04 08:31:36 +01:00 
			
		
		
		
	Because a slot id is smaller than a pointer, this change will ultimately allow reducing the slot size.
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// ArduinoJson - https://arduinojson.org
 | 
						|
// Copyright © 2014-2025, Benoit BLANCHON
 | 
						|
// MIT License
 | 
						|
 | 
						|
#include <ArduinoJson/Memory/ResourceManager.hpp>
 | 
						|
#include <ArduinoJson/Strings/StringAdapters.hpp>
 | 
						|
#include <catch.hpp>
 | 
						|
 | 
						|
#include "Allocators.hpp"
 | 
						|
 | 
						|
using namespace ArduinoJson::detail;
 | 
						|
 | 
						|
TEST_CASE("ResourceManager::saveStaticString() deduplicates strings") {
 | 
						|
  SpyingAllocator spy;
 | 
						|
  ResourceManager resources(&spy);
 | 
						|
 | 
						|
  auto str1 = "hello";
 | 
						|
  auto str2 = "world";
 | 
						|
 | 
						|
  auto id1 = resources.saveStaticString(str1);
 | 
						|
  auto id2 = resources.saveStaticString(str2);
 | 
						|
  REQUIRE(id1 != id2);
 | 
						|
 | 
						|
  auto id3 = resources.saveStaticString(str1);
 | 
						|
  REQUIRE(id1 == id3);
 | 
						|
 | 
						|
  resources.shrinkToFit();
 | 
						|
  REQUIRE(spy.log() ==
 | 
						|
          AllocatorLog{
 | 
						|
              Allocate(sizeofStaticStringPool()),
 | 
						|
              Reallocate(sizeofStaticStringPool(), sizeofStaticStringPool(2)),
 | 
						|
          });
 | 
						|
  REQUIRE(resources.overflowed() == false);
 | 
						|
}
 | 
						|
 | 
						|
TEST_CASE("ResourceManager::saveStaticString() when allocation fails") {
 | 
						|
  SpyingAllocator spy(FailingAllocator::instance());
 | 
						|
  ResourceManager resources(&spy);
 | 
						|
 | 
						|
  auto slotId = resources.saveStaticString("hello");
 | 
						|
 | 
						|
  REQUIRE(slotId == NULL_SLOT);
 | 
						|
  REQUIRE(resources.overflowed() == true);
 | 
						|
  REQUIRE(spy.log() == AllocatorLog{
 | 
						|
                           AllocateFail(sizeofStaticStringPool()),
 | 
						|
                       });
 | 
						|
}
 |