From 0cbfd44bd3dce9bc796e851237c5646336eee4d1 Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Tue, 8 Jul 2014 21:33:47 -0700 Subject: ART: Add simple tests for inlining of CAS Add simple test cases for the inlining of CAS in the quick compiler to run-test 082. The tests are not multi-threaded and will just establish that the baseline behavior is correct. For extensive evaluation consider tests available in libcore. Change-Id: I9f463599e48ab7abc725769dda84758c9c6a76c2 --- test/082-inline-execute/src/Main.java | 57 +++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'test/082-inline-execute/src/Main.java') diff --git a/test/082-inline-execute/src/Main.java b/test/082-inline-execute/src/Main.java index 2e1c6d9a76..f412034de2 100644 --- a/test/082-inline-execute/src/Main.java +++ b/test/082-inline-execute/src/Main.java @@ -61,6 +61,9 @@ public class Main { test_Memory_pokeShort(); test_Memory_pokeInt(); test_Memory_pokeLong(); + test_AtomicBoolean_compareAndSet(); + test_AtomicInteger_compareAndSet(); + test_AtomicLong_compareAndSet(); } /* @@ -93,6 +96,60 @@ public class Main { Assert.assertNotNull(Thread.currentThread()); } + /** + * Will test inlining CAS, by inclusion of AtomicBoolean in core.oat. + */ + public static void test_AtomicBoolean_compareAndSet() { + java.util.concurrent.atomic.AtomicBoolean ab = new java.util.concurrent.atomic.AtomicBoolean(); + Assert.assertEquals(ab.compareAndSet(false, false), true); + Assert.assertEquals(ab.compareAndSet(true, false), false); + Assert.assertEquals(ab.compareAndSet(true, true), false); + Assert.assertEquals(ab.compareAndSet(false, true), true); + Assert.assertEquals(ab.compareAndSet(false, true), false); + Assert.assertEquals(ab.compareAndSet(false, false), false); + Assert.assertEquals(ab.compareAndSet(true, true), true); + Assert.assertEquals(ab.compareAndSet(true, false), true); + Assert.assertEquals(ab.compareAndSet(true, false), false); + Assert.assertEquals(ab.compareAndSet(true, true), false); + Assert.assertEquals(ab.compareAndSet(false, false), true); + } + + /** + * Will test inlining CAS, by inclusion of AtomicInteger in core.oat. + */ + public static void test_AtomicInteger_compareAndSet() { + java.util.concurrent.atomic.AtomicInteger ab = new java.util.concurrent.atomic.AtomicInteger(); + Assert.assertEquals(ab.compareAndSet(0, 0), true); + Assert.assertEquals(ab.compareAndSet(0x12345678, 0), false); + Assert.assertEquals(ab.compareAndSet(0x12345678, 0x12345678), false); + Assert.assertEquals(ab.compareAndSet(0, 0x12345678), true); + Assert.assertEquals(ab.compareAndSet(0, 0x12345678), false); + Assert.assertEquals(ab.compareAndSet(0, 0), false); + Assert.assertEquals(ab.compareAndSet(0x12345678, 0x12345678), true); + Assert.assertEquals(ab.compareAndSet(0x12345678, 0), true); + Assert.assertEquals(ab.compareAndSet(0x12345678, 0), false); + Assert.assertEquals(ab.compareAndSet(0x12345678, 0x12345678), false); + Assert.assertEquals(ab.compareAndSet(0, 0), true); + } + + /** + * Will test inlining CAS, by inclusion of AtomicLong in core.oat. + */ + public static void test_AtomicLong_compareAndSet() { + java.util.concurrent.atomic.AtomicLong ab = new java.util.concurrent.atomic.AtomicLong(); + Assert.assertEquals(ab.compareAndSet(0l, 0l), true); + Assert.assertEquals(ab.compareAndSet(0x1234567890l, 0l), false); + Assert.assertEquals(ab.compareAndSet(0x1234567890l, 0x1234567890l), false); + Assert.assertEquals(ab.compareAndSet(0l, 0x1234567890l), true); + Assert.assertEquals(ab.compareAndSet(0l, 0x1234567890l), false); + Assert.assertEquals(ab.compareAndSet(0l, 0l), false); + Assert.assertEquals(ab.compareAndSet(0x1234567890l, 0x1234567890l), true); + Assert.assertEquals(ab.compareAndSet(0x1234567890l, 0l), true); + Assert.assertEquals(ab.compareAndSet(0x1234567890l, 0l), false); + Assert.assertEquals(ab.compareAndSet(0x1234567890l, 0x1234567890l), false); + Assert.assertEquals(ab.compareAndSet(0l, 0l), true); + } + public static void test_String_length() { String str0 = ""; String str1 = "x"; -- cgit v1.2.3-59-g8ed1b