1 module ut.core.atomic; 2 import numem.core.hooks; 3 4 @("load: i32") 5 unittest { 6 if (!nu_atomic_supported) 7 return; 8 9 uint value = 42; 10 assert(nu_atomic_load_32(value) == 42); 11 } 12 13 @("store: i32") 14 unittest { 15 if (!nu_atomic_supported) 16 return; 17 18 uint value = 128; 19 nu_atomic_store_32(value, 42); 20 assert(nu_atomic_load_32(value) == 42); 21 } 22 23 @("add: i32") 24 unittest { 25 if (!nu_atomic_supported) 26 return; 27 28 uint value = 41; 29 assert(nu_atomic_add_32(value, 1) == 41); 30 assert(nu_atomic_load_32(value) == 42); 31 } 32 33 @("sub: i32") 34 unittest { 35 if (!nu_atomic_supported) 36 return; 37 38 uint value = 42; 39 assert(nu_atomic_sub_32(value, 1) == 42); 40 assert(nu_atomic_load_32(value) == 41); 41 } 42 43 @("load: ptr") 44 unittest { 45 if (!nu_atomic_supported) 46 return; 47 48 size_t value = 42; 49 assert(cast(size_t)nu_atomic_load_ptr(cast(void**)&value) == 42); 50 } 51 52 @("store: ptr") 53 unittest { 54 if (!nu_atomic_supported) 55 return; 56 57 size_t value = 128; 58 nu_atomic_store_ptr(cast(void**)&value, cast(void*)42); 59 assert(cast(size_t)nu_atomic_load_ptr(cast(void**)&value) == 42); 60 } 61 62 @("cmpxhg: ptr") 63 unittest { 64 if (!nu_atomic_supported) 65 return; 66 67 size_t value = 128; 68 69 nu_atomic_cmpxhg_ptr(cast(void**)&value, cast(void*)128, cast(void*)42); 70 assert(cast(size_t)nu_atomic_load_ptr(cast(void**)&value) == 42); 71 } 72 73 shared static this() { 74 import std.stdio : writeln; 75 if (!nu_atomic_supported) { 76 writeln("Atomics are disabled, skipping tests..."); 77 } 78 }