aboutsummaryrefslogtreecommitdiff
path: root/Examples/test-suite/schemerunme/li_std_auto_ptr.scm
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/schemerunme/li_std_auto_ptr.scm')
-rw-r--r--Examples/test-suite/schemerunme/li_std_auto_ptr.scm95
1 files changed, 95 insertions, 0 deletions
diff --git a/Examples/test-suite/schemerunme/li_std_auto_ptr.scm b/Examples/test-suite/schemerunme/li_std_auto_ptr.scm
new file mode 100644
index 000000000..3ccd83fdb
--- /dev/null
+++ b/Examples/test-suite/schemerunme/li_std_auto_ptr.scm
@@ -0,0 +1,95 @@
+(define checkCount
+ (lambda (expected-count)
+ (define actual-count (Klass-getTotal-count))
+ (unless (= actual-count expected-count) (error (format "Counts incorrect, expected:~a actual:~a" expected-count actual-count)))))
+
+; Test raw pointer handling involving virtual inheritance
+(define kini (new-KlassInheritance "KlassInheritanceInput"))
+(checkCount 1)
+(define s (useKlassRawPtr kini))
+(unless (string=? s "KlassInheritanceInput")
+ (error "Incorrect string: " s))
+(set! kini '()) (gc)
+(checkCount 0)
+
+; auto_ptr as input
+(define kin (new-Klass "KlassInput"))
+(checkCount 1)
+(define s (takeKlassAutoPtr kin))
+(checkCount 0)
+(unless (string=? s "KlassInput")
+ (error "Incorrect string: " s))
+(unless (is-nullptr kin)
+ (error "is_nullptr failed"))
+(set! kini '()) (gc) ; Should not fail, even though already deleted
+(checkCount 0)
+
+(define kin (new-Klass "KlassInput"))
+(checkCount 1)
+(define s (takeKlassAutoPtr kin))
+(checkCount 0)
+(unless (string=? s "KlassInput")
+ (error "Incorrect string: " s))
+(unless (is-nullptr kin)
+ (error "is_nullptr failed"))
+(expect-throw 'misc-error
+ (takeKlassAutoPtr kin))
+; TODO: check the exception message
+(set! kin '()) (gc) ; Should not fail, even though already deleted
+(checkCount 0)
+
+(define kin (new-Klass "KlassInput"))
+(define notowned (get-not-owned-ptr kin))
+(expect-throw 'misc-error
+ (takeKlassAutoPtr notowned))
+; TODO: check the exception message
+(checkCount 1)
+(set! kin '()) (gc)
+(checkCount 0)
+
+(define kini (new-KlassInheritance "KlassInheritanceInput"))
+(checkCount 1)
+(define s (takeKlassAutoPtr kini))
+(checkCount 0)
+(unless (string=? s "KlassInheritanceInput")
+ (error "Incorrect string: " s))
+(unless (is-nullptr kini)
+ (error "is_nullptr failed"))
+(set! kini '()) (gc) ; Should not fail, even though already deleted
+(checkCount 0)
+
+(define null '())
+(takeKlassAutoPtr null)
+(define nullnil #nil)
+(takeKlassAutoPtr nullnil)
+(takeKlassAutoPtr (make-null))
+(checkCount 0)
+
+; overloaded parameters
+(unless (= (overloadTest) 0)
+ (error "overloadTest failed"))
+(unless (= (overloadTest nullnil) 1)
+ (error "overloadTest failed"))
+(unless (= (overloadTest (new-Klass "over")) 1)
+ (error "overloadTest failed"))
+(checkCount 0)
+
+
+; auto_ptr as output
+(define k1 (makeKlassAutoPtr "first"))
+(define k2 (makeKlassAutoPtr "second"))
+(checkCount 2)
+
+(set! k1 '()) (gc)
+(checkCount 1)
+
+(unless (string=? (Klass-getLabel k2) "second")
+ (error "wrong object label" ))
+
+(set! k2 '()) (gc)
+(checkCount 0)
+
+(unless (null? (makeNullAutoPtr))
+ (error "null failure"))
+
+(exit 0)