Blame view

3rdparty/boost_1_81_0/libs/pfr/test/Jamfile.v2 4.88 KB
73ef4ff3   Hu Chunming   提交三方库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
  #  Copyright (C) 2016-2022 Antony Polukhin.
  #
  # Use, modification and distribution is subject to the Boost Software License,
  # Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  # http://www.boost.org/LICENSE_1_0.txt)
  #
  
  import python ;
  import testing ;
  import ../../config/checks/config : requires ;
  
  project
      : source-location .
      : requirements
          <define>BOOST_PFR_DETAIL_STRICT_RVALUE_TESTING=1
          [ requires cxx14_constexpr ]
      ;
  
  ########## BEGIN of helpers to detect Loophole trick support
  
  actions mp_simple_run_action
  {
        $(>) > $(<)
  }
  
  rule mp-run-simple ( sources + : args * : input-files * : requirements * : target-name )
  {
     exe $(target-name)_exe : $(sources) : $(requirements) ;
     explicit $(target-name)_exe ;
     make $(target-name).output : $(target-name)_exe : @mp_simple_run_action ;
     explicit $(target-name).output ;
     alias $(target-name) : $(target-name).output ;
  }
  
  mp-run-simple loophole_detection.cpp : : : : compiler_supports_loophole ;
  explicit compiler_supports_loophole ;
  
  ########## END of helpers to detect Loophole trick support
  
  
  local DISABLE_ON_MSVC = ; #<toolset>msvc:<build>no ;
  local REQUIRE_LOOPHOLE =
      [ check-target-builds ../test//compiler_supports_loophole : : <build>no ]
    ;
  
  local STRUCTURED_BINDING_ENGINE = <define>BOOST_PFR_USE_LOOPHOLE=0 <define>BOOST_PFR_USE_CPP17=1 [ requires cxx17_structured_bindings ] ;
  local LOOPHOLE_ENGINE = <define>BOOST_PFR_USE_LOOPHOLE=1 <define>BOOST_PFR_USE_CPP17=0 $(REQUIRE_LOOPHOLE) ;
  local CLASSIC_ENGINE = <define>BOOST_PFR_USE_LOOPHOLE=0 <define>BOOST_PFR_USE_CPP17=0 $(DISABLE_ON_MSVC) ;
  
  test-suite pfr_tests
    :
      [ run print_config.cpp : : : <test-info>always_show_run_output : auto_engine_config ]
  
      [ run offset_based_getter.cpp ]
  
      [ run test_tuple_sizes_on.cpp : : : <define>BOOST_PFR_RUN_TEST_ON=char : test_tuple_sizes_on_chars ]
      [ run test_tuple_sizes_on.cpp : : : <define>BOOST_PFR_RUN_TEST_ON=int : test_tuple_sizes_on_ints ]
      [ run test_tuple_sizes_on.cpp : : : <define>BOOST_PFR_RUN_TEST_ON=short : test_tuple_sizes_on_shorts ]
      [ run test_tuple_sizes_on.cpp : : : <define>BOOST_PFR_RUN_TEST_ON=void* : test_tuple_sizes_on_voidptrs ]
      [ run test_tuple_sizes_on.cpp : : : <define>BOOST_PFR_RUN_TEST_ON="std::size_t" : test_tuple_sizes_on_size_ts ]
  
      [ run run/motivating_example.cpp      : : : : auto_engine_motivating ]
      [ run ../example/sample_printing.cpp  : : : : auto_engine_sample_printing ]
      [ run ../example/get.cpp              : : : : auto_engine_get ]
      [ run ../example/quick_examples.cpp   : : : : auto_engine_quick ]
    ;
  
  local BLACKLIST_TESTS_FOR_LOOPHOLE =
      constexpr_ops                       # Loophole is not constexpr usable because of the reinterpret_cast usage
      get_const_field                     # boost::pfr::get gives compile time error on const fields
      optional_chrono                     # boost::pfr::* has problems with std::optional, produces compile time error
      template_constructor                # Template constructor in one of the fields of the aggregate
      tie_anonymous_const_field           # boost::pfr::structure_tie gives compile time error on const fields
    ;
  
  # Those tests are either 
  # * reflecting a non literal type
  # * or calling boost::pfr::get and the result is a user defined structure
  local BLACKLIST_TESTS_FOR_CLASSIC =
      constexpr_ops
      get_const_field
      get_non_default_constructible
      get_rvalue
      issue30
      issue33
      motivating_example0
      motivating_example2
      optional_chrono
      optional_like
      read_write_non_literal
      template_constructor
      template_forwarding_ref
      template_unconstrained
      tie_anonymous
      tie_anonymous_const_field
    ;
  
  for local source_file in [ glob ./run/*.cpp ] [ glob ../example/*.cpp ]
  {
      local target_name = $(source_file[1]:B) ;
      pfr_tests += [ run $(source_file) : : : $(STRUCTURED_BINDING_ENGINE) : $(target_name)_sb ] ;
      
      if ! $(target_name) in $(BLACKLIST_TESTS_FOR_LOOPHOLE)
      {
          pfr_tests += [ run $(source_file) : : : $(LOOPHOLE_ENGINE) : $(target_name)_lh ] ;
      }
      else
      {
          pfr_tests += [ compile-fail $(source_file) : $(LOOPHOLE_ENGINE) : $(target_name)_lh ] ;
      }
  
      if ! $(target_name) in $(BLACKLIST_TESTS_FOR_CLASSIC)
      {
          pfr_tests += [ run $(source_file) : : : $(CLASSIC_ENGINE) : $(target_name)_classic ] ;
      }
      else
      {
          pfr_tests += [ compile-fail $(source_file) : $(CLASSIC_ENGINE) : $(target_name)_classic ] ;
      }
  }
  
  for local source_file in [ glob ./compile-fail/*.cpp ]
  {
      local target_name = $(source_file[1]:B) ;
      pfr_tests += [ compile-fail $(source_file) : $(STRUCTURED_BINDING_ENGINE) : $(target_name)_sb ] ;
      pfr_tests += [ compile-fail $(source_file) : $(LOOPHOLE_ENGINE) : $(target_name)_lh ] ;
      pfr_tests += [ compile-fail $(source_file) : $(CLASSIC_ENGINE) : $(target_name)_classic ] ;
  }
  
  if [ python.configured ]
  {
      testing.make-test run-pyd : ../misc/generate_cpp17.py ;
  }