< prev index next >

src/share/vm/utilities/globalDefinitions.cpp

Print this page

        

@@ -355,10 +355,34 @@
 
     return size_t(result);
 }
 
 #ifndef PRODUCT
+struct T {
+    int val;
+    T(int a): val(a){}
+};
+
+int test_swap(){
+    T a(1), b(2);
+    int ia, ib;
+
+    swap(a, b);
+    assert(a.val == 2 && b.val == 1, "wrong result!");
+
+    T * pa = &a;
+    T * pb = &b;
+    swap(pa, pb);
+    assert(pa->val == 1 && pa == &b, "wrong result for pointer!");
+    assert(pb->val == 2 && pb == &a, "wrong result for pointer!");
+    assert(a.val == 2 && b.val == 1, "objects are corrupted");
+
+    ia = 1;
+    ib = 2;
+    swap(ia, ib);
+    assert(ia == 2 && ib == 1, "wrong result!");
+}
 
 void GlobalDefinitions::test_globals() {
   intptr_t page_sizes[] = { os::vm_page_size(), 4096, 8192, 65536, 2*1024*1024 };
   const int num_page_sizes = sizeof(page_sizes) / sizeof(page_sizes[0]);
 

@@ -380,10 +404,12 @@
     // Check that address below page returns start of page
     assert(clamp_address_in_page(a_page - 1, a_page, page_size) == a_page, "incorrect");
     assert(clamp_address_in_page(a_page - 2*page_size - 1, a_page, page_size) == a_page, "incorrect");
     assert(clamp_address_in_page(a_page - 5*page_size - 1, a_page, page_size) == a_page, "incorrect");
   }
+
+  test_swap();
 }
 
 #define EXPECT_EQ(expected, actual) \
         assert(expected == actual, "Test failed");
 #define EXPECT_STREQ(expected, actual) \
< prev index next >