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

Commite800bd7

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 parentd82f390 commite800bd7

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
@@ -41,6 +41,34 @@
4141
#include"utils/memutils.h"
4242

4343

44+
#defineEXPECT_TRUE(expr)\
45+
do { \
46+
if (!(expr)) \
47+
elog(ERROR, \
48+
"%s was unexpectedly false in file \"%s\" line %u", \
49+
#expr, __FILE__, __LINE__); \
50+
} while (0)
51+
52+
#defineEXPECT_EQ_U32(result_expr,expected_expr)\
53+
do { \
54+
uint32result = (result_expr); \
55+
uint32expected = (expected_expr); \
56+
if (result != expected) \
57+
elog(ERROR, \
58+
"%s yielded %u, expected %s in file \"%s\" line %u", \
59+
#result_expr, result, #expected_expr, __FILE__, __LINE__); \
60+
} while (0)
61+
62+
#defineEXPECT_EQ_U64(result_expr,expected_expr)\
63+
do { \
64+
uint64result = (result_expr); \
65+
uint64expected = (expected_expr); \
66+
if (result != expected) \
67+
elog(ERROR, \
68+
"%s yielded " UINT64_FORMAT ", expected %s in file \"%s\" line %u", \
69+
#result_expr, result, #expected_expr, __FILE__, __LINE__); \
70+
} while (0)
71+
4472
#defineLDELIM'('
4573
#defineRDELIM')'
4674
#defineDELIM','
@@ -646,27 +674,13 @@ test_atomic_flag(void)
646674
pg_atomic_flagflag;
647675

648676
pg_atomic_init_flag(&flag);
649-
650-
if (!pg_atomic_unlocked_test_flag(&flag))
651-
elog(ERROR,"flag: unexpectedly set");
652-
653-
if (!pg_atomic_test_set_flag(&flag))
654-
elog(ERROR,"flag: couldn't set");
655-
656-
if (pg_atomic_unlocked_test_flag(&flag))
657-
elog(ERROR,"flag: unexpectedly unset");
658-
659-
if (pg_atomic_test_set_flag(&flag))
660-
elog(ERROR,"flag: set spuriously #2");
661-
677+
EXPECT_TRUE(pg_atomic_unlocked_test_flag(&flag));
678+
EXPECT_TRUE(pg_atomic_test_set_flag(&flag));
679+
EXPECT_TRUE(!pg_atomic_unlocked_test_flag(&flag));
680+
EXPECT_TRUE(!pg_atomic_test_set_flag(&flag));
662681
pg_atomic_clear_flag(&flag);
663-
664-
if (!pg_atomic_unlocked_test_flag(&flag))
665-
elog(ERROR,"flag: unexpectedly set #2");
666-
667-
if (!pg_atomic_test_set_flag(&flag))
668-
elog(ERROR,"flag: couldn't set");
669-
682+
EXPECT_TRUE(pg_atomic_unlocked_test_flag(&flag));
683+
EXPECT_TRUE(pg_atomic_test_set_flag(&flag));
670684
pg_atomic_clear_flag(&flag);
671685
}
672686

@@ -678,75 +692,38 @@ test_atomic_uint32(void)
678692
inti;
679693

680694
pg_atomic_init_u32(&var,0);
681-
682-
if (pg_atomic_read_u32(&var)!=0)
683-
elog(ERROR,"atomic_read_u32() #1 wrong");
684-
695+
EXPECT_EQ_U32(pg_atomic_read_u32(&var),0);
685696
pg_atomic_write_u32(&var,3);
686-
687-
if (pg_atomic_read_u32(&var)!=3)
688-
elog(ERROR,"atomic_read_u32() #2 wrong");
689-
690-
if (pg_atomic_fetch_add_u32(&var,pg_atomic_read_u32(&var)-2)!=3)
691-
elog(ERROR,"atomic_fetch_add_u32() #1 wrong");
692-
693-
if (pg_atomic_fetch_sub_u32(&var,1)!=4)
694-
elog(ERROR,"atomic_fetch_sub_u32() #1 wrong");
695-
696-
if (pg_atomic_sub_fetch_u32(&var,3)!=0)
697-
elog(ERROR,"atomic_sub_fetch_u32() #1 wrong");
698-
699-
if (pg_atomic_add_fetch_u32(&var,10)!=10)
700-
elog(ERROR,"atomic_add_fetch_u32() #1 wrong");
701-
702-
if (pg_atomic_exchange_u32(&var,5)!=10)
703-
elog(ERROR,"pg_atomic_exchange_u32() #1 wrong");
704-
705-
if (pg_atomic_exchange_u32(&var,0)!=5)
706-
elog(ERROR,"pg_atomic_exchange_u32() #0 wrong");
697+
EXPECT_EQ_U32(pg_atomic_read_u32(&var),3);
698+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,pg_atomic_read_u32(&var)-2),
699+
3);
700+
EXPECT_EQ_U32(pg_atomic_fetch_sub_u32(&var,1),4);
701+
EXPECT_EQ_U32(pg_atomic_sub_fetch_u32(&var,3),0);
702+
EXPECT_EQ_U32(pg_atomic_add_fetch_u32(&var,10),10);
703+
EXPECT_EQ_U32(pg_atomic_exchange_u32(&var,5),10);
704+
EXPECT_EQ_U32(pg_atomic_exchange_u32(&var,0),5);
707705

708706
/* test around numerical limits */
709-
if (pg_atomic_fetch_add_u32(&var,INT_MAX)!=0)
710-
elog(ERROR,"pg_atomic_fetch_add_u32() #2 wrong");
711-
712-
if (pg_atomic_fetch_add_u32(&var,INT_MAX)!=INT_MAX)
713-
elog(ERROR,"pg_atomic_add_fetch_u32() #3 wrong");
714-
707+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,INT_MAX),0);
708+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,INT_MAX),INT_MAX);
715709
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-
710+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,PG_INT16_MAX),0);
711+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,PG_INT16_MAX+1),
712+
PG_INT16_MAX);
713+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,PG_INT16_MIN),
714+
2*PG_INT16_MAX+1);
715+
EXPECT_EQ_U32(pg_atomic_fetch_add_u32(&var,PG_INT16_MIN-1),
716+
PG_INT16_MAX);
729717
pg_atomic_fetch_add_u32(&var,1);/* top up to UINT_MAX */
730-
731-
if (pg_atomic_read_u32(&var)!=UINT_MAX)
732-
elog(ERROR,"atomic_read_u32() #2 wrong");
733-
734-
if (pg_atomic_fetch_sub_u32(&var,INT_MAX)!=UINT_MAX)
735-
elog(ERROR,"pg_atomic_fetch_sub_u32() #2 wrong");
736-
737-
if (pg_atomic_read_u32(&var)!= (uint32)INT_MAX+1)
738-
elog(ERROR,"atomic_read_u32() #3 wrong: %u",pg_atomic_read_u32(&var));
739-
740-
expected=pg_atomic_sub_fetch_u32(&var,INT_MAX);
741-
if (expected!=1)
742-
elog(ERROR,"pg_atomic_sub_fetch_u32() #3 wrong: %u",expected);
743-
718+
EXPECT_EQ_U32(pg_atomic_read_u32(&var),UINT_MAX);
719+
EXPECT_EQ_U32(pg_atomic_fetch_sub_u32(&var,INT_MAX),UINT_MAX);
720+
EXPECT_EQ_U32(pg_atomic_read_u32(&var), (uint32)INT_MAX+1);
721+
EXPECT_EQ_U32(pg_atomic_sub_fetch_u32(&var,INT_MAX),1);
744722
pg_atomic_sub_fetch_u32(&var,1);
745723

746724
/* fail exchange because of old expected */
747725
expected=10;
748-
if (pg_atomic_compare_exchange_u32(&var,&expected,1))
749-
elog(ERROR,"atomic_compare_exchange_u32() changed value spuriously");
726+
EXPECT_TRUE(!pg_atomic_compare_exchange_u32(&var,&expected,1));
750727

751728
/* CAS is allowed to fail due to interrupts, try a couple of times */
752729
for (i=0;i<1000;i++)
@@ -757,31 +734,18 @@ test_atomic_uint32(void)
757734
}
758735
if (i==1000)
759736
elog(ERROR,"atomic_compare_exchange_u32() never succeeded");
760-
if (pg_atomic_read_u32(&var)!=1)
761-
elog(ERROR,"atomic_compare_exchange_u32() didn't set value properly");
762-
737+
EXPECT_EQ_U32(pg_atomic_read_u32(&var),1);
763738
pg_atomic_write_u32(&var,0);
764739

765740
/* try setting flagbits */
766-
if (pg_atomic_fetch_or_u32(&var,1)&1)
767-
elog(ERROR,"pg_atomic_fetch_or_u32() #1 wrong");
768-
769-
if (!(pg_atomic_fetch_or_u32(&var,2)&1))
770-
elog(ERROR,"pg_atomic_fetch_or_u32() #2 wrong");
771-
772-
if (pg_atomic_read_u32(&var)!=3)
773-
elog(ERROR,"invalid result after pg_atomic_fetch_or_u32()");
774-
741+
EXPECT_TRUE(!(pg_atomic_fetch_or_u32(&var,1)&1));
742+
EXPECT_TRUE(pg_atomic_fetch_or_u32(&var,2)&1);
743+
EXPECT_EQ_U32(pg_atomic_read_u32(&var),3);
775744
/* try clearing flagbits */
776-
if ((pg_atomic_fetch_and_u32(&var, ~2)&3)!=3)
777-
elog(ERROR,"pg_atomic_fetch_and_u32() #1 wrong");
778-
779-
if (pg_atomic_fetch_and_u32(&var, ~1)!=1)
780-
elog(ERROR,"pg_atomic_fetch_and_u32() #2 wrong: is %u",
781-
pg_atomic_read_u32(&var));
745+
EXPECT_EQ_U32(pg_atomic_fetch_and_u32(&var, ~2)&3,3);
746+
EXPECT_EQ_U32(pg_atomic_fetch_and_u32(&var, ~1),1);
782747
/* no bits set anymore */
783-
if (pg_atomic_fetch_and_u32(&var, ~0)!=0)
784-
elog(ERROR,"pg_atomic_fetch_and_u32() #3 wrong");
748+
EXPECT_EQ_U32(pg_atomic_fetch_and_u32(&var, ~0),0);
785749
}
786750

787751
staticvoid
@@ -792,37 +756,20 @@ test_atomic_uint64(void)
792756
inti;
793757

794758
pg_atomic_init_u64(&var,0);
795-
796-
if (pg_atomic_read_u64(&var)!=0)
797-
elog(ERROR,"atomic_read_u64() #1 wrong");
798-
759+
EXPECT_EQ_U64(pg_atomic_read_u64(&var),0);
799760
pg_atomic_write_u64(&var,3);
800-
801-
if (pg_atomic_read_u64(&var)!=3)
802-
elog(ERROR,"atomic_read_u64() #2 wrong");
803-
804-
if (pg_atomic_fetch_add_u64(&var,pg_atomic_read_u64(&var)-2)!=3)
805-
elog(ERROR,"atomic_fetch_add_u64() #1 wrong");
806-
807-
if (pg_atomic_fetch_sub_u64(&var,1)!=4)
808-
elog(ERROR,"atomic_fetch_sub_u64() #1 wrong");
809-
810-
if (pg_atomic_sub_fetch_u64(&var,3)!=0)
811-
elog(ERROR,"atomic_sub_fetch_u64() #1 wrong");
812-
813-
if (pg_atomic_add_fetch_u64(&var,10)!=10)
814-
elog(ERROR,"atomic_add_fetch_u64() #1 wrong");
815-
816-
if (pg_atomic_exchange_u64(&var,5)!=10)
817-
elog(ERROR,"pg_atomic_exchange_u64() #1 wrong");
818-
819-
if (pg_atomic_exchange_u64(&var,0)!=5)
820-
elog(ERROR,"pg_atomic_exchange_u64() #0 wrong");
761+
EXPECT_EQ_U64(pg_atomic_read_u64(&var),3);
762+
EXPECT_EQ_U64(pg_atomic_fetch_add_u64(&var,pg_atomic_read_u64(&var)-2),
763+
3);
764+
EXPECT_EQ_U64(pg_atomic_fetch_sub_u64(&var,1),4);
765+
EXPECT_EQ_U64(pg_atomic_sub_fetch_u64(&var,3),0);
766+
EXPECT_EQ_U64(pg_atomic_add_fetch_u64(&var,10),10);
767+
EXPECT_EQ_U64(pg_atomic_exchange_u64(&var,5),10);
768+
EXPECT_EQ_U64(pg_atomic_exchange_u64(&var,0),5);
821769

822770
/* fail exchange because of old expected */
823771
expected=10;
824-
if (pg_atomic_compare_exchange_u64(&var,&expected,1))
825-
elog(ERROR,"atomic_compare_exchange_u64() changed value spuriously");
772+
EXPECT_TRUE(!pg_atomic_compare_exchange_u64(&var,&expected,1));
826773

827774
/* CAS is allowed to fail due to interrupts, try a couple of times */
828775
for (i=0;i<100;i++)
@@ -833,31 +780,19 @@ test_atomic_uint64(void)
833780
}
834781
if (i==100)
835782
elog(ERROR,"atomic_compare_exchange_u64() never succeeded");
836-
if (pg_atomic_read_u64(&var)!=1)
837-
elog(ERROR,"atomic_compare_exchange_u64() didn't set value properly");
783+
EXPECT_EQ_U64(pg_atomic_read_u64(&var),1);
838784

839785
pg_atomic_write_u64(&var,0);
840786

841787
/* try setting flagbits */
842-
if (pg_atomic_fetch_or_u64(&var,1)&1)
843-
elog(ERROR,"pg_atomic_fetch_or_u64() #1 wrong");
844-
845-
if (!(pg_atomic_fetch_or_u64(&var,2)&1))
846-
elog(ERROR,"pg_atomic_fetch_or_u64() #2 wrong");
847-
848-
if (pg_atomic_read_u64(&var)!=3)
849-
elog(ERROR,"invalid result after pg_atomic_fetch_or_u64()");
850-
788+
EXPECT_TRUE(!(pg_atomic_fetch_or_u64(&var,1)&1));
789+
EXPECT_TRUE(pg_atomic_fetch_or_u64(&var,2)&1);
790+
EXPECT_EQ_U64(pg_atomic_read_u64(&var),3);
851791
/* try clearing flagbits */
852-
if ((pg_atomic_fetch_and_u64(&var, ~2)&3)!=3)
853-
elog(ERROR,"pg_atomic_fetch_and_u64() #1 wrong");
854-
855-
if (pg_atomic_fetch_and_u64(&var, ~1)!=1)
856-
elog(ERROR,"pg_atomic_fetch_and_u64() #2 wrong: is "UINT64_FORMAT,
857-
pg_atomic_read_u64(&var));
792+
EXPECT_EQ_U64((pg_atomic_fetch_and_u64(&var, ~2)&3),3);
793+
EXPECT_EQ_U64(pg_atomic_fetch_and_u64(&var, ~1),1);
858794
/* no bits set anymore */
859-
if (pg_atomic_fetch_and_u64(&var, ~0)!=0)
860-
elog(ERROR,"pg_atomic_fetch_and_u64() #3 wrong");
795+
EXPECT_EQ_U64(pg_atomic_fetch_and_u64(&var, ~0),0);
861796
}
862797

863798

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp