82#if !defined(NDEBUG) || defined(COUNT_WORK_BALANCE)
85unsigned char check_complexity::log_n =
'\0';
88trans_type check_complexity::sensible_work_grand_total = 0;
91trans_type check_complexity::cancelled_work_grand_total = 0;
94trans_type check_complexity::no_of_waiting_cycles_grand_total = 0;
104bool check_complexity::cannot_wait_before_reset =
false;
113trans_type check_complexity::no_of_waiting_cycles = 0;
122const char *check_complexity::work_names[TRANS_gj_MAX - BLOCK_MIN + 1] =
125 "2.4: while C contains a nontrivial constellation",
126 "2.10: for all s in SpB",
127 "3.29: Move Blue/Red to a new block NewB (set pointers to new block)",
128 "3.29: Move Blue/Red to a new block NewB (for all states s in NewB)",
129 "3.31: for all s in NewB",
132 "3.29: Move Blue/Red to a new block NewB (swap states)",
134 "3.6l: refine bottom state",
135 "3.15: refine visited state",
138 "3.6l: while Test is not empty (3.11l: s is blue)",
139 "3.15l: while Blue contains unvisited states",
142 "3.15r: while Red contains unvisited states",
145 "4.8: for all bottom states s in RfnB",
146 "4.15: for all old bottom states s in RedB (self-loop)",
149 "2.20: for all refinable blocks RfnB",
150 "2.17: Register that inert transitions from s go to NewC (B_to_C)",
151 "4.4: for all constellations C not in R reachable from RfnB",
154 "2.11: for all s_prime in in(s)",
155 "2.17: Register that inert transitions from s go to NewC (out)",
156 "2.17: Register that inert transitions from s go to NewC (swap "
158 "3.6l: refine outgoing transition to marked state",
160 "3.6/3.23l: refine outgoing transition",
161 "3.29: Move Blue/Red to a new block NewB (for all transitions in out(s))",
162 "3.32r: for all s_prime in out(s)",
164 "3.18: refine incoming transition",
165 "3.32l: for all s_prime in in(s)",
168 "3.6l: while Test is not empty (3.9l: s is red)",
169 "3.6l: while Test is not empty (3.9l: s is red) during postprocessing",
170 "3.18l: for all s_prime in in(s) \\ Red",
171 "3.23l: if ... s_prime has no transition to SpC",
174 "3.6r: while FromRed is not empty",
175 "3.18r: for all s_prime in in(s)",
178 "3.6l: refine outgoing transition (called from PostprocessNewBottom)",
179 "3.23l: refine outgoing transition (state is new bottom state)",
180 "4.4: for all transitions from new bottom states (a priori)",
181 "4.4: for all transitions from new bottom states (a posteriori)",
182 "4.12: for all blocks B with transitions to SpC that need postprocessing "
184 "4.12: for all blocks B with transitions to SpC that need postprocessing "
186 "4.15: for all old bottom states s in RedB",
192 "adapt_transitions_for_new_block()",
193 "create_initial_partition()",
196 "split(), find predecessors of a state in the smaller subblock",
197 "split(), while U-coroutine runs, find predecessors of a U-state",
198 "split(), while R-coroutine runs, find predecessors of a R-state",
199 "handle_new_noninert_transns()",
203 "refine_partition_until_it_becomes_stable(), find predecessors",
207 "refine_partition_until_it_becomes_stable(), stabilize",
208 "refine_partition_until_it_becomes_stable(), stabilize for large splitter",
209 "handle_new_noninert_transns(), make block_bunch-slice without bottom "
210 "states unstable (temporary counter)",
213 "move_out_slice_to_new_block()",
214 "split(), handle a transition from a state in the smaller subblock",
215 "split(), handle a transition to a state in the smaller subblock",
216 "split(), while U-coroutine runs, handle a transition to a U-state",
217 "split(), while U-coroutine runs, test noninert outgoing transitions",
218 "split(), while R-coroutine runs, handle a transition from a R-state",
219 "split(), while R-coroutine runs, handle a transition to a R-state",
220 "split(), the test for noninert transitions found a new bottom state",
221 "handle_new_noninert_transns(), make block_bunch-slice with bottom states "
223 "handle_new_noninert_transns(), make block_bunch-slice without bottom "
224 "states unstable (final counter)",
225 "refine_partition_until_it_becomes_stable(), stabilize block with bottom "
226 "states for new non-inert transitions",
227 "refine_partition_until_it_becomes_stable(), stabilize block without "
228 "bottom states for new non-inert transitions",
233 "refine_partition_until_it_becomes_stable(): find a splitter",
234 "splitB(): update BLC data structure of the smaller subblock",
237 "split_block_B_into_R_and_BminR(): carry out a split",
238 "split_block_B_into_R_and_BminR(): skip over a state",
239 "simple_splitB(): find a bottom state in the smaller subblock (i.e. in U)",
240 "simple_splitB(): find predecessors of a state in the smaller subblock",
241 "multiple_swap_states_in_block(): account for swapping states in the aborted subblock",
242 "multiple_swap_states_in_block(): swap states in the smaller subblock",
243 "simple_splitB(): find predecessors of a state in R",
244 "simple_splitB(): find predecessors of a state in U",
245 "stabilizeB(): prepare a block with new bottom states",
246 "stabilizeB(): distribute states over Phat",
247 "create_initial_partition(): set start_incoming_transitions",
250 "refine_partition_until_it_becomes_stable(): prepare tau-co-split",
251 "refine_partition_until_it_becomes_stable(): correct the end of calM",
252 "refine_partition_until_it_becomes_stable(): execute a main split",
253 "four_way_splitB(): handle a transition in the main splitter",
257 "handle a transition from a state of the smaller subblock",
258 "simple_splitB(): handle a transition to a state of the smaller subblock",
259 "refine_partition_until_it_becomes_stable(): find a cotransition",
260 "order_BLC_transitions(): sort transition",
261 "simple_splitB(): handle a transition (in the splitter) from an R-state",
262 "simple_splitB(): handle an (inert) transition to an R-state",
263 "simple_splitB(): handle an (inert) transition to a U-state",
264 "simple_splitB(): handle a transition from a potential U-state",
266 "the test for outgoing transitions found a new bottom state",
267 "splitB(): unmark transitions out of the new bottom block",
268 "splitB(): unmark transitions out of the new bottom block "
269 "(assigning work afterwards)",
270 "stabilizeB(): initialize Qhat",
271 "stabilizeB(): initialize Qhat (assigning work afterwards)",
272 "stabilizeB(): main loop",
273 "stabilizeB(): main loop (assigning work afterwards)",
274 "create_initial_partition(): refine block"
278#ifdef TEST_WORK_COUNTER_NAMES
280#define test_work_name(var, ctr) \
283 assert((var) == ctr); \
284 mCRL2log(log::debug) << "work_names[" #ctr "] = \"" \
285 << work_names[ctr] << "\".\n";\
286 (var) = (enum counter_type) ((var) + 1); \
301void check_complexity::test_work_names()
helper class for time complexity checks during test runs
counter_type
Type for complexity budget counters.
@ split_U__find_predecessors_of_U_state
@ split_R__handle_transition_to_R_state
@ refine_incoming_transition_3_18
@ stabilizeB__distribute_states_over_Phat
@ refine_partition_until_stable__stabilize_for_large_splitter
@ refine_partition_until_it_becomes_stable__find_cotransition
@ for_all_s_prime_in_pred_s_3_32l
@ for_all_s_prime_in_succ_s_3_32r
@ Move_Blue_or_Red_to_a_new_block_states_3_29
@ while_Test_is_not_empty_3_6l_s_is_blue_3_11l
@ split_block_B_into_R_and_BminR__carry_out_split
@ for_all_old_bottom_states_s_in_RedB_selfloop_4_15
@ refine_outgoing_transition_to_marked_state_3_6l
@ BLOCK_BUNCH_dnj_MIN_TEMP
@ refine_partition_until_it_becomes_stable__prepare_cosplit
@ multiple_swap_states_in_block__swap_state_in_small_block
@ while_Red_contains_unvisited_states_3_15r
@ Move_Blue_or_Red_to_a_new_block_succ_3_29
@ simple_splitB_U__handle_transition_to_U_state
@ simple_splitB__handle_transition_to_R_or_U_state
@ while_Blue_contains_unvisited_states_3_15l
@ for_all_s_prime_in_pred_s_setminus_Red_3_18l
@ for_all_transitions_from_bottom_states_a_posteriori_4_4
@ simple_splitB__find_bottom_state
@ refine_partition_until_stable__stabilize_new_noninert_a_posteriori
@ simple_splitB__test_outgoing_transitions_found_new_bottom_state
@ split__handle_transition_to_R_or_U_state
@ adapt_transitions_for_new_block
@ for_all_bottom_states_s_in_RfnB_4_8
@ for_all_s_prime_in_pred_s_3_18r
@ Move_Blue_or_Red_to_a_new_block_NewB_swap_3_29
@ refine_visited_state_3_15
@ refine_partition_until_stable__stabilize
@ multiple_swap_states_in_block__account_for_swap_in_aborted_block
@ create_initial_partition
@ for_all_transitions_from_bottom_states_a_priori_4_4
@ Move_Blue_or_Red_to_a_new_block_NewB_pointer_3_29
@ while_Test_is_not_empty_3_6l_s_is_red_3_9l_postprocessing
@ refine_outgoing_transition_from_new_bottom_3_23l
@ stabilizeB__initialize_Qhat_afterwards
@ split_block_B_into_R_and_BminR__skip_over_state
@ if___s_prime_has_transition_to_SpC_3_23l
@ Register_that_inert_transitions_from_s_go_to_NewC_swap_2_17
@ stabilizeB__prepare_block
@ handle_new_noninert_transns__make_unstable_temp
@ for_all_s_prime_in_pred_s_2_11
@ simple_splitB_R__handle_transition_to_R_state
@ simple_splitB__handle_transition_from_R_or_U_state
@ refine_partition_until_it_becomes_stable__find_splitter
@ for_all_transitions_that_need_postproc_a_posteriori_4_12
@ simple_splitB__find_predecessors_of_R_or_U_state
@ Register_that_inert_transitions_from_s_go_to_NewC_succ_2_17
@ split__test_noninert_transitions_found_new_bottom_state
@ four_way_splitB__handle_transitions_in_main_splitter
@ Register_that_inert_transitions_from_s_go_to_NewC_B_to_C_2_17
@ splitB__update_BLC_of_smaller_subblock
@ splitB__unmark_transitions_out_of_new_bottom_block
@ for_all_old_bottom_states_s_in_RedB_4_15
@ for_all_refinable_blocks_RfnB_2_20
@ splitB__unmark_transitions_out_of_new_bottom_block_afterwards
@ refine_outgoing_transition_postprocess_new_bottom_3_6l
@ stabilizeB__initialize_Qhat
@ refine_partition_until_stable__stabilize_new_noninert_a_priori
@ split_R__find_predecessors_of_R_state
@ refine_partition_until_it_becomes_stable__execute_main_split
@ simple_splitB_R__handle_transition_from_R_state
@ create_initial_partition__refine_block
@ simple_splitB_R__find_predecessors
@ create_initial_partition__set_start_incoming_transitions
@ split__handle_transition_from_R_or_U_state
@ handle_new_noninert_transns__make_unstable_a_priori
@ move_out_slice_to_new_block
@ split_U__handle_transition_to_U_state
@ split_R__handle_transition_from_R_state
@ split_U__test_noninert_transitions
@ handle_new_noninert_transns
@ order_BLC_transitions__sort_transition
@ refine_outgoing_transition_3_6_or_23l
@ simple_splitB_U__handle_transition_from_potential_U_state
@ for_all_transitions_that_need_postproc_a_priori_4_12
@ refine_partition_until_stable__find_pred
@ BLOCK_BUNCH_dnj_MAX_TEMP
@ handle_new_noninert_transns__make_unstable_a_posteriori
@ refine_partition_until_it_becomes_stable__correct_end_of_calM
@ while_Test_is_not_empty_3_6l_s_is_red_3_9l
@ stabilizeB__main_loop_afterwards
@ refine_bottom_state_3_6l
@ for_all_constellations_C_not_in_R_from_RfnB_4_4
@ simple_splitB_U__find_predecessors
@ while_C_contains_a_nontrivial_constellation_2_4
@ while_FromRed_is_not_empty_3_6r
@ split__find_predecessors_of_R_or_U_state
std::size_t trans_type
type used to store transition (numbers and) counts
std::make_signed< trans_type >::type signed_trans_type
type used to store differences between transition counters
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...