Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
4847c4f
Added CI for webassembly
cschreib Nov 6, 2021
d04d2fb
Fixed WebAssembly CI script
cschreib Nov 6, 2021
455fae0
Upgrade Catch2 to latest master to fix Wasm tests
cschreib Nov 6, 2021
75f12b1
Updated readme to list supported platforms
cschreib Nov 6, 2021
3779a88
Added output on failure
cschreib Nov 6, 2021
6e3f259
Enable empty Deleter optimisation in C++17
cschreib Nov 6, 2021
8e0f6c3
Added size tests and benchmarks
cschreib Nov 6, 2021
ff4e0a8
Include better instructions for use with CMake
cschreib Nov 6, 2021
71a4859
Added comparison spreadsheet
cschreib Nov 6, 2021
9a59b98
Fixed cross appearance in spreadsheet
cschreib Nov 6, 2021
ca319fe
Reshuffle table for clarity
cschreib Nov 6, 2021
cc17dd2
Fixed Wasm labelled as 64bit in CI
cschreib Nov 6, 2021
63a4b3a
Fixed observer pointer not assignable from owner with deleter, and
cschreib Nov 6, 2021
2cff6b7
Enhance release test with and without observer
cschreib Nov 6, 2021
feea2b6
Add debug and release to build matrix
cschreib Nov 6, 2021
fb1ddc3
Add platform macros
cschreib Nov 6, 2021
1f767f4
Overload new and new[]
cschreib Nov 6, 2021
23a8237
Fixed no memory leak run
cschreib Nov 6, 2021
bb4de1c
Fixed typo in test name
cschreib Nov 6, 2021
2d751cf
Do not allocate control block if input pointer is null
cschreib Nov 6, 2021
f7c9b40
Added tests for acquiring constructor with input null pointer
cschreib Nov 6, 2021
db31147
Added compilation test for assigning raw pointer to observer
cschreib Nov 6, 2021
3d50b40
Added observable_sealed_ptr to fix release() dangling control block
cschreib Nov 7, 2021
e10016e
Added more compile-time tests
cschreib Nov 7, 2021
2c475a6
Fix documentation
cschreib Nov 7, 2021
eff2c71
Fixed typo in comparison spreadsheet
cschreib Nov 7, 2021
d7f146d
Added custom deleter in comparison spreadsheet
cschreib Nov 7, 2021
fb1d526
Added speed benchmark
cschreib Nov 7, 2021
d8c7e3f
Improve benchmark
cschreib Nov 7, 2021
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Enhance release test with and without observer
  • Loading branch information
cschreib committed Nov 6, 2021
commit 2cff6b7c20a6d25e183ae616c2afc30ea78027d5
57 changes: 57 additions & 0 deletions tests/runtime_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -818,6 +818,23 @@ TEST_CASE("owner operator bool invalid", "[owner_utility]") {
TEST_CASE("owner release valid", "[owner_utility]") {
memory_tracker mem_track;

{
test_ptr ptr(new test_object);
test_object* ptr_raw = ptr.release();
REQUIRE(ptr_raw != nullptr);
REQUIRE(ptr.get() == nullptr);
REQUIRE(instances == 1);
delete ptr_raw;
}

REQUIRE(instances == 0);
REQUIRE(mem_track.leaks() == 0u);
REQUIRE(mem_track.double_del() == 0u);
}

TEST_CASE("owner release valid with observer", "[owner_utility]") {
memory_tracker mem_track;

{
test_optr optr;
{
Expand All @@ -841,6 +858,23 @@ TEST_CASE("owner release valid", "[owner_utility]") {
TEST_CASE("owner release valid from make_observable_unique", "[owner_utility]") {
memory_tracker mem_track;

{
test_ptr ptr = oup::make_observable_unique<test_object>();
test_object* ptr_raw = ptr.release();
REQUIRE(ptr_raw != nullptr);
REQUIRE(ptr.get() == nullptr);
REQUIRE(instances == 1);
delete ptr_raw;
}

REQUIRE(instances == 0);
REQUIRE(mem_track.leaks() == 0u);
REQUIRE(mem_track.double_del() == 0u);
}

TEST_CASE("owner release valid from make_observable_unique with obsever", "[owner_utility]") {
memory_tracker mem_track;

{
test_optr optr;
{
Expand All @@ -864,10 +898,31 @@ TEST_CASE("owner release valid from make_observable_unique", "[owner_utility]")
TEST_CASE("owner release valid with deleter", "[owner_utility]") {
memory_tracker mem_track;

{
test_ptr_with_deleter ptr(new test_object, test_deleter{42});
test_object* ptr_raw = ptr.release();
REQUIRE(ptr_raw != nullptr);
REQUIRE(ptr.get() == nullptr);
REQUIRE(instances == 1);
REQUIRE(instances_deleter == 1);
REQUIRE(ptr.get_deleter().state_ == 42);
delete ptr_raw;
}

REQUIRE(instances == 0);
REQUIRE(instances_deleter == 0);
REQUIRE(mem_track.leaks() == 0u);
REQUIRE(mem_track.double_del() == 0u);
}

TEST_CASE("owner release valid with deleter with observer", "[owner_utility]") {
memory_tracker mem_track;

{
test_optr optr;
{
test_ptr_with_deleter ptr(new test_object, test_deleter{42});
optr = ptr;
test_object* ptr_raw = ptr.release();
REQUIRE(ptr_raw != nullptr);
REQUIRE(ptr.get() == nullptr);
Expand Down Expand Up @@ -1010,6 +1065,8 @@ TEST_CASE("observer move constructor", "[observer_construction]") {
REQUIRE(instances == 1);
REQUIRE(ptr.get() != nullptr);
REQUIRE(ptr.expired() == false);
REQUIRE(ptr_orig.get() == nullptr);
REQUIRE(ptr_orig.expired() == true);
}

REQUIRE(instances == 1);
Expand Down