38  location (
const char *file, 
int line, 
const char *function)
 
   39    : m_file (file), m_line (line), m_function (
function) {}
 
   43  const char *m_function;
 
   49#define SELFTEST_LOCATION \ 
   50  (::selftest::location (__FILE__, __LINE__, __FUNCTION__)) 
   54extern void run_tests ();
 
   58extern void pass (
const location &loc, 
const char *
msg);
 
   62extern void fail (
const location &loc, 
const char *
msg)
 
   67extern void fail_formatted (
const location &loc, 
const char *fmt, ...)
 
   72extern 
void assert_streq (const location &loc,
 
   73                          const 
char *desc_val1, const 
char *desc_val2,
 
   74                          const 
char *val1, const 
char *val2);
 
   78extern 
void assert_str_contains (const location &loc,
 
   79                                 const 
char *desc_haystack,
 
   80                                 const 
char *desc_needle,
 
   81                                 const 
char *val_haystack,
 
   82                                 const 
char *val_needle);
 
   86extern 
void assert_str_startswith (const location &loc,
 
   88                                   const 
char *desc_prefix,
 
   90                                   const 
char *val_prefix);
 
  103  named_temp_file (
const char *suffix, diagnostics::file_cache *fc = 
nullptr);
 
  105  const char *get_filename ()
 const { 
return m_filename; }
 
  109  diagnostics::file_cache *m_file_cache;
 
  115class temp_source_file : 
public named_temp_file
 
  118  temp_source_file (
const location &loc, 
const char *suffix,
 
  119                    const char *content, diagnostics::file_cache *fc = 
nullptr);
 
  120  temp_source_file (
const location &loc, 
const char *suffix,
 
  121                    const char *content, 
size_t sz);
 
  140  const char *m_saved_open_quote;
 
  141  const char *m_saved_close_quote;
 
  160class line_table_case;
 
  175  line_table_test (
const line_table_case &c);
 
  184for_each_line_table_case (
void (*testcase) (
const line_table_case &));
 
  191extern char *read_file (
const location &loc, 
const char *
path);
 
  197extern char *locate_file (
const char *
path);
 
  201extern const char *path_to_selftest_files;
 
  209  test_runner (
const char *name);
 
  219extern void attribs_cc_tests ();
 
  220extern void bitmap_cc_tests ();
 
  221extern void cgraph_cc_tests ();
 
  222extern void convert_cc_tests ();
 
  223extern void dbgcnt_cc_tests ();
 
  224extern void digraph_cc_tests ();
 
  225extern void dumpfile_cc_tests ();
 
  226extern void et_forest_cc_tests ();
 
  227extern void fibonacci_heap_cc_tests ();
 
  228extern void fold_const_cc_tests ();
 
  229extern void function_tests_cc_tests ();
 
  230extern void gcc_attribute_urlifier_cc_tests ();
 
  231extern void gcc_urlifier_cc_tests ();
 
  232extern void ggc_tests_cc_tests ();
 
  233extern void gimple_cc_tests ();
 
  234extern void gimple_range_tests ();
 
  235extern void graphviz_cc_tests ();
 
  236extern void hash_map_tests_cc_tests ();
 
  237extern void hash_set_tests_cc_tests ();
 
  238extern void input_cc_tests ();
 
  239extern void ipa_modref_tree_cc_tests ();
 
  240extern void json_cc_tests ();
 
  241extern void json_parser_cc_tests ();
 
  242extern void opt_suggestions_cc_tests ();
 
  243extern void optinfo_emit_json_cc_tests ();
 
  244extern void opts_cc_tests ();
 
  245extern void ordered_hash_map_tests_cc_tests ();
 
  246extern void path_coverage_cc_tests ();
 
  247extern void predict_cc_tests ();
 
  248extern void pretty_print_cc_tests ();
 
  249extern void range_op_tests ();
 
  250extern void range_tests ();
 
  251extern void read_rtl_function_cc_tests ();
 
  252extern void relation_tests ();
 
  253extern void rtl_tests_cc_tests ();
 
  254extern void sbitmap_cc_tests ();
 
  255extern void selftest_cc_tests ();
 
  256extern void simple_diagnostic_path_cc_tests ();
 
  257extern void simplify_rtx_cc_tests ();
 
  258extern void spellcheck_cc_tests ();
 
  259extern void spellcheck_tree_cc_tests ();
 
  260extern void splay_tree_cc_tests ();
 
  261extern void sreal_cc_tests ();
 
  262extern void store_merging_cc_tests ();
 
  263extern void tree_cc_tests ();
 
  264extern void tree_cfg_cc_tests ();
 
  265extern void tristate_cc_tests ();
 
  266extern void typed_splay_tree_cc_tests ();
 
  267extern void vec_cc_tests ();
 
  268extern void vec_perm_indices_cc_tests ();
 
  269extern void wide_int_cc_tests ();
 
  270extern void xml_cc_tests ();
 
  272extern int num_passes;
 
  282#define ASSERT_TRUE(EXPR)                               \ 
  283  ASSERT_TRUE_AT (SELFTEST_LOCATION, (EXPR)) 
  288#define ASSERT_TRUE_AT(LOC, EXPR)                       \ 
  289  SELFTEST_BEGIN_STMT                                   \ 
  290  const char *desc_ = "ASSERT_TRUE (" #EXPR ")";        \ 
  291  bool actual_ = (EXPR);                                \ 
  293    ::selftest::pass ((LOC), desc_);                    \ 
  295    ::selftest::fail ((LOC), desc_);                    \ 
  302#define ASSERT_FALSE(EXPR)                                      \ 
  303  ASSERT_FALSE_AT (SELFTEST_LOCATION, (EXPR)) 
  308#define ASSERT_FALSE_AT(LOC, EXPR)                              \ 
  309  SELFTEST_BEGIN_STMT                                           \ 
  310  const char *desc_ = "ASSERT_FALSE (" #EXPR ")";               \ 
  311  bool actual_ = (EXPR);                                        \ 
  313    ::selftest::fail ((LOC), desc_);                            \ 
  315    ::selftest::pass ((LOC), desc_);                            \ 
  322#define ASSERT_EQ(VAL1, VAL2) \ 
  323  ASSERT_EQ_AT ((SELFTEST_LOCATION), (VAL1), (VAL2)) 
  328#define ASSERT_EQ_AT(LOC, VAL1, VAL2)                  \ 
  329  SELFTEST_BEGIN_STMT                                          \ 
  330  const char *desc_ = "ASSERT_EQ (" #VAL1 ", " #VAL2 ")"; \ 
  331  if ((VAL1) == (VAL2))                                \ 
  332    ::selftest::pass ((LOC), desc_);                           \ 
  334    ::selftest::fail ((LOC), desc_);                           \ 
  341#define ASSERT_NEAR(VAL1, VAL2, ABS_ERROR)      \ 
  342  ASSERT_NEAR_AT ((SELFTEST_LOCATION), (VAL1), (VAL2), (ABS_ERROR)) 
  347#define ASSERT_NEAR_AT(LOC, VAL1, VAL2, ABS_ERROR)             \ 
  348  SELFTEST_BEGIN_STMT                                          \ 
  349  const char *desc_ = "ASSERT_NEAR (" #VAL1 ", " #VAL2 ", " #ABS_ERROR ")"; \ 
  350  double error = fabs ((VAL1) - (VAL2));                                \ 
  351  if (error < (ABS_ERROR))                                              \ 
  352    ::selftest::pass ((LOC), desc_);                                    \ 
  354    ::selftest::fail ((LOC), desc_);                                    \ 
  361#define ASSERT_KNOWN_EQ(VAL1, VAL2) \ 
  362  ASSERT_KNOWN_EQ_AT ((SELFTEST_LOCATION), (VAL1), (VAL2)) 
  367#define ASSERT_KNOWN_EQ_AT(LOC, VAL1, VAL2)                     \ 
  368  SELFTEST_BEGIN_STMT                                                   \ 
  369  const char *desc = "ASSERT_KNOWN_EQ (" #VAL1 ", " #VAL2 ")";  \ 
  370  if (known_eq (VAL1, VAL2))                                    \ 
  371    ::selftest::pass ((LOC), desc);                                     \ 
  373    ::selftest::fail ((LOC), desc);                                     \ 
  380#define ASSERT_NE(VAL1, VAL2)                          \ 
  381  SELFTEST_BEGIN_STMT                                          \ 
  382  const char *desc_ = "ASSERT_NE (" #VAL1 ", " #VAL2 ")"; \ 
  383  if ((VAL1) != (VAL2))                                \ 
  384    ::selftest::pass (SELFTEST_LOCATION, desc_);               \ 
  386    ::selftest::fail (SELFTEST_LOCATION, desc_);               \ 
  392#define ASSERT_NE_AT(LOC, VAL1, VAL2)                  \ 
  393  SELFTEST_BEGIN_STMT                                          \ 
  394  const char *desc_ = "ASSERT_NE (" #VAL1 ", " #VAL2 ")"; \ 
  395  if ((VAL1) != (VAL2))                                \ 
  396    ::selftest::pass ((LOC), desc_);                           \ 
  398    ::selftest::fail ((LOC), desc_);                           \ 
  405#define ASSERT_MAYBE_NE(VAL1, VAL2) \ 
  406  ASSERT_MAYBE_NE_AT ((SELFTEST_LOCATION), (VAL1), (VAL2)) 
  411#define ASSERT_MAYBE_NE_AT(LOC, VAL1, VAL2)                     \ 
  412  SELFTEST_BEGIN_STMT                                                   \ 
  413  const char *desc = "ASSERT_MAYBE_NE (" #VAL1 ", " #VAL2 ")";  \ 
  414  if (maybe_ne (VAL1, VAL2))                                    \ 
  415    ::selftest::pass ((LOC), desc);                                     \ 
  417    ::selftest::fail ((LOC), desc);                                     \ 
  424#define ASSERT_GT(LHS, RHS)                             \ 
  425  ASSERT_GT_AT ((SELFTEST_LOCATION), (LHS), (RHS)) 
  430#define ASSERT_GT_AT(LOC, LHS, RHS)                    \ 
  431  SELFTEST_BEGIN_STMT                                          \ 
  432  const char *desc_ = "ASSERT_GT (" #LHS ", " #RHS ")";        \ 
  434    ::selftest::pass ((LOC), desc_);                           \ 
  436    ::selftest::fail ((LOC), desc_);                           \ 
  443#define ASSERT_LT(LHS, RHS)                             \ 
  444  ASSERT_LT_AT ((SELFTEST_LOCATION), (LHS), (RHS)) 
  449#define ASSERT_LT_AT(LOC, LHS, RHS)                    \ 
  450  SELFTEST_BEGIN_STMT                                          \ 
  451  const char *desc_ = "ASSERT_LT (" #LHS ", " #RHS ")";        \ 
  453    ::selftest::pass ((LOC), desc_);                           \ 
  455    ::selftest::fail ((LOC), desc_);                           \ 
  462#define ASSERT_STREQ(VAL1, VAL2)                                    \ 
  463  SELFTEST_BEGIN_STMT                                               \ 
  464  ::selftest::assert_streq (SELFTEST_LOCATION, #VAL1, #VAL2, \ 
  471#define ASSERT_STREQ_AT(LOC, VAL1, VAL2)                            \ 
  472  SELFTEST_BEGIN_STMT                                               \ 
  473  ::selftest::assert_streq ((LOC), #VAL1, #VAL2,                    \ 
  482#define ASSERT_STR_CONTAINS(HAYSTACK, NEEDLE)                           \ 
  483  SELFTEST_BEGIN_STMT                                                   \ 
  484  ::selftest::assert_str_contains (SELFTEST_LOCATION, #HAYSTACK, #NEEDLE, \ 
  485                                   (HAYSTACK), (NEEDLE));               \ 
  491#define ASSERT_STR_CONTAINS_AT(LOC, HAYSTACK, NEEDLE)                   \ 
  492  SELFTEST_BEGIN_STMT                                                   \ 
  493  ::selftest::assert_str_contains (LOC, #HAYSTACK, #NEEDLE,             \ 
  494                                   (HAYSTACK), (NEEDLE));               \ 
  501#define ASSERT_STR_STARTSWITH(STR, PREFIX)                                  \ 
  502  SELFTEST_BEGIN_STMT                                                       \ 
  503  ::selftest::assert_str_startswith (SELFTEST_LOCATION, #STR, #PREFIX,      \ 
  510#define ASSERT_PRED1(PRED1, VAL1)                               \ 
  511  SELFTEST_BEGIN_STMT                                           \ 
  512  const char *desc_ = "ASSERT_PRED1 (" #PRED1 ", " #VAL1 ")";   \ 
  513  bool actual_ = (PRED1) (VAL1);                                \ 
  515    ::selftest::pass (SELFTEST_LOCATION, desc_);                \ 
  517    ::selftest::fail (SELFTEST_LOCATION, desc_);                \ 
  520#define SELFTEST_BEGIN_STMT do { 
  521#define SELFTEST_END_STMT   } while (0) 
Definition file-cache.h:82
static struct path_prefix cpath path
Definition collect2.cc:514
void ATTRIBUTE_NORETURN
Definition diagnostic-core.h:76
const json::string_property function
Definition coretypes.h:167
Definition dump-context.h:31
static void const char * msg
Definition read-md.cc:204