@@ -679,7 +679,7 @@ test_atomic_uint32(void)
679679if (pg_atomic_read_u32 (& var )!= 3 )
680680elog (ERROR ,"atomic_read_u32() #2 wrong" );
681681
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 )
683683elog (ERROR ,"atomic_fetch_add_u32() #1 wrong" );
684684
685685if (pg_atomic_fetch_sub_u32 (& var ,1 )!= 4 )
@@ -704,6 +704,20 @@ test_atomic_uint32(void)
704704if (pg_atomic_fetch_add_u32 (& var ,INT_MAX )!= INT_MAX )
705705elog (ERROR ,"pg_atomic_add_fetch_u32() #3 wrong" );
706706
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+
707721pg_atomic_fetch_add_u32 (& var ,1 );/* top up to UINT_MAX */
708722
709723if (pg_atomic_read_u32 (& var )!= UINT_MAX )
@@ -779,7 +793,7 @@ test_atomic_uint64(void)
779793if (pg_atomic_read_u64 (& var )!= 3 )
780794elog (ERROR ,"atomic_read_u64() #2 wrong" );
781795
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 )
783797elog (ERROR ,"atomic_fetch_add_u64() #1 wrong" );
784798
785799if (pg_atomic_fetch_sub_u64 (& var ,1 )!= 4 )