From 8bd9eb3f16621ae900b974845806b12262884466 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Sun, 17 Jul 2022 12:46:16 +0100 Subject: [PATCH] Java unique_ptr test ownership enhancement to test Make sure the object is owned before releasing ownership and passing ownership to unique_ptr instance. --- Examples/test-suite/cpp11_std_unique_ptr.i | 4 ++++ .../java/cpp11_std_unique_ptr_runme.java | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/Examples/test-suite/cpp11_std_unique_ptr.i b/Examples/test-suite/cpp11_std_unique_ptr.i index fd0e8e942..c96047f64 100644 --- a/Examples/test-suite/cpp11_std_unique_ptr.i +++ b/Examples/test-suite/cpp11_std_unique_ptr.i @@ -63,6 +63,10 @@ bool is_nullptr(Klass *p) { return p == nullptr; } +Klass *get_not_owned_ptr(Klass *p) { + return p; +} + std::unique_ptr makeKlassUniquePtr(const char* label) { return std::unique_ptr(new Klass(label)); } diff --git a/Examples/test-suite/java/cpp11_std_unique_ptr_runme.java b/Examples/test-suite/java/cpp11_std_unique_ptr_runme.java index 4ac72d720..14c117206 100644 --- a/Examples/test-suite/java/cpp11_std_unique_ptr_runme.java +++ b/Examples/test-suite/java/cpp11_std_unique_ptr_runme.java @@ -63,6 +63,21 @@ public class cpp11_std_unique_ptr_runme { checkCount(0); } + { + Klass kin = new Klass("KlassInput"); + boolean exception_thrown = false; + try { + Klass notowned = cpp11_std_unique_ptr.get_not_owned_ptr(kin); + cpp11_std_unique_ptr.takeKlassUniquePtr(notowned); + } catch (RuntimeException e) { + exception_thrown = true; + } + if (!exception_thrown) + throw new RuntimeException("Should have thrown 'Cannot release ownership as memory is not owned' error"); + kin.delete(); + checkCount(0); + } + { KlassInheritance kini = new KlassInheritance("KlassInheritanceInput"); checkCount(1);