Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commiteb74022

Browse files
committed
Report test_atomic_ops() failures consistently, via macros.
This prints the unexpected value in more failure cases, and it removesforty-eight hand-maintained error messages. Back-patch to 9.5, whichintroduced these tests.Reviewed (in an earlier version) by Andres Freund.Discussion:https://postgr.es/m/20190915160021.GA24376@alvherre.pgsql
1 parent4fd5198 commiteb74022

File tree

1 file changed

+81
-146
lines changed

1 file changed

+81
-146
lines changed

‎src/test/regress/regress.c

Lines changed: 81 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,34 @@
3838
#include"utils/memutils.h"
3939

4040

41+
#defineEXPECT_TRUE(expr)\
42+
do { \
43+
if (!(expr)) \
44+
elog(ERROR, \
45+
"%s was unexpectedly false in file \"%s\" line %u", \
46+
#expr, __FILE__, __LINE__); \
47+
} while (0)
48+
49+
#defineEXPECT_EQ_U32(result_expr,expected_expr)\
50+
do { \
51+
uint32result = (result_expr); \
52+
uint32expected = (expected_expr); \
53+
if (result != expected) \
54+
elog(ERROR, \
55+
"%s yielded %u, expected %s in file \"%s\" line %u", \
56+
#result_expr, result, #expected_expr, __FILE__, __LINE__); \
57+
} while (0)
58+
59+
#defineEXPECT_EQ_U64(result_expr,expected_expr)\
60+
do { \
61+
uint64result = (result_expr); \
62+
uint64expected = (expected_expr); \
63+
if (result != expected) \
64+
elog(ERROR, \
65+
"%s yielded " UINT64_FORMAT ", expected %s in file \"%s\" line %u", \
66+
#result_expr, result, #expected_expr, __FILE__, __LINE__); \
67+
} while (0)
68+
4169
#defineLDELIM'('
4270
#defineRDELIM')'
4371
#defineDELIM','
@@ -638,27 +666,13 @@ test_atomic_flag(void)
638666
pg_atomic_flagflag;
639667

640668
pg_atomic_init_flag(&flag);
641-
642-
if (!pg_atomic_unlocked_test_flag(&flag))
643-
elog(ERROR,"flag: unexpectedly set");
644-
645-
if (!pg_atomic_test_set_flag(&flag))
646-
elog(ERROR,"flag: couldn't set");
647-
648-
if (pg_atomic_unlocked_test_flag(&flag))
649-
elog(ERROR,"flag: unexpectedly unset");
650-
651-
if (pg_atomic_test_set_flag(&flag))
652-
elog(ERROR,"flag: set spuriously #2");
653-
669+
EXPECT_TRUE(pg_atomic_unlocked_test_flag(&flag));
670+
EXPECT_TRUE(pg_atomic_test_set_flag(&flag));
671+
EXPECT_TRUE(!pg_atomic_unlocked_test_flag(&flag));
672+
EXPECT_TRUE(!pg_atomic_test_set_flag(&flag));
654673
pg_atomic_clear_flag(&flag);
655-
656-
if (!pg_atomic_unlocked_test_flag(&flag))
657-
elog(ERROR,"flag: unexpectedly set #2");
658-
659-
if (!pg_atomic_test_set_flag(&flag))
660-
elog(ERROR,"flag: couldn't set");
661-
674+
EXPECT_TRUE(pg_atomic_unlocked_test_flag(&flag));
675+
EXPECT_TRUE(pg_atomic_test_set_flag(&flag));
662676
pg_atomic_clear_flag(&flag);
663677
}
664678

@@ -670,75 +684,38 @@ test_atomic_uint32(void)
670684
inti;
671685

672686
pg_atomic_init_u32(&var,0);
673-
674-
if (pg_atomic_read_u32(&var)!=0)
675-
elog(ERROR,"atomic_read_u32() #1 wrong");
676-
687+
EXPECT_EQ_U32(pg_atomic_read_u32(&var),0);
677688
pg_atomic_write_u32(&var,3);
678-
679-
if (pg_atomic_read_u32(&var)!=3)
680-
elog(ERROR,"atomic_read_u32() #2 wrong");
681-
682-
if (pg_atomic_fetch_add_u32(&var,pg_atomic_read_u32(&var)-2)!=3)
683-
elog(ERROR,"atomic_fetch_add_u32() #1 wrong");
684-
685-
if (pg_atomic_fetch_sub_u32(&var,1)!=4)
686-
elog(ERROR,"atomic_fetch_sub_u32() #1 wrong");
687-
688-
if (pg_atomic_sub_fetch_u32(&var,3)!=0)
689-
elog(ERROR,"atomic_sub_fetch_u32() #1 wrong");
690-
691-
if (pg_atomic_add_fetch_u32(&var,10)!=10)
692-
elog(ERROR,"atomic_add_fetch_u32() #1 wrong");
693-
694-
if (pg_atomic_exchange_u32(&var,5)!=10)
695-
elog(ERROR,"pg_atomic_exchange_u32() #1 wrong");
696-
697-
if (pg_atomic_exchange_u32(&var,0)!=5)
698-
elog(ERROR,"pg_atomic_exchange_u32() #0 wrong");
689+
EXPECT_EQ_U32(pg_atomic_read_u32(&var),3);
690+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,pg_atomic_read_u32(&var)-2),
691+
3);
692+
EXPECT_EQ_U32(pg_atomic_fetch_sub_u32(&var,1),4);
693+
EXPECT_EQ_U32(pg_atomic_sub_fetch_u32(&var,3),0);
694+
EXPECT_EQ_U32(pg_atomic_add_fetch_u32(&var,10),10);
695+
EXPECT_EQ_U32(pg_atomic_exchange_u32(&var,5),10);
696+
EXPECT_EQ_U32(pg_atomic_exchange_u32(&var,0),5);
699697

700698
/* test around numerical limits */
701-
if (pg_atomic_fetch_add_u32(&var,INT_MAX)!=0)
702-
elog(ERROR,"pg_atomic_fetch_add_u32() #2 wrong");
703-
704-
if (pg_atomic_fetch_add_u32(&var,INT_MAX)!=INT_MAX)
705-
elog(ERROR,"pg_atomic_add_fetch_u32() #3 wrong");
706-
699+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,INT_MAX),0);
700+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,INT_MAX),INT_MAX);
707701
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-
702+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,PG_INT16_MAX),0);
703+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,PG_INT16_MAX+1),
704+
PG_INT16_MAX);
705+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,PG_INT16_MIN),
706+
2*PG_INT16_MAX+1);
707+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,PG_INT16_MIN-1),
708+
PG_INT16_MAX);
721709
pg_atomic_fetch_add_u32(&var,1);/* top up to UINT_MAX */
722-
723-
if (pg_atomic_read_u32(&var)!=UINT_MAX)
724-
elog(ERROR,"atomic_read_u32() #2 wrong");
725-
726-
if (pg_atomic_fetch_sub_u32(&var,INT_MAX)!=UINT_MAX)
727-
elog(ERROR,"pg_atomic_fetch_sub_u32() #2 wrong");
728-
729-
if (pg_atomic_read_u32(&var)!= (uint32)INT_MAX+1)
730-
elog(ERROR,"atomic_read_u32() #3 wrong: %u",pg_atomic_read_u32(&var));
731-
732-
expected=pg_atomic_sub_fetch_u32(&var,INT_MAX);
733-
if (expected!=1)
734-
elog(ERROR,"pg_atomic_sub_fetch_u32() #3 wrong: %u",expected);
735-
710+
EXPECT_EQ_U32(pg_atomic_read_u32(&var),UINT_MAX);
711+
EXPECT_EQ_U32(pg_atomic_fetch_sub_u32(&var,INT_MAX),UINT_MAX);
712+
EXPECT_EQ_U32(pg_atomic_read_u32(&var), (uint32)INT_MAX+1);
713+
EXPECT_EQ_U32(pg_atomic_sub_fetch_u32(&var,INT_MAX),1);
736714
pg_atomic_sub_fetch_u32(&var,1);
737715

738716
/* fail exchange because of old expected */
739717
expected=10;
740-
if (pg_atomic_compare_exchange_u32(&var,&expected,1))
741-
elog(ERROR,"atomic_compare_exchange_u32() changed value spuriously");
718+
EXPECT_TRUE(!pg_atomic_compare_exchange_u32(&var,&expected,1));
742719

743720
/* CAS is allowed to fail due to interrupts, try a couple of times */
744721
for (i=0;i<1000;i++)
@@ -749,31 +726,18 @@ test_atomic_uint32(void)
749726
}
750727
if (i==1000)
751728
elog(ERROR,"atomic_compare_exchange_u32() never succeeded");
752-
if (pg_atomic_read_u32(&var)!=1)
753-
elog(ERROR,"atomic_compare_exchange_u32() didn't set value properly");
754-
729+
EXPECT_EQ_U32(pg_atomic_read_u32(&var),1);
755730
pg_atomic_write_u32(&var,0);
756731

757732
/* try setting flagbits */
758-
if (pg_atomic_fetch_or_u32(&var,1)&1)
759-
elog(ERROR,"pg_atomic_fetch_or_u32() #1 wrong");
760-
761-
if (!(pg_atomic_fetch_or_u32(&var,2)&1))
762-
elog(ERROR,"pg_atomic_fetch_or_u32() #2 wrong");
763-
764-
if (pg_atomic_read_u32(&var)!=3)
765-
elog(ERROR,"invalid result after pg_atomic_fetch_or_u32()");
766-
733+
EXPECT_TRUE(!(pg_atomic_fetch_or_u32(&var,1)&1));
734+
EXPECT_TRUE(pg_atomic_fetch_or_u32(&var,2)&1);
735+
EXPECT_EQ_U32(pg_atomic_read_u32(&var),3);
767736
/* try clearing flagbits */
768-
if ((pg_atomic_fetch_and_u32(&var, ~2)&3)!=3)
769-
elog(ERROR,"pg_atomic_fetch_and_u32() #1 wrong");
770-
771-
if (pg_atomic_fetch_and_u32(&var, ~1)!=1)
772-
elog(ERROR,"pg_atomic_fetch_and_u32() #2 wrong: is %u",
773-
pg_atomic_read_u32(&var));
737+
EXPECT_EQ_U32(pg_atomic_fetch_and_u32(&var, ~2)&3,3);
738+
EXPECT_EQ_U32(pg_atomic_fetch_and_u32(&var, ~1),1);
774739
/* no bits set anymore */
775-
if (pg_atomic_fetch_and_u32(&var, ~0)!=0)
776-
elog(ERROR,"pg_atomic_fetch_and_u32() #3 wrong");
740+
EXPECT_EQ_U32(pg_atomic_fetch_and_u32(&var, ~0),0);
777741
}
778742

779743
staticvoid
@@ -784,37 +748,20 @@ test_atomic_uint64(void)
784748
inti;
785749

786750
pg_atomic_init_u64(&var,0);
787-
788-
if (pg_atomic_read_u64(&var)!=0)
789-
elog(ERROR,"atomic_read_u64() #1 wrong");
790-
751+
EXPECT_EQ_U64(pg_atomic_read_u64(&var),0);
791752
pg_atomic_write_u64(&var,3);
792-
793-
if (pg_atomic_read_u64(&var)!=3)
794-
elog(ERROR,"atomic_read_u64() #2 wrong");
795-
796-
if (pg_atomic_fetch_add_u64(&var,pg_atomic_read_u64(&var)-2)!=3)
797-
elog(ERROR,"atomic_fetch_add_u64() #1 wrong");
798-
799-
if (pg_atomic_fetch_sub_u64(&var,1)!=4)
800-
elog(ERROR,"atomic_fetch_sub_u64() #1 wrong");
801-
802-
if (pg_atomic_sub_fetch_u64(&var,3)!=0)
803-
elog(ERROR,"atomic_sub_fetch_u64() #1 wrong");
804-
805-
if (pg_atomic_add_fetch_u64(&var,10)!=10)
806-
elog(ERROR,"atomic_add_fetch_u64() #1 wrong");
807-
808-
if (pg_atomic_exchange_u64(&var,5)!=10)
809-
elog(ERROR,"pg_atomic_exchange_u64() #1 wrong");
810-
811-
if (pg_atomic_exchange_u64(&var,0)!=5)
812-
elog(ERROR,"pg_atomic_exchange_u64() #0 wrong");
753+
EXPECT_EQ_U64(pg_atomic_read_u64(&var),3);
754+
EXPECT_EQ_U64(pg_atomic_fetch_add_u64(&var,pg_atomic_read_u64(&var)-2),
755+
3);
756+
EXPECT_EQ_U64(pg_atomic_fetch_sub_u64(&var,1),4);
757+
EXPECT_EQ_U64(pg_atomic_sub_fetch_u64(&var,3),0);
758+
EXPECT_EQ_U64(pg_atomic_add_fetch_u64(&var,10),10);
759+
EXPECT_EQ_U64(pg_atomic_exchange_u64(&var,5),10);
760+
EXPECT_EQ_U64(pg_atomic_exchange_u64(&var,0),5);
813761

814762
/* fail exchange because of old expected */
815763
expected=10;
816-
if (pg_atomic_compare_exchange_u64(&var,&expected,1))
817-
elog(ERROR,"atomic_compare_exchange_u64() changed value spuriously");
764+
EXPECT_TRUE(!pg_atomic_compare_exchange_u64(&var,&expected,1));
818765

819766
/* CAS is allowed to fail due to interrupts, try a couple of times */
820767
for (i=0;i<100;i++)
@@ -825,31 +772,19 @@ test_atomic_uint64(void)
825772
}
826773
if (i==100)
827774
elog(ERROR,"atomic_compare_exchange_u64() never succeeded");
828-
if (pg_atomic_read_u64(&var)!=1)
829-
elog(ERROR,"atomic_compare_exchange_u64() didn't set value properly");
775+
EXPECT_EQ_U64(pg_atomic_read_u64(&var),1);
830776

831777
pg_atomic_write_u64(&var,0);
832778

833779
/* try setting flagbits */
834-
if (pg_atomic_fetch_or_u64(&var,1)&1)
835-
elog(ERROR,"pg_atomic_fetch_or_u64() #1 wrong");
836-
837-
if (!(pg_atomic_fetch_or_u64(&var,2)&1))
838-
elog(ERROR,"pg_atomic_fetch_or_u64() #2 wrong");
839-
840-
if (pg_atomic_read_u64(&var)!=3)
841-
elog(ERROR,"invalid result after pg_atomic_fetch_or_u64()");
842-
780+
EXPECT_TRUE(!(pg_atomic_fetch_or_u64(&var,1)&1));
781+
EXPECT_TRUE(pg_atomic_fetch_or_u64(&var,2)&1);
782+
EXPECT_EQ_U64(pg_atomic_read_u64(&var),3);
843783
/* try clearing flagbits */
844-
if ((pg_atomic_fetch_and_u64(&var, ~2)&3)!=3)
845-
elog(ERROR,"pg_atomic_fetch_and_u64() #1 wrong");
846-
847-
if (pg_atomic_fetch_and_u64(&var, ~1)!=1)
848-
elog(ERROR,"pg_atomic_fetch_and_u64() #2 wrong: is "UINT64_FORMAT,
849-
pg_atomic_read_u64(&var));
784+
EXPECT_EQ_U64((pg_atomic_fetch_and_u64(&var, ~2)&3),3);
785+
EXPECT_EQ_U64(pg_atomic_fetch_and_u64(&var, ~1),1);
850786
/* no bits set anymore */
851-
if (pg_atomic_fetch_and_u64(&var, ~0)!=0)
852-
elog(ERROR,"pg_atomic_fetch_and_u64() #3 wrong");
787+
EXPECT_EQ_U64(pg_atomic_fetch_and_u64(&var, ~0),0);
853788
}
854789

855790

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp