diff options
author | Chris Manton <cmanton@google.com> | 2014-08-06 09:36:17 -0700 |
---|---|---|
committer | Andre Eisenbach <eisenbach@google.com> | 2015-03-16 16:51:28 -0700 |
commit | 97fd2c0c1b45f21015ff51f5185e3b47680fdd1f (patch) | |
tree | f8c403f2c220c35e92223af8204dbcda8286da11 | |
parent | db1fbb6e3cafe5e6abd7bf270b047936734f9488 (diff) | |
download | android_system_bt-97fd2c0c1b45f21015ff51f5185e3b47680fdd1f.tar.gz android_system_bt-97fd2c0c1b45f21015ff51f5185e3b47680fdd1f.tar.bz2 android_system_bt-97fd2c0c1b45f21015ff51f5185e3b47680fdd1f.zip |
Add 64 bit atomic types
-rw-r--r-- | osi/include/atomic.h | 2 | ||||
-rw-r--r-- | osi/test/atomic_test.cpp | 69 |
2 files changed, 71 insertions, 0 deletions
diff --git a/osi/include/atomic.h b/osi/include/atomic.h index 7cd72f498..171a5393f 100644 --- a/osi/include/atomic.h +++ b/osi/include/atomic.h @@ -97,3 +97,5 @@ inline type atomic_dec_postfix_##name(volatile atomic_##name##_t *atomic) { \ ATOMIC_MAKE(s32, int32_t, 4) ATOMIC_MAKE(u32, uint32_t, 4) +ATOMIC_MAKE(s64, int64_t, 8) +ATOMIC_MAKE(u64, uint64_t, 8) diff --git a/osi/test/atomic_test.cpp b/osi/test/atomic_test.cpp index 1d4601f74..bed4733e0 100644 --- a/osi/test/atomic_test.cpp +++ b/osi/test/atomic_test.cpp @@ -174,3 +174,72 @@ TEST(AtomicTest, test_atomic_inc_thread_single) { } EXPECT_EQ(0, data._val); } + +TEST(AtomicTest, test_store_load_s64) { + atomic_s64_t data; + + atomic_store_s64(&data, -1); + EXPECT_EQ(-1, atomic_load_s64(&data)); + + atomic_store_s64(&data, 0); + EXPECT_EQ(0, atomic_load_s64(&data)); + + atomic_store_s64(&data, 1); + EXPECT_EQ(1, atomic_load_s64(&data)); + + atomic_store_s64(&data, 2); + EXPECT_EQ(2, atomic_load_s64(&data)); +} + +TEST(AtomicTest, test_inc_dec_s64) { + atomic_s64_t data; + + atomic_store_s64(&data, 0); + EXPECT_EQ(0, atomic_load_s64(&data)); + + int64_t val = atomic_inc_prefix_s64(&data); + EXPECT_EQ(1, atomic_load_s64(&data)); + EXPECT_EQ(1, val); + + val = atomic_inc_prefix_s64(&data); + EXPECT_EQ(2, atomic_load_s64(&data)); + EXPECT_EQ(2, val); + + val = atomic_inc_prefix_s64(&data); + EXPECT_EQ(3, atomic_load_s64(&data)); + EXPECT_EQ(3, val); + + val = atomic_dec_prefix_s64(&data); + EXPECT_EQ(2, val); + + val = atomic_dec_prefix_s64(&data); + EXPECT_EQ(1, val); + val = atomic_dec_prefix_s64(&data); + EXPECT_EQ(0, val); + val = atomic_dec_prefix_s64(&data); + EXPECT_EQ(-1, val); + + // Mutating using postfix. + val = atomic_inc_postfix_s64(&data); + EXPECT_EQ(0, atomic_load_s64(&data)); + EXPECT_EQ(-1, val); + + val = atomic_inc_postfix_s64(&data); + EXPECT_EQ(1, atomic_load_s64(&data)); + EXPECT_EQ(0, val); + + val = atomic_inc_postfix_s64(&data); + EXPECT_EQ(2, atomic_load_s64(&data)); + EXPECT_EQ(1, val); + + val = atomic_dec_postfix_s64(&data); + EXPECT_EQ(2, val); + + val = atomic_dec_postfix_s64(&data); + EXPECT_EQ(1, val); + val = atomic_dec_postfix_s64(&data); + EXPECT_EQ(0, val); + val = atomic_dec_postfix_s64(&data); + EXPECT_EQ(-1, val); + EXPECT_EQ(-2, atomic_load_s64(&data)); +} |