(load-extension "cpp11_rvalue_reference_move.so") (require (lib "defmacro.ss")) ; Copied from ../schemerunme/cpp11_rvalue_reference_move.scm and modified for exceptions ; Function containing rvalue reference parameter (Counter-reset-counts) (define mo (new-MovableCopyable 222)) (Counter-check-counts 1 0 0 0 0 0) (MovableCopyable-movein mo) (Counter-check-counts 1 0 0 1 0 2) (unless (MovableCopyable-is-nullptr mo) (error "is_nullptr failed")) (delete-MovableCopyable mo) (Counter-check-counts 1 0 0 1 0 2) ; Move constructor test (Counter-reset-counts) (define mo (new-MovableCopyable 222)) (Counter-check-counts 1 0 0 0 0 0) (define mo_moved (new-MovableCopyable mo)) (Counter-check-counts 1 0 0 1 0 1) (unless (MovableCopyable-is-nullptr mo) (error "is_nullptr failed")) (delete-MovableCopyable mo) (Counter-check-counts 1 0 0 1 0 1) (delete-MovableCopyable mo_moved) (Counter-check-counts 1 0 0 1 0 2) ; Move assignment operator test (Counter-reset-counts) (define mo111 (new-MovableCopyable 111)) (define mo222 (new-MovableCopyable 222)) (Counter-check-counts 2 0 0 0 0 0) (MovableCopyable-MoveAssign mo111 mo222) (Counter-check-counts 2 0 0 0 1 1) (unless (MovableCopyable-is-nullptr mo222) (error "is_nullptr failed")) (delete-MovableCopyable mo222) (Counter-check-counts 2 0 0 0 1 1) (delete-MovableCopyable mo111) (Counter-check-counts 2 0 0 0 1 2) ; null check (Counter-reset-counts) (define exception_thrown "no exception thrown for kin") (with-handlers ([exn:fail? (lambda (exn) (set! exception_thrown (exn-message exn)))]) (MovableCopyable-movein '())) (unless (string=? exception_thrown "MovableCopyable-movein: swig-type-error (null reference)") (error (format "incorrect exception message: ~a" exception_thrown))) (Counter-check-counts 0 0 0 0 0 0) ; output (Counter-reset-counts) (define mc (MovableCopyable-moveout 1234)) (Counter-check-counts 2 0 0 0 1 1) (MovableCopyable-check-numbers-match mc 1234) (define exception_thrown "no exception thrown for kin") (with-handlers ([exn:fail? (lambda (exn) (set! exception_thrown (exn-message exn)))]) (MovableCopyable-movein mc)) (unless (string-contains? exception_thrown "cannot release ownership as memory is not owned") (error (format "incorrect exception message: ~a" exception_thrown))) (Counter-check-counts 2 0 0 0 1 1) (exit 0)