from cpp11_rvalue_reference_move import * # Function containing rvalue reference parameter Counter.reset_counts() mo = MovableCopyable(222) Counter.check_counts(1, 0, 0, 0, 0, 0) MovableCopyable.movein(mo) Counter.check_counts(1, 0, 0, 1, 0, 2) if not MovableCopyable.is_nullptr(mo): raise RuntimeError("is_nullptr check") del mo Counter.check_counts(1, 0, 0, 1, 0, 2) # Move constructor test Counter.reset_counts() mo = MovableCopyable(222) Counter.check_counts(1, 0, 0, 0, 0, 0) mo_moved = MovableCopyable(mo) Counter.check_counts(1, 0, 0, 1, 0, 1) if not MovableCopyable.is_nullptr(mo): raise RuntimeError("is_nullptr check") del mo Counter.check_counts(1, 0, 0, 1, 0, 1) del mo_moved Counter.check_counts(1, 0, 0, 1, 0, 2) # Move assignment operator test Counter.reset_counts() mo111 = MovableCopyable(111) mo222 = MovableCopyable(222) Counter.check_counts(2, 0, 0, 0, 0, 0) mo111.MoveAssign(mo222) Counter.check_counts(2, 0, 0, 0, 1, 1) if not MovableCopyable.is_nullptr(mo222): raise RuntimeError("is_nullptr check") del mo222 Counter.check_counts(2, 0, 0, 0, 1, 1) del mo111 Counter.check_counts(2, 0, 0, 0, 1, 2) # null check Counter.reset_counts() exception_thrown = False try: MovableCopyable.movein(None) except ValueError as e: if "invalid null reference" not in str(e): raise RuntimeError("incorrect exception message:" + str(e)) exception_thrown = True if not exception_thrown: raise RuntimeError("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) except RuntimeError as e: if "cannot release ownership as memory is not owned" not in str(e): raise RuntimeError("incorrect exception message:" + str(e)) exception_thrown = True if not exception_thrown: raise RuntimeError("Should have thrown 'Cannot release ownership as memory is not owned' error") Counter.check_counts(2, 0, 0, 0, 1, 1)