You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

FieldModificationTest.java 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. /*
  2. * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  3. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4. *
  5. * This code is free software; you can redistribute it and/or modify it
  6. * under the terms of the GNU General Public License version 2 only, as
  7. * published by the Free Software Foundation.
  8. *
  9. * This code is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
  12. * version 2 for more details (a copy is included in the LICENSE file that
  13. * accompanied this code).
  14. *
  15. * You should have received a copy of the GNU General Public License version
  16. * 2 along with this work; if not, write to the Free Software Foundation,
  17. * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18. *
  19. * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20. * or visit www.oracle.com if you need additional information or have any
  21. * questions.
  22. *
  23. */
  24. package com.github.dcevm.test.fields;
  25. import org.junit.Before;
  26. import org.junit.Test;
  27. import static com.github.dcevm.test.util.HotSwapTestHelper.__toVersion__;
  28. import static com.github.dcevm.test.util.HotSwapTestHelper.__version__;
  29. import static org.junit.Assert.assertEquals;
  30. /**
  31. * @author Thomas Wuerthinger
  32. */
  33. public class FieldModificationTest {
  34. // Version 0
  35. public static class A {
  36. public int val0;
  37. public int val1;
  38. public int val2;
  39. public int val3;
  40. public int val4;
  41. public int val5;
  42. public int val6;
  43. public int val7;
  44. public void increaseAllByOne() {
  45. val0++;
  46. val1++;
  47. val2++;
  48. val3++;
  49. val4++;
  50. val5++;
  51. val6++;
  52. val7++;
  53. }
  54. public int sum() {
  55. return val0 + val1 + val2 + val3 + val4 + val5 + val6 + val7;
  56. }
  57. }
  58. // Version 1
  59. public static class A___1 {
  60. public int val0;
  61. public void increaseAllByOne() {
  62. val0++;
  63. }
  64. public int sum() {
  65. return val0;
  66. }
  67. }
  68. // Version 2
  69. public static class A___2 {
  70. public int val0;
  71. public int val1;
  72. public int val2;
  73. public int val3;
  74. public int val4;
  75. public int val5;
  76. public int val6;
  77. public int val7;
  78. public int val8;
  79. public int val9;
  80. public int val10;
  81. public int val11;
  82. public int val12;
  83. public int val13;
  84. public int val14;
  85. public int val15;
  86. public int sum() {
  87. return val0 + val1 + val2 + val3 + val4 + val5 + val6 + val7 + val8 + val9 + val10 + val11 + val12 + val13 + val14 + val15;
  88. }
  89. public void increaseAllByOne() {
  90. val0++;
  91. val1++;
  92. val2++;
  93. val3++;
  94. val4++;
  95. val5++;
  96. val6++;
  97. val7++;
  98. val8++;
  99. val9++;
  100. val10++;
  101. val11++;
  102. val12++;
  103. val13++;
  104. val14++;
  105. val15++;
  106. }
  107. }
  108. // Version 3
  109. public static class A___3 {
  110. public int val6;
  111. public int val0;
  112. public int val7;
  113. public int val1;
  114. public int val2;
  115. public int val5;
  116. public int val3;
  117. public int val4;
  118. }
  119. @Before
  120. public void setUp() throws Exception {
  121. __toVersion__(0);
  122. }
  123. @Test
  124. public void testReorder() {
  125. A a = new A();
  126. a.val0 = 0;
  127. a.val1 = 1;
  128. a.val2 = 2;
  129. a.val3 = 3;
  130. a.val4 = 4;
  131. a.val5 = 5;
  132. a.val6 = 6;
  133. a.val7 = 7;
  134. }
  135. @Test
  136. public void testIncreaseFirst() {
  137. A a = new A();
  138. a.val0 = 0;
  139. a.val1 = 1;
  140. a.val2 = 2;
  141. a.val3 = 3;
  142. a.val4 = 4;
  143. a.val5 = 5;
  144. a.val6 = 6;
  145. a.val7 = 7;
  146. assertEquals(0, a.val0);
  147. assertEquals(1, a.val1);
  148. assertEquals(2, a.val2);
  149. assertEquals(3, a.val3);
  150. assertEquals(4, a.val4);
  151. assertEquals(5, a.val5);
  152. assertEquals(6, a.val6);
  153. assertEquals(7, a.val7);
  154. assertEquals(0 + 1 + 2 + 3 + 4 + 5 + 6 + 7, a.sum());
  155. __toVersion__(2);
  156. assertEquals(0, a.val0);
  157. assertEquals(1, a.val1);
  158. assertEquals(2, a.val2);
  159. assertEquals(3, a.val3);
  160. assertEquals(4, a.val4);
  161. assertEquals(5, a.val5);
  162. assertEquals(6, a.val6);
  163. assertEquals(7, a.val7);
  164. assertEquals(0 + 1 + 2 + 3 + 4 + 5 + 6 + 7, a.sum());
  165. a.increaseAllByOne();
  166. assertEquals(0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 16, a.sum());
  167. __toVersion__(0);
  168. assertEquals(0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8, a.sum());
  169. assertEquals(1, a.val0);
  170. assertEquals(2, a.val1);
  171. assertEquals(3, a.val2);
  172. assertEquals(4, a.val3);
  173. assertEquals(5, a.val4);
  174. assertEquals(6, a.val5);
  175. assertEquals(7, a.val6);
  176. assertEquals(8, a.val7);
  177. __toVersion__(2);
  178. assertEquals(0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8, a.sum());
  179. assertEquals(1, a.val0);
  180. assertEquals(2, a.val1);
  181. assertEquals(3, a.val2);
  182. assertEquals(4, a.val3);
  183. assertEquals(5, a.val4);
  184. assertEquals(6, a.val5);
  185. assertEquals(7, a.val6);
  186. assertEquals(8, a.val7);
  187. a.increaseAllByOne();
  188. assertEquals(0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 16, a.sum());
  189. assertEquals(2, a.val0);
  190. assertEquals(3, a.val1);
  191. assertEquals(4, a.val2);
  192. assertEquals(5, a.val3);
  193. assertEquals(6, a.val4);
  194. assertEquals(7, a.val5);
  195. assertEquals(8, a.val6);
  196. assertEquals(9, a.val7);
  197. __toVersion__(0);
  198. assertEquals(0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 16, a.sum());
  199. assertEquals(2, a.val0);
  200. assertEquals(3, a.val1);
  201. assertEquals(4, a.val2);
  202. assertEquals(5, a.val3);
  203. assertEquals(6, a.val4);
  204. assertEquals(7, a.val5);
  205. assertEquals(8, a.val6);
  206. assertEquals(9, a.val7);
  207. }
  208. @Test
  209. public void testAddRemoveField() {
  210. assert __version__() == 0;
  211. A a = new A();
  212. assertEquals(0, a.val0);
  213. assertEquals(0, a.val1);
  214. __toVersion__(1);
  215. a.val0 = 1234;
  216. __toVersion__(0);
  217. assertEquals(1234, a.val0);
  218. assertEquals(0, a.val1);
  219. a.val1 = 1234;
  220. assertEquals(1234, a.val0);
  221. assertEquals(1234, a.val1);
  222. __toVersion__(1);
  223. assertEquals(1234, a.val0);
  224. __toVersion__(0);
  225. assertEquals(1234, a.val0);
  226. assertEquals(0, a.val1);
  227. }
  228. }