diff --git a/tests/test/tatomic9.pp b/tests/test/tatomic9.pp new file mode 100644 index 0000000000..3033563f72 --- /dev/null +++ b/tests/test/tatomic9.pp @@ -0,0 +1,46 @@ +{ %NORUN } + +program tatomic9; + +{$mode objfpc} + +generic procedure TestInc(var aArg: T); +begin + AtomicIncrement(aArg); +end; + +generic procedure TestAdd(var aArg1: T; aArg2: T); +begin + AtomicIncrement(aArg1, aArg2); +end; + +generic procedure TestXchg(var aArg1: T; aArg2: T); +begin + AtomicExchange(aArg1, aArg2); +end; + +generic procedure TestCmpXchg(var aArg1: T; aArg2, aArg3: T); +begin + AtomicCmpExchange(aArg1, aArg2, aArg3); +end; + +generic procedure TestCmpXchg(var aArg1: T; aArg2, aArg3: T; out aArg4: U); +begin + AtomicCmpExchange(aArg1, aArg2, aArg3, aArg4); +end; + +var + l: LongInt; + b: Boolean; + b32: Boolean32; + lb: LongBool; +begin + l := 0; + specialize TestInc(l); + specialize TestAdd(l, 42); + specialize TestXchg(l, 21); + specialize TestCmpXchg(l, 21, 84); + specialize TestCmpXchg(l, 84, 42, b); + specialize TestCmpXchg(l, 84, 42, b32); + specialize TestCmpXchg(l, 84, 42, lb); +end.