// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. #include "platform/atomic.h" #include "platform/assert.h" #include "platform/utils.h" #include "vm/globals.h" #include "vm/unit_test.h" namespace dart { VM_UNIT_TEST_CASE(FetchAndIncrement) { uintptr_t v = 42; EXPECT_EQ(static_cast(42), AtomicOperations::FetchAndIncrement(&v)); EXPECT_EQ(static_cast(43), v); } VM_UNIT_TEST_CASE(FetchAndDecrement) { uintptr_t v = 42; EXPECT_EQ(static_cast(42), AtomicOperations::FetchAndDecrement(&v)); EXPECT_EQ(static_cast(41), v); } VM_UNIT_TEST_CASE(FetchAndIncrementSigned) { intptr_t v = -42; EXPECT_EQ(static_cast(-42), AtomicOperations::FetchAndIncrement(&v)); EXPECT_EQ(static_cast(-41), v); } VM_UNIT_TEST_CASE(FetchAndDecrementSigned) { intptr_t v = -42; EXPECT_EQ(static_cast(-42), AtomicOperations::FetchAndDecrement(&v)); EXPECT_EQ(static_cast(-43), v); } VM_UNIT_TEST_CASE(IncrementBy) { intptr_t v = 42; AtomicOperations::IncrementBy(&v, 100); EXPECT_EQ(static_cast(142), v); } VM_UNIT_TEST_CASE(DecrementBy) { intptr_t v = 42; AtomicOperations::DecrementBy(&v, 41); EXPECT_EQ(static_cast(1), v); } VM_UNIT_TEST_CASE(FetchOrRelaxed) { uint32_t v = 42; uint32_t previous = AtomicOperations::FetchOrRelaxedUint32(&v, 3); EXPECT_EQ(static_cast(42), previous); EXPECT_EQ(static_cast(43), v); } VM_UNIT_TEST_CASE(FetchAndRelaxed) { uint32_t v = 42; uint32_t previous = AtomicOperations::FetchAndRelaxedUint32(&v, 3); EXPECT_EQ(static_cast(42), previous); EXPECT_EQ(static_cast(2), v); } VM_UNIT_TEST_CASE(LoadRelaxed) { uword v = 42; EXPECT_EQ(static_cast(42), AtomicOperations::LoadRelaxed(&v)); } TEST_CASE(CompareAndSwapWord) { uword old_value = 42; uword new_value = 100; uword result = AtomicOperations::CompareAndSwapWord(&old_value, old_value, new_value); EXPECT_EQ(static_cast(42), result); } TEST_CASE(CompareAndSwapUint32) { uint32_t old_value = 42; uint32_t new_value = 100; uint32_t result = AtomicOperations::CompareAndSwapUint32(&old_value, old_value, new_value); EXPECT_EQ(static_cast(42), result); } } // namespace dart