forked from bblanchon/ArduinoJson
Remove JsonDocument::garbageCollect()
This commit is contained in:
@ -23,3 +23,4 @@ HEAD
|
|||||||
* `JsonDocument`'s allocator is not monotonic anymore, removed values get recycled
|
* `JsonDocument`'s allocator is not monotonic anymore, removed values get recycled
|
||||||
* Show a link to the documentation when user passes an unsupported input type
|
* Show a link to the documentation when user passes an unsupported input type
|
||||||
* Remove `JsonDocument::memoryUsage()`
|
* Remove `JsonDocument::memoryUsage()`
|
||||||
|
* Remove `JsonDocument::garbageCollect()`
|
||||||
|
@ -11,7 +11,6 @@ add_executable(JsonDocumentTests
|
|||||||
containsKey.cpp
|
containsKey.cpp
|
||||||
createNested.cpp
|
createNested.cpp
|
||||||
ElementProxy.cpp
|
ElementProxy.cpp
|
||||||
garbageCollect.cpp
|
|
||||||
isNull.cpp
|
isNull.cpp
|
||||||
issue1120.cpp
|
issue1120.cpp
|
||||||
MemberProxy.cpp
|
MemberProxy.cpp
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright © 2014-2023, Benoit BLANCHON
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#include <ArduinoJson.h>
|
|
||||||
#include <stdlib.h> // malloc, free
|
|
||||||
#include <catch.hpp>
|
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
#include "Allocators.hpp"
|
|
||||||
|
|
||||||
using ArduinoJson::detail::sizeofObject;
|
|
||||||
using ArduinoJson::detail::sizeofString;
|
|
||||||
|
|
||||||
TEST_CASE("JsonDocument::garbageCollect()") {
|
|
||||||
ControllableAllocator controllableAllocator;
|
|
||||||
SpyingAllocator spyingAllocator(&controllableAllocator);
|
|
||||||
JsonDocument doc(&spyingAllocator);
|
|
||||||
|
|
||||||
SECTION("when allocation succeeds") {
|
|
||||||
deserializeJson(doc, "{\"blanket\":1,\"dancing\":2}");
|
|
||||||
doc.remove("blanket");
|
|
||||||
spyingAllocator.clearLog();
|
|
||||||
|
|
||||||
bool result = doc.garbageCollect();
|
|
||||||
|
|
||||||
REQUIRE(result == true);
|
|
||||||
REQUIRE(doc.as<std::string>() == "{\"dancing\":2}");
|
|
||||||
REQUIRE(spyingAllocator.log() ==
|
|
||||||
AllocatorLog() << AllocatorLog::Allocate(sizeofString(7))
|
|
||||||
<< AllocatorLog::Allocate(sizeofPool())
|
|
||||||
<< AllocatorLog::Deallocate(sizeofString(7))
|
|
||||||
<< AllocatorLog::Deallocate(sizeofPool()));
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("when allocation fails") {
|
|
||||||
deserializeJson(doc, "{\"blanket\":1,\"dancing\":2}");
|
|
||||||
doc.remove("blanket");
|
|
||||||
controllableAllocator.disable();
|
|
||||||
spyingAllocator.clearLog();
|
|
||||||
|
|
||||||
bool result = doc.garbageCollect();
|
|
||||||
|
|
||||||
REQUIRE(result == false);
|
|
||||||
REQUIRE(doc.as<std::string>() == "{\"dancing\":2}");
|
|
||||||
|
|
||||||
REQUIRE(spyingAllocator.log() ==
|
|
||||||
AllocatorLog() << AllocatorLog::AllocateFail(sizeofString(7)));
|
|
||||||
}
|
|
||||||
}
|
|
@ -80,11 +80,4 @@ TEST_CASE("JsonDocument::overflowed()") {
|
|||||||
doc.shrinkToFit();
|
doc.shrinkToFit();
|
||||||
CHECK(doc.overflowed() == true);
|
CHECK(doc.overflowed() == true);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("return false after garbageCollect()") {
|
|
||||||
allocator.setCountdown(0);
|
|
||||||
doc.add(0);
|
|
||||||
doc.garbageCollect();
|
|
||||||
CHECK(doc.overflowed() == false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -76,17 +76,6 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
|
|||||||
resources_.shrinkToFit();
|
resources_.shrinkToFit();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reclaims the memory leaked when removing and replacing values.
|
|
||||||
// https://arduinojson.org/v6/api/jsondocument/garbagecollect/
|
|
||||||
bool garbageCollect() {
|
|
||||||
// make a temporary clone and swap
|
|
||||||
JsonDocument tmp(*this);
|
|
||||||
if (tmp.overflowed())
|
|
||||||
return false;
|
|
||||||
swap(*this, tmp);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Casts the root to the specified type.
|
// Casts the root to the specified type.
|
||||||
// https://arduinojson.org/v6/api/jsondocument/as/
|
// https://arduinojson.org/v6/api/jsondocument/as/
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
Reference in New Issue
Block a user