MoveAssign($mo222); Counter::check_counts(2, 0, 0, 0, 1, 1); try { MovableCopyable::is_nullptr($mo222); check::fail("is_nullptr check"); } catch (TypeError $e) { } $mo222 = NULL; Counter::check_counts(2, 0, 0, 0, 1, 1); $mo111 = NULL; Counter::check_counts(2, 0, 0, 0, 1, 2); # null check Counter::reset_counts(); $exception_thrown = false; try { MovableCopyable::movein(NULL); } catch (TypeError $e) { check::str_contains($e->getMessage(), "Invalid null reference", "incorrect exception message: {$e->getMessage()}"); $exception_thrown = true; } check::equal($exception_thrown, true, "Should have thrown null error"); Counter::check_counts(0, 0, 0, 0, 0, 0); # output Counter::reset_counts(); $mc = MovableCopyable::moveout(1234); Counter::check_counts(2, 0, 0, 0, 1, 1); MovableCopyable::check_numbers_match($mc, 1234); $exception_thrown = false; try { MovableCopyable::movein($mc); } catch (TypeError $e) { check::str_contains($e->getMessage(), "Cannot release ownership as memory is not owned", "incorrect exception message: {$e->getMessage()}"); $exception_thrown = true; } check::equal($exception_thrown, true, "Should have thrown 'Cannot release ownership as memory is not owned' error"); Counter::check_counts(2, 0, 0, 0, 1, 1); check::done();