@@ -679,7 +679,7 @@ test_atomic_uint32(void)
679
679
if (pg_atomic_read_u32 (& var )!= 3 )
680
680
elog (ERROR ,"atomic_read_u32() #2 wrong" );
681
681
682
- if (pg_atomic_fetch_add_u32 (& var ,1 )!= 3 )
682
+ if (pg_atomic_fetch_add_u32 (& var ,pg_atomic_read_u32 ( & var ) - 2 )!= 3 )
683
683
elog (ERROR ,"atomic_fetch_add_u32() #1 wrong" );
684
684
685
685
if (pg_atomic_fetch_sub_u32 (& var ,1 )!= 4 )
@@ -704,6 +704,20 @@ test_atomic_uint32(void)
704
704
if (pg_atomic_fetch_add_u32 (& var ,INT_MAX )!= INT_MAX )
705
705
elog (ERROR ,"pg_atomic_add_fetch_u32() #3 wrong" );
706
706
707
+ pg_atomic_fetch_add_u32 (& var ,2 );/* wrap to 0 */
708
+
709
+ if (pg_atomic_fetch_add_u32 (& var ,PG_INT16_MAX )!= 0 )
710
+ elog (ERROR ,"pg_atomic_fetch_add_u32() #3 wrong" );
711
+
712
+ if (pg_atomic_fetch_add_u32 (& var ,PG_INT16_MAX + 1 )!= PG_INT16_MAX )
713
+ elog (ERROR ,"pg_atomic_fetch_add_u32() #4 wrong" );
714
+
715
+ if (pg_atomic_fetch_add_u32 (& var ,PG_INT16_MIN )!= 2 * PG_INT16_MAX + 1 )
716
+ elog (ERROR ,"pg_atomic_fetch_add_u32() #5 wrong" );
717
+
718
+ if (pg_atomic_fetch_add_u32 (& var ,PG_INT16_MIN - 1 )!= PG_INT16_MAX )
719
+ elog (ERROR ,"pg_atomic_fetch_add_u32() #6 wrong" );
720
+
707
721
pg_atomic_fetch_add_u32 (& var ,1 );/* top up to UINT_MAX */
708
722
709
723
if (pg_atomic_read_u32 (& var )!= UINT_MAX )
@@ -779,7 +793,7 @@ test_atomic_uint64(void)
779
793
if (pg_atomic_read_u64 (& var )!= 3 )
780
794
elog (ERROR ,"atomic_read_u64() #2 wrong" );
781
795
782
- if (pg_atomic_fetch_add_u64 (& var ,1 )!= 3 )
796
+ if (pg_atomic_fetch_add_u64 (& var ,pg_atomic_read_u64 ( & var ) - 2 )!= 3 )
783
797
elog (ERROR ,"atomic_fetch_add_u64() #1 wrong" );
784
798
785
799
if (pg_atomic_fetch_sub_u64 (& var ,1 )!= 4 )