| using System; | |
| using cpp11_rvalue_reference_moveNamespace; | |
| public class cpp11_rvalue_reference_move_runme { | |
| public static void Main() { | |
| { | |
| // Function containing rvalue reference parameter | |
| Counter.reset_counts(); | |
| MovableCopyable 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); | |
| if (!MovableCopyable.is_nullptr(mo)) | |
| throw new ApplicationException("is_nullptr failed"); | |
| mo.Dispose(); | |
| Counter.check_counts(1, 0, 0, 1, 0, 2); | |
| } | |
| { | |
| // Move constructor test | |
| Counter.reset_counts(); | |
| MovableCopyable mo = new MovableCopyable(222); | |
| Counter.check_counts(1, 0, 0, 0, 0, 0); | |
| MovableCopyable mo_moved = new MovableCopyable(mo); | |
| Counter.check_counts(1, 0, 0, 1, 0, 1); | |
| if (!MovableCopyable.is_nullptr(mo)) | |
| throw new ApplicationException("is_nullptr failed"); | |
| mo.Dispose(); | |
| Counter.check_counts(1, 0, 0, 1, 0, 1); | |
| mo_moved.Dispose(); | |
| Counter.check_counts(1, 0, 0, 1, 0, 2); | |
| } | |
| { | |
| // Move assignment operator test | |
| Counter.reset_counts(); | |
| MovableCopyable mo111 = new MovableCopyable(111); | |
| MovableCopyable mo222 = new MovableCopyable(222); | |
| Counter.check_counts(2, 0, 0, 0, 0, 0); | |
| mo111.MoveAssign(mo222); | |
| Counter.check_counts(2, 0, 0, 0, 1, 1); | |
| if (!MovableCopyable.is_nullptr(mo222)) | |
| throw new ApplicationException("is_nullptr failed"); | |
| mo222.Dispose(); | |
| Counter.check_counts(2, 0, 0, 0, 1, 1); | |
| mo111.Dispose(); | |
| Counter.check_counts(2, 0, 0, 0, 1, 2); | |
| } | |
| { | |
| // null check | |
| Counter.reset_counts(); | |
| bool exception_thrown = false; | |
| try { | |
| MovableCopyable.movein(null); | |
| } catch (ArgumentNullException e) { | |
| if (!e.Message.Contains("MovableCopyable && is null")) | |
| throw new ApplicationException("incorrect exception message:" + e); | |
| exception_thrown = true; | |
| } | |
| if (!exception_thrown) | |
| throw new ApplicationException("Should have thrown null error"); | |
| Counter.check_counts(0, 0, 0, 0, 0, 0); | |
| } | |
| { | |
| // output | |
| Counter.reset_counts(); | |
| MovableCopyable mc = MovableCopyable.moveout(1234); | |
| Counter.check_counts(2, 0, 0, 0, 1, 1); | |
| MovableCopyable.check_numbers_match(mc, 1234); | |
| bool exception_thrown = false; | |
| try { | |
| MovableCopyable.movein(mc); | |
| } catch (ApplicationException e) { | |
| if (!e.Message.Contains("Cannot release ownership as memory is not owned")) | |
| throw new ApplicationException("incorrect exception message"); | |
| exception_thrown = true; | |
| } | |
| if (!exception_thrown) | |
| throw new ApplicationException("Should have thrown 'Cannot release ownership as memory is not owned' error"); | |
| Counter.check_counts(2, 0, 0, 0, 1, 1); | |
| } | |
| } | |
| } |