@@ -687,7 +687,7 @@ test_atomic_uint32(void)
687687if (pg_atomic_read_u32 (& var )!= 3 )
688688elog (ERROR ,"atomic_read_u32() #2 wrong" );
689689
690- if (pg_atomic_fetch_add_u32 (& var ,1 )!= 3 )
690+ if (pg_atomic_fetch_add_u32 (& var ,pg_atomic_read_u32 ( & var ) - 2 )!= 3 )
691691elog (ERROR ,"atomic_fetch_add_u32() #1 wrong" );
692692
693693if (pg_atomic_fetch_sub_u32 (& var ,1 )!= 4 )
@@ -712,6 +712,20 @@ test_atomic_uint32(void)
712712if (pg_atomic_fetch_add_u32 (& var ,INT_MAX )!= INT_MAX )
713713elog (ERROR ,"pg_atomic_add_fetch_u32() #3 wrong" );
714714
715+ pg_atomic_fetch_add_u32 (& var ,2 );/* wrap to 0 */
716+
717+ if (pg_atomic_fetch_add_u32 (& var ,PG_INT16_MAX )!= 0 )
718+ elog (ERROR ,"pg_atomic_fetch_add_u32() #3 wrong" );
719+
720+ if (pg_atomic_fetch_add_u32 (& var ,PG_INT16_MAX + 1 )!= PG_INT16_MAX )
721+ elog (ERROR ,"pg_atomic_fetch_add_u32() #4 wrong" );
722+
723+ if (pg_atomic_fetch_add_u32 (& var ,PG_INT16_MIN )!= 2 * PG_INT16_MAX + 1 )
724+ elog (ERROR ,"pg_atomic_fetch_add_u32() #5 wrong" );
725+
726+ if (pg_atomic_fetch_add_u32 (& var ,PG_INT16_MIN - 1 )!= PG_INT16_MAX )
727+ elog (ERROR ,"pg_atomic_fetch_add_u32() #6 wrong" );
728+
715729pg_atomic_fetch_add_u32 (& var ,1 );/* top up to UINT_MAX */
716730
717731if (pg_atomic_read_u32 (& var )!= UINT_MAX )
@@ -787,7 +801,7 @@ test_atomic_uint64(void)
787801if (pg_atomic_read_u64 (& var )!= 3 )
788802elog (ERROR ,"atomic_read_u64() #2 wrong" );
789803
790- if (pg_atomic_fetch_add_u64 (& var ,1 )!= 3 )
804+ if (pg_atomic_fetch_add_u64 (& var ,pg_atomic_read_u64 ( & var ) - 2 )!= 3 )
791805elog (ERROR ,"atomic_fetch_add_u64() #1 wrong" );
792806
793807if (pg_atomic_fetch_sub_u64 (& var ,1 )!= 4 )