@@ -928,7 +928,7 @@ test_atomic_uint32(void)
928
928
if (pg_atomic_read_u32 (& var ) != 3 )
929
929
elog (ERROR , "atomic_read_u32() #2 wrong" );
930
930
931
- if (pg_atomic_fetch_add_u32 (& var , 1 ) != 3 )
931
+ if (pg_atomic_fetch_add_u32 (& var , pg_atomic_read_u32 ( & var ) - 2 ) != 3 )
932
932
elog (ERROR , "atomic_fetch_add_u32() #1 wrong" );
933
933
934
934
if (pg_atomic_fetch_sub_u32 (& var , 1 ) != 4 )
@@ -953,6 +953,20 @@ test_atomic_uint32(void)
953
953
if (pg_atomic_fetch_add_u32 (& var , INT_MAX ) != INT_MAX )
954
954
elog (ERROR , "pg_atomic_add_fetch_u32() #3 wrong" );
955
955
956
+ pg_atomic_fetch_add_u32 (& var , 2 ); /* wrap to 0 */
957
+
958
+ if (pg_atomic_fetch_add_u32 (& var , PG_INT16_MAX ) != 0 )
959
+ elog (ERROR , "pg_atomic_fetch_add_u32() #3 wrong" );
960
+
961
+ if (pg_atomic_fetch_add_u32 (& var , PG_INT16_MAX + 1 ) != PG_INT16_MAX )
962
+ elog (ERROR , "pg_atomic_fetch_add_u32() #4 wrong" );
963
+
964
+ if (pg_atomic_fetch_add_u32 (& var , PG_INT16_MIN ) != 2 * PG_INT16_MAX + 1 )
965
+ elog (ERROR , "pg_atomic_fetch_add_u32() #5 wrong" );
966
+
967
+ if (pg_atomic_fetch_add_u32 (& var , PG_INT16_MIN - 1 ) != PG_INT16_MAX )
968
+ elog (ERROR , "pg_atomic_fetch_add_u32() #6 wrong" );
969
+
956
970
pg_atomic_fetch_add_u32 (& var , 1 ); /* top up to UINT_MAX */
957
971
958
972
if (pg_atomic_read_u32 (& var ) != UINT_MAX )
@@ -1028,7 +1042,7 @@ test_atomic_uint64(void)
1028
1042
if (pg_atomic_read_u64 (& var ) != 3 )
1029
1043
elog (ERROR , "atomic_read_u64() #2 wrong" );
1030
1044
1031
- if (pg_atomic_fetch_add_u64 (& var , 1 ) != 3 )
1045
+ if (pg_atomic_fetch_add_u64 (& var , pg_atomic_read_u64 ( & var ) - 2 ) != 3 )
1032
1046
elog (ERROR , "atomic_fetch_add_u64() #1 wrong" );
1033
1047
1034
1048
if (pg_atomic_fetch_sub_u64 (& var , 1 ) != 4 )
0 commit comments