Atomic.cpp 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <Tests/Framework/Framework.h>
  6. #include <AnKi/Util/Atomic.h>
  7. ANKI_TEST(Util, Atomic)
  8. {
  9. {
  10. Atomic<I32> a{MAX_I32};
  11. I32 b = MAX_I32;
  12. a.fetchAdd(1);
  13. ++b;
  14. ANKI_TEST_EXPECT_EQ(a.load(), b);
  15. }
  16. {
  17. Atomic<I32> a{MAX_I32};
  18. I32 b = MAX_I32;
  19. a.fetchAdd(-1);
  20. --b;
  21. ANKI_TEST_EXPECT_EQ(a.load(), b);
  22. }
  23. {
  24. Atomic<I32> a{MAX_I32};
  25. I32 b = MAX_I32;
  26. a.fetchSub(1);
  27. --b;
  28. ANKI_TEST_EXPECT_EQ(a.load(), b);
  29. }
  30. {
  31. Atomic<U32> a{3};
  32. a.fetchSub(1);
  33. ANKI_TEST_EXPECT_EQ(a.load(), 2);
  34. }
  35. {
  36. U32 u[2];
  37. Atomic<U32*> a{&u[0]};
  38. a.fetchAdd(1);
  39. ANKI_TEST_EXPECT_EQ(a.load(), &u[1]);
  40. }
  41. {
  42. U32 u[2];
  43. Atomic<U32*> a{&u[1]};
  44. a.fetchSub(1);
  45. ANKI_TEST_EXPECT_EQ(a.load(), &u[0]);
  46. }
  47. // Pointer of pointer
  48. {
  49. U32* pu = reinterpret_cast<U32*>(0xFFFAA);
  50. Atomic<U32**> a{&pu};
  51. a.fetchAdd(1);
  52. ANKI_TEST_EXPECT_EQ(a.load(), &pu + 1);
  53. }
  54. }