├── .editorconfig ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── feature_request.md │ └── other-issue.md ├── codecov.yml ├── pull_request_template.md ├── scripts │ ├── covertool_combine │ └── covertool_setup └── workflows │ ├── tests.yml │ └── website.yml ├── .gitignore ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── Makefile ├── README.md ├── bin └── .gitignore ├── cover ├── .gitignore └── cover-report ├── doc ├── .gitignore ├── Gemfile ├── Makefile └── overview.edoc ├── docs ├── .bundle │ └── config ├── .gitignore ├── 404.md ├── CNAME ├── Gemfile ├── Gemfile.lock ├── Makefile ├── README.md ├── _config.yml ├── _config_local.yml ├── _data │ ├── authors.yml │ ├── navigation.yml │ └── text.yml ├── _includes │ ├── footer-custom.html │ ├── head-custom.html │ ├── masthead.html │ └── yt.html ├── _posts │ ├── 2013-09-03-site.md │ ├── 2013-09-23-euc-2013.md │ ├── 2014-06-02-poolboy-example.md │ ├── 2014-06-03-poolboy-example-errors.md │ ├── 2014-08-11-euc-2014.md │ ├── 2015-06-10-euc-2015.md │ ├── 2017-08-14-euc-2017-talk.md │ ├── 2017-08-14-euc-2017-tutorial.md │ ├── 2017-10-03-publications-update.md │ ├── 2017-10-08-concuerror-eunit.md │ ├── 2017-10-14-concuerring-concuerror-ep-1.md │ ├── 2017-11-06-Announcing-Mailing-List.md │ ├── 2018-07-15-hex.md │ ├── 2020-10-10-tips.md │ ├── 2020-10-17-code-beam-sf-2019.md │ ├── 2020-10-17-functional-conf-2018.md │ └── 2020-10-24-basic-tutorial.md ├── assets │ └── pdf │ │ ├── CodeBEAMSF2019.pdf │ │ ├── ICST2013.pdf │ │ └── iFM2017.pdf ├── contact.md ├── download.md ├── faq.md ├── feed.xml ├── images │ ├── favicon.ico │ └── site-logo.png ├── index.md ├── news.md ├── publications.md ├── search.md ├── sitemap.xml └── tutorials.md ├── elvis.config ├── priv ├── concuerror ├── generate_option_docfiles └── generate_version_hrl ├── rebar.config ├── rebar.lock ├── resources ├── DPOR_paper_material │ ├── DPOR_README │ ├── foo.erl │ ├── foobar.erl │ ├── my_test.erl │ ├── run_dialyzer.sh │ ├── run_filesystem.sh │ ├── run_indexer.sh │ ├── run_last_zero.sh │ ├── run_readers.sh │ └── run_rush_hour.sh ├── bash_completion │ └── concuerror ├── erlang_questions │ └── dets_bugs │ │ ├── alt_dets_bugs.erl │ │ └── dets_bugs.erl ├── flanagan.erl ├── how-to-release.md ├── old_include │ ├── gen.hrl │ ├── gui.hrl │ └── instr.hrl ├── old_source │ ├── LICENSE │ ├── concuerror.erl │ ├── concuerror_deps.erl │ ├── concuerror_error.erl │ ├── concuerror_gui.erl │ ├── concuerror_instr.erl │ ├── concuerror_io_server.erl │ ├── concuerror_lid.erl │ ├── concuerror_log.erl │ ├── concuerror_proc_action.erl │ ├── concuerror_rep.erl │ ├── concuerror_sched.erl │ ├── concuerror_state.erl │ ├── concuerror_ticket.erl │ └── concuerror_util.erl ├── perm_tests │ ├── run_perm_tests │ └── src │ │ ├── complete_test_3.erl │ │ ├── conditional_readers_3.erl │ │ ├── depend_4_1.erl │ │ ├── depend_4_2.erl │ │ ├── depend_4_3.erl │ │ ├── depend_6_1.erl │ │ ├── depend_6_2.erl │ │ ├── depend_6_3.erl │ │ ├── depend_6_4.erl │ │ ├── depend_6_5.erl │ │ ├── etsi.erl │ │ ├── readers_2.erl │ │ └── readers_3.erl ├── syntax │ ├── block_after.erl │ ├── non_local_pat.erl │ ├── rec_uscore.erl │ └── strip_attr.erl ├── tdd │ ├── reg_server.erl │ ├── reg_server.hrl │ └── reg_server_tests.erl └── utest │ ├── concuerror_error_tests.erl │ ├── concuerror_instr_tests.erl │ ├── concuerror_lid_tests.erl │ ├── concuerror_state_tests.erl │ └── concuerror_ticket_tests.erl ├── src ├── .gitignore ├── concuerror.app.src ├── concuerror.erl ├── concuerror.hrl ├── concuerror_callback.erl ├── concuerror_dependencies.erl ├── concuerror_estimator.erl ├── concuerror_inspect.erl ├── concuerror_instrumenter.erl ├── concuerror_io_lib.erl ├── concuerror_loader.erl ├── concuerror_logger.erl ├── concuerror_options.erl ├── concuerror_scheduler.erl └── concuerror_window_average.erl ├── test ├── README.md ├── concuerror_logger_tests.erl └── concuerror_options_tests.erl ├── tests-real ├── Makefile ├── README.md └── suites │ ├── check_version.escript │ ├── erlang-litmus │ ├── .gitignore │ ├── Makefile │ ├── run_litmus.escript │ └── test │ ├── gproc │ ├── .gitignore │ ├── Makefile │ ├── ref │ │ ├── t_reg_or_locate2.out │ │ ├── t_simple_reg.out │ │ ├── t_simple_reg_or_locate.out │ │ ├── test3.out │ │ └── test4.out │ ├── test │ └── test.erl │ ├── makefile │ ├── Makefile │ ├── footer │ ├── header │ └── makefile-tests │ ├── options │ ├── .gitignore │ ├── Makefile │ ├── autocomplete-tests │ ├── autocomplete │ │ ├── autocomplete.sh │ │ ├── autocomplete_common.erl │ │ ├── autocomplete_help.erl │ │ ├── autocomplete_long.erl │ │ └── autocomplete_short.erl │ ├── footer │ ├── header │ ├── option1-tests │ ├── option2-tests │ ├── option3-tests │ ├── other-tests │ └── src │ │ ├── bad.erl │ │ ├── bad_attribute.erl │ │ ├── bad_attribute_1.erl │ │ ├── bad_attribute_2.erl │ │ ├── bad_attribute_3.erl │ │ ├── bad_attribute_4.erl │ │ ├── bad_attribute_5.erl │ │ ├── debug_works.erl │ │ ├── eunit_sample.erl │ │ ├── excluded.erl │ │ ├── excluding.erl │ │ ├── first_and_other_deadlock.erl │ │ ├── foo.erl │ │ ├── from_shell.erl │ │ ├── load_nif.erl │ │ ├── other_deadlock.erl │ │ └── six.erl │ ├── output │ ├── Makefile │ ├── footer │ ├── header │ ├── output-tests │ ├── ref │ │ └── graph.dot │ └── src │ │ ├── a_fun.erl │ │ ├── buggy.erl │ │ ├── deadlock.erl │ │ ├── fig3.1-ext.erl │ │ ├── harmless_exit.erl │ │ ├── many_scheds.erl │ │ ├── more_stacktrace.erl │ │ ├── race_info.erl │ │ ├── register.erl │ │ └── stacktrace.erl │ ├── poolboy │ ├── .gitignore │ ├── Makefile │ └── test │ └── print_colors └── tests ├── README.md ├── differ ├── results └── .gitignore ├── runtests.py ├── scenarios.erl ├── suites ├── advanced_tests │ ├── results │ │ ├── gen_server_bug-test_register-inf-dpor.txt │ │ ├── gen_server_bug-test_without_register-inf-dpor.txt │ │ ├── manolis-test_2workers_small-inf-dpor.txt │ │ ├── percept-test-inf-dpor.txt │ │ ├── preemption-preemption-inf-dpor.txt │ │ ├── receive_deps-test-inf-dpor.txt │ │ ├── receive_deps_kill-test-inf-dpor.txt │ │ ├── receive_pats-test1-inf-dpor.txt │ │ ├── receive_pats-test2-inf-dpor.txt │ │ ├── receive_pats-test3-inf-dpor.txt │ │ ├── receive_pats-test4-inf-dpor.txt │ │ ├── receive_patterns-test1-inf-optimal.txt │ │ ├── receive_patterns-test2-inf-optimal.txt │ │ ├── ring_leader_election-ring_leader_election-inf-dpor.txt │ │ ├── ring_leader_election_barrier-ring_leader_election_barrier-inf-dpor.txt │ │ ├── ring_leader_election_symmetric-ring_leader_election_symmetric-inf-dpor.txt │ │ ├── ring_leader_election_symmetric_buffer-ring_leader_election_symmetric_buffer-inf-dpor.txt │ │ ├── ring_leader_election_symmetric_buffer_2-ring_leader_election_symmetric_buffer_2-inf-dpor.txt │ │ ├── shared_ptr-shared_ptr-inf-dpor.txt │ │ ├── shootout-test1-inf-dpor.txt │ │ ├── simple_registry-simple_registry-inf-dpor.txt │ │ ├── source_killer-test-inf-dpor.txt │ │ ├── source_killer-test-inf-source.txt │ │ └── vjeko_peer-concuerror_test-inf-dpor.txt │ └── src │ │ ├── gen_server_bug.erl │ │ ├── indexer_example.erl │ │ ├── manolis │ │ ├── good_testcase.txt │ │ ├── readme.txt │ │ ├── rush_hour.erl │ │ ├── search.erl │ │ └── test.erl │ │ ├── percept.erl │ │ ├── preemption.erl │ │ ├── receive_deps.erl │ │ ├── receive_deps_kill.erl │ │ ├── receive_pats.erl │ │ ├── receive_patterns.erl │ │ ├── ring_leader_election.erl │ │ ├── ring_leader_election_barrier.erl │ │ ├── ring_leader_election_symmetric.erl │ │ ├── ring_leader_election_symmetric_buffer.erl │ │ ├── ring_leader_election_symmetric_buffer_2.erl │ │ ├── send_order.erl │ │ ├── shared_ptr.erl │ │ ├── shootout │ │ ├── pidigits.erl │ │ ├── test.erl │ │ └── thread_ring.erl │ │ ├── simple_registry.erl │ │ ├── source_killer.erl │ │ └── vjeko_peer.erl ├── basic_tests │ ├── results │ │ ├── ac_tab_insert-test-inf-optimal.txt │ │ ├── after_test_2-after_test_2-inf-dpor.txt │ │ ├── after_test_3-after_test_3-inf-dpor.txt │ │ ├── after_vs_trap_exit-after_vs_trap_exit-inf-dpor.txt │ │ ├── allow_first_crash-test-inf-dpor.txt │ │ ├── assert_filter-test-inf-dpor.txt │ │ ├── bad_dictionary-bad_erase-inf-optimal.txt │ │ ├── bad_dictionary-bad_get-inf-optimal.txt │ │ ├── bad_dictionary-bad_put-inf-optimal.txt │ │ ├── bad_whereis-test-inf-dpor.txt │ │ ├── code_when_undef-test-inf-optimal.txt │ │ ├── concuerror_crash-test-inf-dpor.txt │ │ ├── curious_builtins-test1-inf-dpor.txt │ │ ├── curious_builtins-test2-inf-dpor.txt │ │ ├── curious_builtins-test3-inf-dpor.txt │ │ ├── dead_receive-dead_receive-inf-dpor.txt │ │ ├── deeper_exit-test-inf-dpor.txt │ │ ├── demonitor_exhaustive-child_both-inf-dpor.txt │ │ ├── demonitor_exhaustive-child_flush-inf-dpor.txt │ │ ├── demonitor_exhaustive-child_info-inf-dpor.txt │ │ ├── demonitor_exhaustive-child_none-inf-dpor.txt │ │ ├── demonitor_exhaustive-parent_both-inf-dpor.txt │ │ ├── demonitor_exhaustive-parent_flush-inf-dpor.txt │ │ ├── demonitor_exhaustive-parent_info-inf-dpor.txt │ │ ├── demonitor_exhaustive-parent_none-inf-dpor.txt │ │ ├── demonitor_flush-test1-inf-dpor.txt │ │ ├── demonitor_flush-test2-inf-dpor.txt │ │ ├── demonitor_flush-test3-inf-dpor.txt │ │ ├── demonitor_flush-test4-inf-dpor.txt │ │ ├── demonitor_flush-test5-inf-dpor.txt │ │ ├── demonitor_flush-test6-inf-dpor.txt │ │ ├── demonitor_sane_opts-test1-inf-dpor.txt │ │ ├── demonitor_sane_opts-test2-inf-dpor.txt │ │ ├── demonitor_sane_opts-test3-inf-dpor.txt │ │ ├── depth_bound-test-inf-dpor.txt │ │ ├── erlang_display-test-inf-dpor.txt │ │ ├── erlang_display_string-test-inf-dpor.txt │ │ ├── ets_delete-ets_delete-inf-dpor.txt │ │ ├── ets_delete-ets_delete_bad-inf-dpor.txt │ │ ├── ets_delete-ets_delete_plain-inf-dpor.txt │ │ ├── ets_delete_2-ets_delete_2-inf-dpor.txt │ │ ├── ets_delete_2-ets_delete_2_twice-inf-dpor.txt │ │ ├── ets_delete_all-delete_all_bad-inf-optimal.txt │ │ ├── ets_delete_all-delete_all_good-inf-optimal.txt │ │ ├── ets_delete_all-race_delete_all_read-inf-optimal.txt │ │ ├── ets_delete_all-race_delete_all_write-inf-optimal.txt │ │ ├── ets_delete_object-test1-inf-dpor.txt │ │ ├── ets_delete_object-test2-inf-dpor.txt │ │ ├── ets_delete_object-test3-inf-dpor.txt │ │ ├── ets_exceptions-test-inf-dpor.txt │ │ ├── ets_give_away-give_away_bad-inf-optimal.txt │ │ ├── ets_give_away-give_away_good-inf-optimal.txt │ │ ├── ets_global_global-new_delete-inf-optimal.txt │ │ ├── ets_global_global-new_exit-inf-optimal.txt │ │ ├── ets_global_global-new_new-inf-optimal.txt │ │ ├── ets_global_global-new_rename_free-inf-optimal.txt │ │ ├── ets_global_global-new_rename_taken-inf-optimal.txt │ │ ├── ets_global_global-rename_delete-inf-optimal.txt │ │ ├── ets_global_global-rename_exit-inf-optimal.txt │ │ ├── ets_global_global-rename_rename_free-inf-optimal.txt │ │ ├── ets_global_global-rename_rename_taken-inf-optimal.txt │ │ ├── ets_heir-ets_heir-inf-dpor.txt │ │ ├── ets_heir-test-inf-dpor.txt │ │ ├── ets_heir-test1-inf-dpor.txt │ │ ├── ets_heir-test2-inf-dpor.txt │ │ ├── ets_heir_2-ets_heir_2-inf-dpor.txt │ │ ├── ets_info-info_2_badarg-inf-optimal.txt │ │ ├── ets_info-info_bad-inf-optimal.txt │ │ ├── ets_info-info_badarg-inf-optimal.txt │ │ ├── ets_info-info_good-inf-optimal.txt │ │ ├── ets_info-info_system-inf-optimal.txt │ │ ├── ets_info_details-test-inf-optimal.txt │ │ ├── ets_insert_new-test-inf-dpor.txt │ │ ├── ets_insert_objects-ets_insert_objects-inf-dpor.txt │ │ ├── ets_many_insert_new-ets_many_insert_new-inf-dpor.txt │ │ ├── ets_new-test-inf-dpor.txt │ │ ├── ets_new-test-inf.txt │ │ ├── ets_new_failure-ets_new_failure-inf-dpor.txt │ │ ├── ets_new_failure_2-ets_new_failure_2-inf-dpor.txt │ │ ├── ets_new_failure_3-ets_new_failure_3-inf-dpor.txt │ │ ├── ets_ref_keys-ets_ref_keys-0.txt │ │ ├── ets_ref_keys-ets_ref_keys-inf-dpor.txt │ │ ├── ets_rename-rename_bad-inf-optimal.txt │ │ ├── ets_rename-rename_good-inf-optimal.txt │ │ ├── ets_rename-rename_public-inf-optimal.txt │ │ ├── ets_select-match_against_different_keys-inf-dpor.txt │ │ ├── ets_select-match_against_different_matchspec-inf-dpor.txt │ │ ├── ets_select-match_against_different_tuples-inf-dpor.txt │ │ ├── ets_select-match_against_matching_keys-inf-dpor.txt │ │ ├── ets_select-match_against_matching_matchspec-inf-dpor.txt │ │ ├── ets_select-match_against_matching_tuples-inf-dpor.txt │ │ ├── ets_select-match_object_against_different_keys-inf-dpor.txt │ │ ├── ets_select-match_object_against_different_matchspec-inf-dpor.txt │ │ ├── ets_select-match_object_against_different_tuples-inf-dpor.txt │ │ ├── ets_select-match_object_against_matching_keys-inf-dpor.txt │ │ ├── ets_select-match_object_against_matching_matchspec-inf-dpor.txt │ │ ├── ets_select-match_object_against_matching_tuples-inf-dpor.txt │ │ ├── ets_select-select_against_different_keys-inf-dpor.txt │ │ ├── ets_select-select_against_different_matchspec-inf-dpor.txt │ │ ├── ets_select-select_against_different_tuples-inf-dpor.txt │ │ ├── ets_select-select_against_matching_keys-inf-dpor.txt │ │ ├── ets_select-select_against_matching_matchspec-inf-dpor.txt │ │ ├── ets_select-select_against_matching_tuples-inf-dpor.txt │ │ ├── ets_select-select_delete_against_different_any-inf-dpor.txt │ │ ├── ets_select-select_delete_against_different_keys-inf-dpor.txt │ │ ├── ets_select-select_delete_against_different_matchspec-inf-dpor.txt │ │ ├── ets_select-select_delete_against_different_tuples-inf-dpor.txt │ │ ├── ets_select-select_delete_against_matching_any-inf-dpor.txt │ │ ├── ets_select-select_delete_against_matching_keys-inf-dpor.txt │ │ ├── ets_select-select_delete_against_matching_matchspec-inf-dpor.txt │ │ ├── ets_select-select_delete_against_matching_tuples-inf-dpor.txt │ │ ├── ets_unguarded-test-inf-optimal.txt │ │ ├── ets_unnamed-test1-inf-dpor.txt │ │ ├── ets_unnamed-test2-inf-dpor.txt │ │ ├── ets_unnamed-test3-inf-dpor.txt │ │ ├── ets_update_counter-test-inf-dpor.txt │ │ ├── ets_update_counter-test1-inf-dpor.txt │ │ ├── ets_update_element-race_update_element_r-inf-optimal.txt │ │ ├── ets_update_element-race_update_element_w-inf-optimal.txt │ │ ├── ets_update_element-update_element_bad-inf-optimal.txt │ │ ├── ets_update_element-update_element_good-inf-optimal.txt │ │ ├── ets_whereis-race_whereis_r-inf-optimal.txt │ │ ├── ets_whereis-race_whereis_w-inf-optimal.txt │ │ ├── ets_whereis-whereis_bad-inf-optimal.txt │ │ ├── ets_whereis-whereis_badarg-inf-optimal.txt │ │ ├── ets_whereis-whereis_good-inf-optimal.txt │ │ ├── ets_whereis-whereis_race_del-inf-optimal.txt │ │ ├── ets_whereis-whereis_race_exit-inf-optimal.txt │ │ ├── ets_whereis-whereis_race_wr-inf-optimal.txt │ │ ├── ets_whereis-whereis_race_ww-inf-optimal.txt │ │ ├── ets_whereis-whereis_system-inf-optimal.txt │ │ ├── exit-test1-inf-dpor.txt │ │ ├── exit-test1-inf.txt │ │ ├── exit-test2-inf-dpor.txt │ │ ├── exit-test2-inf.txt │ │ ├── exit-test3-inf-dpor.txt │ │ ├── exit-test3-inf.txt │ │ ├── exit-test4-inf-dpor.txt │ │ ├── exit-test5-inf-dpor.txt │ │ ├── exit-test6-inf-dpor.txt │ │ ├── exit_kill-test-inf-dpor.txt │ │ ├── exit_message_unpredicted-exit_message_unpredicted-inf-dpor.txt │ │ ├── file_read_file-test-inf-dpor.txt │ │ ├── fun_fail-test1-inf-dpor.txt │ │ ├── fun_fail-test2-inf-dpor.txt │ │ ├── fun_fail-test3-inf-dpor.txt │ │ ├── group_leader-test-inf-dpor.txt │ │ ├── group_leader-test1-inf-dpor.txt │ │ ├── group_leader2-test-inf-dpor.txt │ │ ├── group_leader3-test-inf-dpor.txt │ │ ├── halt_error-test1-inf-optimal.txt │ │ ├── halt_error-test2-inf-optimal.txt │ │ ├── hibernate-test-inf-optimal.txt │ │ ├── hopeless_after-hopeless_after-inf-dpor.txt │ │ ├── i_hate_myself-i_hate_myself-inf-dpor.txt │ │ ├── ignore_error_1-test-inf-dpor.txt │ │ ├── ignore_error_2-test-inf-dpor.txt │ │ ├── ignore_error_3-test-inf-dpor.txt │ │ ├── immediate_delivery-test1-inf-dpor.txt │ │ ├── immediate_delivery-test2-inf-dpor.txt │ │ ├── immediate_delivery-test3-inf-dpor.txt │ │ ├── init_race_condition-test-inf-dpor.txt │ │ ├── init_race_condition-test-inf.txt │ │ ├── inspect_system-test-inf-dpor.txt │ │ ├── instr_apply-test-inf-dpor.txt │ │ ├── instr_apply-test-inf.txt │ │ ├── io_error-test-inf-dpor.txt │ │ ├── io_format-test-inf-dpor.txt │ │ ├── io_format_2-test-inf-dpor.txt │ │ ├── io_format_3-test-inf-dpor.txt │ │ ├── irrelevant_send-irrelevant_send-inf-dpor.txt │ │ ├── is_process_alive_1-is_process_alive_1-inf-dpor.txt │ │ ├── keep_going-test-inf-dpor.txt │ │ ├── kill_running_waiting-test-inf-dpor.txt │ │ ├── late_hope-late_hope-inf-dpor.txt │ │ ├── lid_test-test-inf-dpor.txt │ │ ├── link_after-link_after-inf-dpor.txt │ │ ├── load_before_start-test-inf-dpor.txt │ │ ├── main_and_backup-main_and_backup-inf-dpor.txt │ │ ├── many_kill-test-inf-dpor.txt │ │ ├── many_links-many_links-inf-dpor.txt │ │ ├── many_monitors-many_monitors-inf-dpor.txt │ │ ├── many_send_to_dead-many_send_to_dead-inf-dpor.txt │ │ ├── many_send_to_dead_2-many_send_to_dead_2-inf-dpor.txt │ │ ├── message_queue_length-test-inf-optimal.txt │ │ ├── messed_deliveries-test-inf-dpor.txt │ │ ├── module_loaded_dep-test-inf-optimal.txt │ │ ├── monitor_demonitor-monitor_demonitor-inf-dpor.txt │ │ ├── monitor_failure-monitor_failure-inf-dpor.txt │ │ ├── monitor_info-test1-inf-dpor.txt │ │ ├── monitor_info-test2-inf-dpor.txt │ │ ├── monitor_missing_messages-monitor_missing_messages-inf-dpor.txt │ │ ├── monitor_named-test-inf-dpor.txt │ │ ├── monitor_order-test-inf-optimal.txt │ │ ├── monotonic_time-test-inf-optimal.txt │ │ ├── node_names-test1-inf-dpor.txt │ │ ├── node_names-test2-inf-dpor.txt │ │ ├── normal_exit-normal_exit-inf-dpor.txt │ │ ├── normal_shutdown-test-inf-dpor.txt │ │ ├── normal_tuple_exit-test-inf-dpor.txt │ │ ├── os_timestamp-test-inf-dpor.txt │ │ ├── pids_are_unsafe-test-inf-dpor.txt │ │ ├── process_flag_link-process_flag_link-inf-dpor.txt │ │ ├── process_info-test1-inf-dpor.txt │ │ ├── process_info-test2-inf-dpor.txt │ │ ├── process_info-test3-inf-dpor.txt │ │ ├── process_info-test_current_function-inf-dpor.txt │ │ ├── process_info-test_current_function_top-inf-dpor.txt │ │ ├── process_info-test_message_queue_len-inf-dpor.txt │ │ ├── process_info-test_messages-inf-dpor.txt │ │ ├── process_info-test_mql_flush-inf-dpor.txt │ │ ├── processes-test1-inf-dpor.txt │ │ ├── processes-test2-inf-dpor.txt │ │ ├── processes_leader-test-inf-optimal.txt │ │ ├── racing_after-test-inf-dpor.txt │ │ ├── receive_after-receive_after-inf-dpor.txt │ │ ├── receive_and_after-receive_and_after-inf-dpor.txt │ │ ├── receive_catchall-test1-inf-dpor.txt │ │ ├── receive_catchall-test2-inf-dpor.txt │ │ ├── receive_catchall-test3-inf-dpor.txt │ │ ├── receive_exit-test-inf-dpor.txt │ │ ├── receive_exit-test1-inf-dpor.txt │ │ ├── receive_exit-test2-inf-dpor.txt │ │ ├── receive_exit-test3-inf-dpor.txt │ │ ├── receive_with_guard-receive_with_guard-inf-dpor.txt │ │ ├── receive_without_trapping-receive_without_trapping-inf-dpor.txt │ │ ├── register_link-test-inf-optimal.txt │ │ ├── registered_1-registered_1-inf-dpor.txt │ │ ├── registered_2-registered_2-inf-dpor.txt │ │ ├── registered_send_1-registered_send_1-inf-dpor.txt │ │ ├── registered_send_2-registered_send_2-inf-dpor.txt │ │ ├── registered_send_3-registered_send_3-inf-dpor.txt │ │ ├── replay_sanity-replay_sanity-inf-dpor.txt │ │ ├── report_blocks-test-inf-dpor.txt │ │ ├── reuse_raw_pid-test-inf-dpor.txt │ │ ├── safeops_coverage-test-inf-optimal.txt │ │ ├── sched_tests-test_3_proc_receive_exit-0-dpor.txt │ │ ├── sched_tests-test_3_proc_receive_exit-0.txt │ │ ├── sched_tests-test_3_proc_receive_exit-1-dpor.txt │ │ ├── sched_tests-test_3_proc_receive_exit-1.txt │ │ ├── sched_tests-test_3_proc_receive_exit-2-dpor.txt │ │ ├── sched_tests-test_3_proc_receive_exit-2.txt │ │ ├── sched_tests-test_3_proc_receive_exit-inf-dpor.txt │ │ ├── sched_tests-test_3_proc_receive_exit-inf.txt │ │ ├── sched_tests-test_3_proc_send_receive-0-dpor.txt │ │ ├── sched_tests-test_3_proc_send_receive-0.txt │ │ ├── sched_tests-test_3_proc_send_receive-1-dpor.txt │ │ ├── sched_tests-test_3_proc_send_receive-1.txt │ │ ├── sched_tests-test_3_proc_send_receive-2-dpor.txt │ │ ├── sched_tests-test_3_proc_send_receive-2.txt │ │ ├── sched_tests-test_3_proc_send_receive-3-dpor.txt │ │ ├── sched_tests-test_3_proc_send_receive-3.txt │ │ ├── sched_tests-test_3_proc_send_receive-4-dpor.txt │ │ ├── sched_tests-test_3_proc_send_receive-4.txt │ │ ├── sched_tests-test_3_proc_send_receive-5-dpor.txt │ │ ├── sched_tests-test_3_proc_send_receive-5.txt │ │ ├── sched_tests-test_3_proc_send_receive-6-dpor.txt │ │ ├── sched_tests-test_3_proc_send_receive-6.txt │ │ ├── sched_tests-test_3_proc_send_receive-7-dpor.txt │ │ ├── sched_tests-test_3_proc_send_receive-7.txt │ │ ├── sched_tests-test_3_proc_send_receive-inf-dpor.txt │ │ ├── sched_tests-test_3_proc_send_receive-inf.txt │ │ ├── sched_tests-test_after_clause_preemption-0-dpor.txt │ │ ├── sched_tests-test_after_clause_preemption-0.txt │ │ ├── sched_tests-test_after_clause_preemption-1-dpor.txt │ │ ├── sched_tests-test_after_clause_preemption-1.txt │ │ ├── sched_tests-test_after_clause_preemption-2-dpor.txt │ │ ├── sched_tests-test_after_clause_preemption-2.txt │ │ ├── sched_tests-test_after_clause_preemption-3-dpor.txt │ │ ├── sched_tests-test_after_clause_preemption-3.txt │ │ ├── sched_tests-test_after_clause_preemption-inf-dpor.txt │ │ ├── sched_tests-test_after_clause_preemption-inf.txt │ │ ├── sched_tests-test_halt_0-0-dpor.txt │ │ ├── sched_tests-test_halt_0-0.txt │ │ ├── sched_tests-test_halt_0-inf-dpor.txt │ │ ├── sched_tests-test_halt_0-inf.txt │ │ ├── sched_tests-test_halt_1-0-dpor.txt │ │ ├── sched_tests-test_halt_1-0.txt │ │ ├── sched_tests-test_halt_1-inf-dpor.txt │ │ ├── sched_tests-test_halt_1-inf.txt │ │ ├── sched_tests-test_link_receive_exit-0-dpor.txt │ │ ├── sched_tests-test_link_receive_exit-0.txt │ │ ├── sched_tests-test_link_receive_exit-1-dpor.txt │ │ ├── sched_tests-test_link_receive_exit-1.txt │ │ ├── sched_tests-test_link_receive_exit-inf-dpor.txt │ │ ├── sched_tests-test_link_receive_exit-inf.txt │ │ ├── sched_tests-test_link_unlink-0-dpor.txt │ │ ├── sched_tests-test_link_unlink-0.txt │ │ ├── sched_tests-test_link_unlink-1-dpor.txt │ │ ├── sched_tests-test_link_unlink-1.txt │ │ ├── sched_tests-test_link_unlink-2-dpor.txt │ │ ├── sched_tests-test_link_unlink-2.txt │ │ ├── sched_tests-test_link_unlink-3-dpor.txt │ │ ├── sched_tests-test_link_unlink-3.txt │ │ ├── sched_tests-test_link_unlink-inf-dpor.txt │ │ ├── sched_tests-test_link_unlink-inf.txt │ │ ├── sched_tests-test_monitor_unexisting-0-dpor.txt │ │ ├── sched_tests-test_monitor_unexisting-0.txt │ │ ├── sched_tests-test_monitor_unexisting-1-dpor.txt │ │ ├── sched_tests-test_monitor_unexisting-1.txt │ │ ├── sched_tests-test_monitor_unexisting-inf-dpor.txt │ │ ├── sched_tests-test_monitor_unexisting-inf.txt │ │ ├── sched_tests-test_nested_send_receive_block_twice-0-dpor.txt │ │ ├── sched_tests-test_nested_send_receive_block_twice-0.txt │ │ ├── sched_tests-test_nested_send_receive_block_twice-1-dpor.txt │ │ ├── sched_tests-test_nested_send_receive_block_twice-1.txt │ │ ├── sched_tests-test_nested_send_receive_block_twice-2-dpor.txt │ │ ├── sched_tests-test_nested_send_receive_block_twice-2.txt │ │ ├── sched_tests-test_receive-0-dpor.txt │ │ ├── sched_tests-test_receive-0.txt │ │ ├── sched_tests-test_receive-inf-dpor.txt │ │ ├── sched_tests-test_receive-inf.txt │ │ ├── sched_tests-test_receive_2-0-dpor.txt │ │ ├── sched_tests-test_receive_2-0.txt │ │ ├── sched_tests-test_receive_2-inf-dpor.txt │ │ ├── sched_tests-test_receive_2-inf.txt │ │ ├── sched_tests-test_receive_after_block_expr_action-0-dpor.txt │ │ ├── sched_tests-test_receive_after_block_expr_action-0.txt │ │ ├── sched_tests-test_receive_after_block_expr_action-inf-dpor.txt │ │ ├── sched_tests-test_receive_after_block_expr_action-inf.txt │ │ ├── sched_tests-test_receive_after_infinity_no_patterns-0-dpor.txt │ │ ├── sched_tests-test_receive_after_infinity_no_patterns-0.txt │ │ ├── sched_tests-test_receive_after_infinity_no_patterns-inf-dpor.txt │ │ ├── sched_tests-test_receive_after_infinity_no_patterns-inf.txt │ │ ├── sched_tests-test_receive_after_infinity_with_pattern-0-dpor.txt │ │ ├── sched_tests-test_receive_after_infinity_with_pattern-0.txt │ │ ├── sched_tests-test_receive_after_infinity_with_pattern-inf-dpor.txt │ │ ├── sched_tests-test_receive_after_infinity_with_pattern-inf.txt │ │ ├── sched_tests-test_receive_after_no_patterns-0-dpor.txt │ │ ├── sched_tests-test_receive_after_no_patterns-0.txt │ │ ├── sched_tests-test_receive_after_no_patterns-1-dpor.txt │ │ ├── sched_tests-test_receive_after_no_patterns-1.txt │ │ ├── sched_tests-test_receive_after_no_patterns-2-dpor.txt │ │ ├── sched_tests-test_receive_after_no_patterns-2.txt │ │ ├── sched_tests-test_receive_after_no_patterns-inf-dpor.txt │ │ ├── sched_tests-test_receive_after_no_patterns-inf.txt │ │ ├── sched_tests-test_receive_after_with_pattern-0-dpor.txt │ │ ├── sched_tests-test_receive_after_with_pattern-0.txt │ │ ├── sched_tests-test_receive_after_with_pattern-1-dpor.txt │ │ ├── sched_tests-test_receive_after_with_pattern-1.txt │ │ ├── sched_tests-test_receive_after_with_pattern-2-dpor.txt │ │ ├── sched_tests-test_receive_after_with_pattern-2.txt │ │ ├── sched_tests-test_receive_after_with_pattern-3-dpor.txt │ │ ├── sched_tests-test_receive_after_with_pattern-3.txt │ │ ├── sched_tests-test_receive_after_with_pattern-inf-dpor.txt │ │ ├── sched_tests-test_receive_after_with_pattern-inf.txt │ │ ├── sched_tests-test_register_unregister-0-dpor.txt │ │ ├── sched_tests-test_register_unregister-0.txt │ │ ├── sched_tests-test_register_unregister-1-dpor.txt │ │ ├── sched_tests-test_register_unregister-1.txt │ │ ├── sched_tests-test_register_unregister-2-dpor.txt │ │ ├── sched_tests-test_register_unregister-2.txt │ │ ├── sched_tests-test_register_unregister-3-dpor.txt │ │ ├── sched_tests-test_register_unregister-3.txt │ │ ├── sched_tests-test_register_unregister-inf-dpor.txt │ │ ├── sched_tests-test_register_unregister-inf.txt │ │ ├── sched_tests-test_send-0-dpor.txt │ │ ├── sched_tests-test_send-0.txt │ │ ├── sched_tests-test_send-1-dpor.txt │ │ ├── sched_tests-test_send-1.txt │ │ ├── sched_tests-test_send-inf-dpor.txt │ │ ├── sched_tests-test_send-inf.txt │ │ ├── sched_tests-test_send_2-0-dpor.txt │ │ ├── sched_tests-test_send_2-0.txt │ │ ├── sched_tests-test_send_2-1-dpor.txt │ │ ├── sched_tests-test_send_2-1.txt │ │ ├── sched_tests-test_send_2-inf-dpor.txt │ │ ├── sched_tests-test_send_2-inf.txt │ │ ├── sched_tests-test_send_3-0-dpor.txt │ │ ├── sched_tests-test_send_3-0.txt │ │ ├── sched_tests-test_send_3-1-dpor.txt │ │ ├── sched_tests-test_send_3-1.txt │ │ ├── sched_tests-test_send_3-inf-dpor.txt │ │ ├── sched_tests-test_send_3-inf.txt │ │ ├── sched_tests-test_send_receive-0-dpor.txt │ │ ├── sched_tests-test_send_receive-0.txt │ │ ├── sched_tests-test_send_receive-1-dpor.txt │ │ ├── sched_tests-test_send_receive-1.txt │ │ ├── sched_tests-test_send_receive-2-dpor.txt │ │ ├── sched_tests-test_send_receive-2.txt │ │ ├── sched_tests-test_send_receive-inf-dpor.txt │ │ ├── sched_tests-test_send_receive-inf.txt │ │ ├── sched_tests-test_send_receive_2-0-dpor.txt │ │ ├── sched_tests-test_send_receive_2-0.txt │ │ ├── sched_tests-test_send_receive_2-1-dpor.txt │ │ ├── sched_tests-test_send_receive_2-1.txt │ │ ├── sched_tests-test_send_receive_2-2-dpor.txt │ │ ├── sched_tests-test_send_receive_2-2.txt │ │ ├── sched_tests-test_send_receive_2-inf-dpor.txt │ │ ├── sched_tests-test_send_receive_2-inf.txt │ │ ├── sched_tests-test_send_receive_3-0-dpor.txt │ │ ├── sched_tests-test_send_receive_3-0.txt │ │ ├── sched_tests-test_send_receive_3-1-dpor.txt │ │ ├── sched_tests-test_send_receive_3-1.txt │ │ ├── sched_tests-test_send_receive_3-2-dpor.txt │ │ ├── sched_tests-test_send_receive_3-2.txt │ │ ├── sched_tests-test_send_receive_3-inf-dpor.txt │ │ ├── sched_tests-test_send_receive_3-inf.txt │ │ ├── sched_tests-test_spawn-0-dpor.txt │ │ ├── sched_tests-test_spawn-0.txt │ │ ├── sched_tests-test_spawn-1-dpor.txt │ │ ├── sched_tests-test_spawn-1.txt │ │ ├── sched_tests-test_spawn-inf-dpor.txt │ │ ├── sched_tests-test_spawn-inf.txt │ │ ├── sched_tests-test_spawn_link_race-0-dpor.txt │ │ ├── sched_tests-test_spawn_link_race-0.txt │ │ ├── sched_tests-test_spawn_link_race-1-dpor.txt │ │ ├── sched_tests-test_spawn_link_race-1.txt │ │ ├── sched_tests-test_spawn_link_race-inf-dpor.txt │ │ ├── sched_tests-test_spawn_link_race-inf.txt │ │ ├── sched_tests-test_spawn_link_receive_exit-0-dpor.txt │ │ ├── sched_tests-test_spawn_link_receive_exit-0.txt │ │ ├── sched_tests-test_spawn_link_receive_exit-1-dpor.txt │ │ ├── sched_tests-test_spawn_link_receive_exit-1.txt │ │ ├── sched_tests-test_spawn_link_receive_exit-inf-dpor.txt │ │ ├── sched_tests-test_spawn_link_receive_exit-inf.txt │ │ ├── sched_tests-test_spawn_link_unlink-0-dpor.txt │ │ ├── sched_tests-test_spawn_link_unlink-0.txt │ │ ├── sched_tests-test_spawn_link_unlink-1-dpor.txt │ │ ├── sched_tests-test_spawn_link_unlink-1.txt │ │ ├── sched_tests-test_spawn_link_unlink-2-dpor.txt │ │ ├── sched_tests-test_spawn_link_unlink-2.txt │ │ ├── sched_tests-test_spawn_link_unlink-inf-dpor.txt │ │ ├── sched_tests-test_spawn_link_unlink-inf.txt │ │ ├── sched_tests-test_spawn_link_unlink_2-0-dpor.txt │ │ ├── sched_tests-test_spawn_link_unlink_2-0.txt │ │ ├── sched_tests-test_spawn_link_unlink_2-1-dpor.txt │ │ ├── sched_tests-test_spawn_link_unlink_2-1.txt │ │ ├── sched_tests-test_spawn_link_unlink_2-inf-dpor.txt │ │ ├── sched_tests-test_spawn_link_unlink_2-inf.txt │ │ ├── sched_tests-test_spawn_link_unlink_3-0-dpor.txt │ │ ├── sched_tests-test_spawn_link_unlink_3-0.txt │ │ ├── sched_tests-test_spawn_link_unlink_3-1-dpor.txt │ │ ├── sched_tests-test_spawn_link_unlink_3-1.txt │ │ ├── sched_tests-test_spawn_link_unlink_3-inf-dpor.txt │ │ ├── sched_tests-test_spawn_link_unlink_3-inf.txt │ │ ├── sched_tests-test_spawn_monitor-0-dpor.txt │ │ ├── sched_tests-test_spawn_monitor-0.txt │ │ ├── sched_tests-test_spawn_monitor-inf-dpor.txt │ │ ├── sched_tests-test_spawn_monitor-inf.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor-0-dpor.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor-0.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor-1-dpor.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor-1.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor-inf-dpor.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor-inf.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_2-0-dpor.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_2-0.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_2-1-dpor.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_2-1.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_2-inf-dpor.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_2-inf.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_3-0-dpor.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_3-0.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_3-1-dpor.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_3-1.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_3-inf-dpor.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_3-inf.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_4-0-dpor.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_4-0.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_4-1-dpor.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_4-1.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_4-inf-dpor.txt │ │ ├── sched_tests-test_spawn_monitor_demonitor_4-inf.txt │ │ ├── sched_tests-test_spawn_opt_link_receive_exit-0-dpor.txt │ │ ├── sched_tests-test_spawn_opt_link_receive_exit-0.txt │ │ ├── sched_tests-test_spawn_opt_link_receive_exit-1-dpor.txt │ │ ├── sched_tests-test_spawn_opt_link_receive_exit-1.txt │ │ ├── sched_tests-test_spawn_opt_link_receive_exit-inf-dpor.txt │ │ ├── sched_tests-test_spawn_opt_link_receive_exit-inf.txt │ │ ├── sched_tests-test_spawn_opt_monitor-0-dpor.txt │ │ ├── sched_tests-test_spawn_opt_monitor-0.txt │ │ ├── sched_tests-test_spawn_opt_monitor-inf-dpor.txt │ │ ├── sched_tests-test_spawn_opt_monitor-inf.txt │ │ ├── sched_tests-test_spawn_register_race-0-dpor.txt │ │ ├── sched_tests-test_spawn_register_race-0.txt │ │ ├── sched_tests-test_spawn_register_race-1-dpor.txt │ │ ├── sched_tests-test_spawn_register_race-1.txt │ │ ├── sched_tests-test_spawn_register_race-2-dpor.txt │ │ ├── sched_tests-test_spawn_register_race-2.txt │ │ ├── sched_tests-test_spawn_register_race-inf-dpor.txt │ │ ├── sched_tests-test_spawn_register_race-inf.txt │ │ ├── sched_tests-test_trap_exit_timing-0-dpor.txt │ │ ├── sched_tests-test_trap_exit_timing-0.txt │ │ ├── sched_tests-test_trap_exit_timing-1-dpor.txt │ │ ├── sched_tests-test_trap_exit_timing-1.txt │ │ ├── sched_tests-test_trap_exit_timing-inf-dpor.txt │ │ ├── sched_tests-test_trap_exit_timing-inf.txt │ │ ├── sched_tests-test_var_mod_fun-0-dpor.txt │ │ ├── sched_tests-test_var_mod_fun-0.txt │ │ ├── sched_tests-test_var_mod_fun-1-dpor.txt │ │ ├── sched_tests-test_var_mod_fun-1.txt │ │ ├── sched_tests-test_var_mod_fun-inf-dpor.txt │ │ ├── sched_tests-test_var_mod_fun-inf.txt │ │ ├── sched_tests-test_whereis-0-dpor.txt │ │ ├── sched_tests-test_whereis-0.txt │ │ ├── sched_tests-test_whereis-1-dpor.txt │ │ ├── sched_tests-test_whereis-1.txt │ │ ├── sched_tests-test_whereis-2-dpor.txt │ │ ├── sched_tests-test_whereis-2.txt │ │ ├── sched_tests-test_whereis-inf-dpor.txt │ │ ├── sched_tests-test_whereis-inf.txt │ │ ├── self_exits-test1-inf-dpor.txt │ │ ├── self_exits-test2-inf-dpor.txt │ │ ├── self_exits-test3-inf-dpor.txt │ │ ├── self_exits-test4-inf-dpor.txt │ │ ├── send_after-test1-inf-dpor.txt │ │ ├── send_after-test11-inf-dpor.txt │ │ ├── send_after-test12-inf-dpor.txt │ │ ├── send_after-test13-inf-dpor.txt │ │ ├── send_after-test14-inf-dpor.txt │ │ ├── send_after-test15-inf-dpor.txt │ │ ├── send_after-test16-inf-dpor.txt │ │ ├── send_after-test17-inf-dpor.txt │ │ ├── send_after-test18-inf-dpor.txt │ │ ├── send_after-test19-inf-dpor.txt │ │ ├── send_after-test1A-inf-dpor.txt │ │ ├── send_after-test1B-inf-dpor.txt │ │ ├── send_after-test1C-inf-dpor.txt │ │ ├── send_after-test1D-inf-dpor.txt │ │ ├── send_after-test2-inf-dpor.txt │ │ ├── send_after-test3-inf-dpor.txt │ │ ├── send_after-test4-inf-dpor.txt │ │ ├── send_after-test5-inf-dpor.txt │ │ ├── send_after-test6-inf-dpor.txt │ │ ├── send_after-test7-inf-dpor.txt │ │ ├── send_after-test8-inf-dpor.txt │ │ ├── send_after-test9-inf-dpor.txt │ │ ├── send_after-testA-inf-dpor.txt │ │ ├── send_after-testB-inf-dpor.txt │ │ ├── send_after-testC-inf-dpor.txt │ │ ├── send_after_trouble-test-inf-dpor.txt │ │ ├── send_named_vs_send-send_named_vs_send-inf-dpor.txt │ │ ├── send_receive_dependencies-send_receive_dependencies-inf-dpor.txt │ │ ├── send_self-test-inf-dpor.txt │ │ ├── send_self-test1-inf-dpor.txt │ │ ├── send_self-test2-inf-dpor.txt │ │ ├── send_self-test3-inf-dpor.txt │ │ ├── send_using_names-send_using_names-inf-dpor.txt │ │ ├── send_vs_trap_exit-send_vs_trap_exit-inf-dpor.txt │ │ ├── signals_vs_messages-test-inf-dpor.txt │ │ ├── signals_vs_messages-test1-inf-dpor.txt │ │ ├── simple_ets-simple_ets-inf-dpor.txt │ │ ├── simple_spawn-simple_spawn-inf-dpor.txt │ │ ├── sleep_set_block_not_bad-test-inf-persistent.txt │ │ ├── spawn_and_send-spawn_and_send-inf-dpor.txt │ │ ├── spawn_bad-test-inf-dpor.txt │ │ ├── spawn_failure-spawn_failure-inf-dpor.txt │ │ ├── spawn_monitor_test-spawn_monitor_test-inf-dpor.txt │ │ ├── spawned_sender_crasher-spawned_sender_crasher-inf-dpor.txt │ │ ├── spawned_senders-spawned_senders-inf-dpor.txt │ │ ├── stacktrace_vs_exit-test-inf-optimal.txt │ │ ├── system_info-test-inf-optimal.txt │ │ ├── system_instant_delivery-test-inf-optimal.txt │ │ ├── system_non_instant_delivery-test-inf-optimal.txt │ │ ├── timers_afters_exits_crashes-both_crash-inf-dpor.txt │ │ ├── timers_afters_exits_crashes-child_crashes-inf-dpor.txt │ │ ├── timers_afters_exits_crashes-my_exit_bad-inf-dpor.txt │ │ ├── timers_afters_exits_crashes-my_exit_ok-inf-dpor.txt │ │ ├── timers_afters_exits_crashes-my_start_timer-inf-dpor.txt │ │ ├── timestamps-exit_system_time0-inf-optimal.txt │ │ ├── timestamps-exit_system_time1-inf-optimal.txt │ │ ├── timestamps-exit_timestamp-inf-optimal.txt │ │ ├── timestamps-other_system_time0-inf-optimal.txt │ │ ├── timestamps-other_system_time1-inf-optimal.txt │ │ ├── timestamps-other_timestamp-inf-optimal.txt │ │ ├── trace_the_sender-trace_the_sender-inf-dpor.txt │ │ ├── transparent_instrumentation-test-inf-dpor.txt │ │ ├── trigger_the_after-trigger_the_after-inf-dpor.txt │ │ ├── unregister_deadlocked-test1-inf-dpor.txt │ │ └── waiting-waiting-inf-dpor.txt │ └── src │ │ ├── ac_tab_delete_crash.erl │ │ ├── ac_tab_insert.erl │ │ ├── after_test_2.erl │ │ ├── after_test_3.erl │ │ ├── after_vs_trap_exit.erl │ │ ├── allow_first_crash.erl │ │ ├── application_check.erl │ │ ├── assert_filter.erl │ │ ├── assert_tip.erl │ │ ├── bad_dictionary.erl │ │ ├── bad_whereis.erl │ │ ├── code_when_undef.erl │ │ ├── concuerror_crash.erl │ │ ├── curious_builtins.erl │ │ ├── dead_receive.erl │ │ ├── deeper_exit.erl │ │ ├── demonitor_exhaustive.erl │ │ ├── demonitor_flush.erl │ │ ├── demonitor_sane_opts.erl │ │ ├── depth_bound.erl │ │ ├── erlang_display.erl │ │ ├── erlang_display_string.erl │ │ ├── ets_delete.erl │ │ ├── ets_delete_2.erl │ │ ├── ets_delete_all.erl │ │ ├── ets_delete_object.erl │ │ ├── ets_exceptions.erl │ │ ├── ets_give_away.erl │ │ ├── ets_global_global.erl │ │ ├── ets_heir.erl │ │ ├── ets_heir_2.erl │ │ ├── ets_info.erl │ │ ├── ets_info_details.erl │ │ ├── ets_insert_new.erl │ │ ├── ets_insert_objects.erl │ │ ├── ets_many_insert_new.erl │ │ ├── ets_new.erl │ │ ├── ets_new_failure.erl │ │ ├── ets_new_failure_2.erl │ │ ├── ets_new_failure_3.erl │ │ ├── ets_ref_keys.erl │ │ ├── ets_rename.erl │ │ ├── ets_select.erl │ │ ├── ets_unguarded.erl │ │ ├── ets_unnamed.erl │ │ ├── ets_update_counter.erl │ │ ├── ets_update_element.erl │ │ ├── ets_whereis.erl │ │ ├── exit.erl │ │ ├── exit_kill.erl │ │ ├── exit_message_unpredicted.erl │ │ ├── file_read_file.erl │ │ ├── fun_fail.erl │ │ ├── group_leader.erl │ │ ├── group_leader2.erl │ │ ├── group_leader3.erl │ │ ├── halt_error.erl │ │ ├── halt_support.erl │ │ ├── hibernate.erl │ │ ├── hopeless_after.erl │ │ ├── i_hate_myself.erl │ │ ├── ignore_error_1.erl │ │ ├── ignore_error_2.erl │ │ ├── ignore_error_3.erl │ │ ├── immediate_delivery.erl │ │ ├── infinite_loop.erl │ │ ├── init_race_condition.erl │ │ ├── inspect_system.erl │ │ ├── instr_apply.erl │ │ ├── io_error.erl │ │ ├── io_format.erl │ │ ├── io_format_2.erl │ │ ├── io_format_3.erl │ │ ├── irrelevant_send.erl │ │ ├── is_process_alive_1.erl │ │ ├── keep_going.erl │ │ ├── kill_running_waiting.erl │ │ ├── late_hope.erl │ │ ├── lid_test.erl │ │ ├── link_after.erl │ │ ├── load_before_start.erl │ │ ├── log_all.erl │ │ ├── main_and_backup.erl │ │ ├── many_kill.erl │ │ ├── many_links.erl │ │ ├── many_monitors.erl │ │ ├── many_send_to_dead.erl │ │ ├── many_send_to_dead_2.erl │ │ ├── message_queue_length.erl │ │ ├── messed_deliveries.erl │ │ ├── module_loaded_dep.erl │ │ ├── monitor_demonitor.erl │ │ ├── monitor_failure.erl │ │ ├── monitor_info.erl │ │ ├── monitor_missing_messages.erl │ │ ├── monitor_named.erl │ │ ├── monitor_order.erl │ │ ├── monotonic_time.erl │ │ ├── node_names.erl │ │ ├── nonexistent_module.erl │ │ ├── normal_exit.erl │ │ ├── normal_shutdown.erl │ │ ├── normal_tuple_exit.erl │ │ ├── os_timestamp.erl │ │ ├── pids_are_unsafe.erl │ │ ├── process_flag_link.erl │ │ ├── process_info.erl │ │ ├── processes.erl │ │ ├── processes_leader.erl │ │ ├── racing_after.erl │ │ ├── receive_after.erl │ │ ├── receive_and_after.erl │ │ ├── receive_catchall.erl │ │ ├── receive_exit.erl │ │ ├── receive_loop.erl │ │ ├── receive_with_guard.erl │ │ ├── receive_without_trapping.erl │ │ ├── register_link.erl │ │ ├── registered_1.erl │ │ ├── registered_2.erl │ │ ├── registered_send_1.erl │ │ ├── registered_send_2.erl │ │ ├── registered_send_3.erl │ │ ├── replay_sanity.erl │ │ ├── report_blocks.erl │ │ ├── reuse_raw_pid.erl │ │ ├── safeops_coverage.erl │ │ ├── sched_tests.erl │ │ ├── self_exits.erl │ │ ├── send_after.erl │ │ ├── send_after_trouble.erl │ │ ├── send_named_vs_send.erl │ │ ├── send_receive_dependencies.erl │ │ ├── send_self.erl │ │ ├── send_using_names.erl │ │ ├── send_vs_trap_exit.erl │ │ ├── signals_vs_messages.erl │ │ ├── simple_ets.erl │ │ ├── simple_spawn.erl │ │ ├── sleep_set_block_not_bad.erl │ │ ├── spawn_and_send.erl │ │ ├── spawn_bad.erl │ │ ├── spawn_failure.erl │ │ ├── spawn_monitor_test.erl │ │ ├── spawned_sender_crasher.erl │ │ ├── spawned_senders.erl │ │ ├── stacktrace_vs_exit.erl │ │ ├── system_info.erl │ │ ├── system_instant_delivery.erl │ │ ├── system_non_instant_delivery.erl │ │ ├── timers_afters_exits_crashes.erl │ │ ├── timestamps.erl │ │ ├── trace_the_sender.erl │ │ ├── transparent_instrumentation.erl │ │ ├── trigger_the_after.erl │ │ ├── unregister_deadlocked.erl │ │ ├── unsupported_exit.erl │ │ └── waiting.erl ├── bounding_tests │ ├── results │ │ ├── manolis-test_2workers_small-1-bpor-source.txt │ │ ├── readers-test-0-dpor.txt │ │ ├── readers-test-1-dpor.txt │ │ ├── readers-test-2-dpor.txt │ │ ├── readers-test-3-dpor.txt │ │ ├── readers-test-4-dpor.txt │ │ ├── readers-test-5-dpor.txt │ │ ├── readers-test-6-dpor.txt │ │ ├── readers-test-7-dpor.txt │ │ ├── readers_2-test-0-dpor.txt │ │ ├── readers_2-test-1-dpor.txt │ │ ├── readers_2-test-2-dpor.txt │ │ ├── readers_2-test-3-dpor.txt │ │ ├── readers_2-test-4-dpor.txt │ │ ├── readers_2-test-5-dpor.txt │ │ ├── readers_2-test-6-dpor.txt │ │ ├── readers_2-test-7-dpor.txt │ │ ├── readers_compare-test-0-bpor-persistent.txt │ │ ├── readers_compare-test-0-bpor-source.txt │ │ ├── readers_compare-test-0-optimal.txt │ │ ├── readers_compare-test-0-persistent.txt │ │ ├── readers_compare-test-0-source.txt │ │ ├── readers_compare-test-1-bpor-persistent.txt │ │ ├── readers_compare-test-1-bpor-source.txt │ │ ├── readers_compare-test-1-optimal.txt │ │ ├── readers_compare-test-1-persistent.txt │ │ ├── readers_compare-test-1-source.txt │ │ ├── readers_compare-test-2-bpor-persistent.txt │ │ ├── readers_compare-test-2-bpor-source.txt │ │ ├── readers_compare-test-2-optimal.txt │ │ ├── readers_compare-test-2-persistent.txt │ │ ├── readers_compare-test-2-source.txt │ │ ├── readers_compare-test-6-bpor-persistent.txt │ │ ├── readers_compare-test-6-bpor-source.txt │ │ ├── readers_compare-test-6-optimal.txt │ │ ├── readers_compare-test-6-persistent.txt │ │ ├── readers_compare-test-6-source.txt │ │ ├── readers_delay-test-0-nodpor.txt │ │ ├── readers_delay-test-1-nodpor.txt │ │ ├── readers_delay-test-2-nodpor.txt │ │ ├── readers_delay-test-3-nodpor.txt │ │ ├── readers_delay-test-4-nodpor.txt │ │ ├── readers_delay-test-5-nodpor.txt │ │ ├── readers_delay-test-6-nodpor.txt │ │ ├── readers_no_preempt-test-0-bpor-persistent.txt │ │ ├── readers_no_preempt-test-0-bpor-source.txt │ │ ├── readers_no_preempt-test-0-optimal.txt │ │ ├── readers_no_preempt-test-0-persistent.txt │ │ ├── readers_no_preempt-test-0-source.txt │ │ ├── readers_no_preempt-test-1-bpor-persistent.txt │ │ ├── readers_no_preempt-test-1-bpor-source.txt │ │ ├── readers_no_preempt-test-1-optimal.txt │ │ ├── readers_no_preempt-test-1-persistent.txt │ │ ├── readers_no_preempt-test-1-source.txt │ │ ├── readers_no_preempt-test-2-bpor-persistent.txt │ │ ├── readers_no_preempt-test-2-bpor-source.txt │ │ ├── readers_no_preempt-test-2-optimal.txt │ │ ├── readers_no_preempt-test-2-persistent.txt │ │ ├── readers_no_preempt-test-2-source.txt │ │ ├── simple_delay-test-0-dpor.txt │ │ ├── simple_delay-test-1-dpor.txt │ │ ├── simple_delay-test-2-dpor.txt │ │ ├── writers-test-0-dpor.txt │ │ ├── writers-test-1-dpor.txt │ │ ├── writers-test-2-dpor.txt │ │ ├── writers-test-3-dpor.txt │ │ ├── writers-test-4-dpor.txt │ │ ├── writers-test-5-dpor.txt │ │ ├── writers-test-6-dpor.txt │ │ └── writers-test-7-dpor.txt │ └── src │ │ ├── manolis │ │ ├── rush_hour.erl │ │ ├── search.erl │ │ └── test.erl │ │ ├── readers.erl │ │ ├── readers_2.erl │ │ ├── readers_compare.erl │ │ ├── readers_delay.erl │ │ ├── readers_no_preempt.erl │ │ ├── simple_delay.erl │ │ └── writers.erl ├── corner_tests │ ├── results │ │ └── deliver_exhaustive-test-inf-nodpor.txt │ └── src │ │ └── deliver_exhaustive.erl ├── dpor_tests │ ├── results │ │ ├── POPL_optimal_example-test-inf-dpor.txt │ │ ├── POPL_optimal_example-test-inf-source.txt │ │ ├── after_test-after_test-inf-dpor.txt │ │ ├── after_test_reduced-after_test_reduced-inf-dpor.txt │ │ ├── combination_lock_1-combination_lock_1-inf-dpor.txt │ │ ├── combination_lock_1-combination_lock_1-inf-source.txt │ │ ├── complete_test_1-complete_test_1-inf-dpor.txt │ │ ├── complete_test_2-complete_test_2-inf-dpor.txt │ │ ├── conditional_readers-conditional_readers-inf-dpor.txt │ │ ├── conditional_readers_2-conditional_readers_2-inf-dpor.txt │ │ ├── conditional_readers_3-conditional_readers_3-inf-dpor.txt │ │ ├── depend_1-depend_1-inf-dpor.txt │ │ ├── depend_2-depend_2-inf-dpor.txt │ │ ├── depend_3-depend_3-inf-dpor.txt │ │ ├── depend_4-depend_4-inf-dpor.txt │ │ ├── depend_4_screen-depend_4_screen-inf-dpor.txt │ │ ├── depend_5-depend_5-inf-dpor.txt │ │ ├── depend_6-depend_6-inf-dpor.txt │ │ ├── depend_6_newest-test-inf-dpor.txt │ │ ├── depend_6_round-test-inf-dpor.txt │ │ ├── diff_dep_1-diff_dep_1-inf-dpor.txt │ │ ├── diff_dep_2-diff_dep_2-inf-dpor.txt │ │ ├── diff_dep_3-diff_dep_3-inf-dpor.txt │ │ ├── diff_obs-test-inf-optimal.txt │ │ ├── difficult_readers-difficult_readers-inf-dpor.txt │ │ ├── ets_cross-test-inf-dpor.txt │ │ ├── ets_dependencies-ets_dependencies-inf-dpor.txt │ │ ├── ets_dependencies_2-ets_dependencies_2-inf-dpor.txt │ │ ├── ets_dependencies_3-ets_dependencies_3-inf-dpor.txt │ │ ├── ets_dependencies_deeper-ets_dependencies_deeper-inf-dpor.txt │ │ ├── ets_dependencies_deeper_2-ets_dependencies_deeper_2-inf-dpor.txt │ │ ├── ets_dependencies_n-ets_dependencies_n-inf-dpor.txt │ │ ├── ets_writing_same-ets_writing_same-inf-dpor.txt │ │ ├── etsi-etsi-inf-dpor.txt │ │ ├── etsi_2-etsi_2-inf-dpor.txt │ │ ├── etsi_3-etsi_3-inf-dpor.txt │ │ ├── etsi_4-etsi_4-inf-dpor.txt │ │ ├── etsi_5-etsi_5-inf-dpor.txt │ │ ├── etsi_6-etsi_6-inf-dpor.txt │ │ ├── etsi_7-etsi_7-inf-dpor.txt │ │ ├── etsi_8-etsi_8-inf-dpor.txt │ │ ├── file_system_example-test-inf-dpor.txt │ │ ├── hairbrush_teeth_1-hairbrush_teeth_1-inf-dpor.txt │ │ ├── hairbrush_teeth_2-hairbrush_teeth_2-inf-dpor.txt │ │ ├── hairbrush_teeth_3-hairbrush_teeth_3-inf-dpor.txt │ │ ├── hairbrush_teeth_4-hairbrush_teeth_4-inf-dpor.txt │ │ ├── independent_receivers-independent_receivers-inf-dpor.txt │ │ ├── indifferent_senders-indifferent_senders-inf-dpor.txt │ │ ├── last_zero-test-inf-dpor.txt │ │ ├── last_zero-test-inf-source.txt │ │ ├── long_chain-long_chain-inf-dpor.txt │ │ ├── many_initials-many_initials-inf-dpor.txt │ │ ├── many_kill_2-test-inf-dpor.txt │ │ ├── manywrite-manywrite-inf-dpor.txt │ │ ├── manywrite_2-manywrite_2-inf-dpor.txt │ │ ├── messages_1-messages_1-inf-dpor.txt │ │ ├── messages_2-test-inf-dpor.txt │ │ ├── no_observers-test-inf-optimal.txt │ │ ├── not_prerequisite_1-not_prerequisite_1-inf-dpor.txt │ │ ├── observable_others-dep_obs-inf-optimal.txt │ │ ├── observable_others-dep_unobs-inf-optimal.txt │ │ ├── observable_others-indep_obs-inf-optimal.txt │ │ ├── observable_others-indep_unobs-inf-optimal.txt │ │ ├── precise_demonitor-demonitor_empty-inf-optimal.txt │ │ ├── precise_demonitor-demonitor_flush-inf-optimal.txt │ │ ├── precise_demonitor-demonitor_flush_info-inf-optimal.txt │ │ ├── precise_demonitor-demonitor_info-inf-optimal.txt │ │ ├── priorities-priorities-inf-dpor.txt │ │ ├── process_info-links-inf-optimal.txt │ │ ├── proxy-proxy-inf-dpor.txt │ │ ├── proxy2-proxy2-inf-dpor.txt │ │ ├── readers-test-inf-optimal.txt │ │ ├── readers-test-inf-persistent.txt │ │ ├── readers-test-inf-source.txt │ │ ├── readers_basic-readers_basic-inf-dpor.txt │ │ ├── readers_rrw-readers_rrw-inf-dpor.txt │ │ ├── readers_rwr-readers_rwr-inf-dpor.txt │ │ ├── readers_wrr-readers_wrr-inf-dpor.txt │ │ ├── receive_order-test1-inf-dpor.txt │ │ ├── receive_order-test2-inf-dpor.txt │ │ ├── receive_order-test3-inf-dpor.txt │ │ ├── register_again-register_again-inf-dpor.txt │ │ ├── register_again_2-register_again_2-inf-dpor.txt │ │ ├── same_messages-same_messages-inf-dpor.txt │ │ ├── same_messages_2-same_messages_2-inf-dpor.txt │ │ ├── same_messages_3-same_messages_3-inf-dpor.txt │ │ ├── same_messages_4-same_messages_4-inf-dpor.txt │ │ ├── send_it_ets-send_it_ets-inf-dpor.txt │ │ ├── sleeping_races_1-sleeping_races_1-inf-dpor.txt │ │ ├── sleeping_races_2-sleeping_races_2-inf-dpor.txt │ │ ├── sleeping_races_3_read-sleeping_races_3_read-inf-dpor.txt │ │ ├── sleeping_races_3_write-sleeping_races_3_write-inf-dpor.txt │ │ ├── sleeping_races_4-sleeping_races_4-inf-dpor.txt │ │ ├── sleeping_races_5-sleeping_races_5-inf-dpor.txt │ │ ├── sleeping_races_6-sleeping_races_6-inf-dpor.txt │ │ ├── sleeping_races_6-sleeping_races_6-inf-source.txt │ │ ├── sleeping_races_7-sleeping_races_7-inf-dpor.txt │ │ ├── sleeping_races_8-sleeping_races_8-inf-dpor.txt │ │ ├── stress-stress-inf-dpor.txt │ │ ├── sync_start-sync_start-inf-dpor.txt │ │ ├── test_after_spawns-test_after_spawns-inf-dpor.txt │ │ ├── timer_replayed-test-inf-dpor.txt │ │ ├── tricky_predecessors-tricky_predecessors-inf-dpor.txt │ │ ├── two_writers_readers_1-two_writers_readers_1-inf-dpor.txt │ │ ├── two_writers_readers_2-two_writers_readers_2-inf-dpor.txt │ │ ├── wakeup_many-wakeup_many-inf-dpor.txt │ │ ├── workers-workers-inf-dpor.txt │ │ ├── workers_2-workers_2-inf-dpor.txt │ │ └── writeread-writeread-inf-dpor.txt │ └── src │ │ ├── POPL_optimal_example.erl │ │ ├── after_test.erl │ │ ├── after_test_reduced.erl │ │ ├── combination_lock_1.erl │ │ ├── complete_test_1.erl │ │ ├── complete_test_2.erl │ │ ├── conditional_readers.erl │ │ ├── conditional_readers_2.erl │ │ ├── conditional_readers_3.erl │ │ ├── depend_1.erl │ │ ├── depend_2.erl │ │ ├── depend_3.erl │ │ ├── depend_4.erl │ │ ├── depend_4_screen.erl │ │ ├── depend_5.erl │ │ ├── depend_6.erl │ │ ├── depend_6_newest.erl │ │ ├── depend_6_round.erl │ │ ├── diff_dep_1.erl │ │ ├── diff_dep_2.erl │ │ ├── diff_dep_3.erl │ │ ├── diff_obs.erl │ │ ├── difficult_readers.erl │ │ ├── ets_cross.erl │ │ ├── ets_dependencies.erl │ │ ├── ets_dependencies_2.erl │ │ ├── ets_dependencies_3.erl │ │ ├── ets_dependencies_deeper.erl │ │ ├── ets_dependencies_deeper_2.erl │ │ ├── ets_dependencies_n.erl │ │ ├── ets_writing_same.erl │ │ ├── etsi.erl │ │ ├── etsi_2.erl │ │ ├── etsi_3.erl │ │ ├── etsi_4.erl │ │ ├── etsi_5.erl │ │ ├── etsi_6.erl │ │ ├── etsi_7.erl │ │ ├── etsi_8.erl │ │ ├── file_system_example.erl │ │ ├── hairbrush_teeth_1.erl │ │ ├── hairbrush_teeth_2.erl │ │ ├── hairbrush_teeth_3.erl │ │ ├── hairbrush_teeth_4.erl │ │ ├── independent_receivers.erl │ │ ├── indifferent_senders.erl │ │ ├── last_zero.erl │ │ ├── long_chain.erl │ │ ├── many_initials.erl │ │ ├── many_kill_2.erl │ │ ├── manywrite.erl │ │ ├── manywrite_2.erl │ │ ├── messages_1.erl │ │ ├── messages_2.erl │ │ ├── no_observers.erl │ │ ├── not_prerequisite_1.erl │ │ ├── observable_others.erl │ │ ├── precise_demonitor.erl │ │ ├── priorities.erl │ │ ├── process_info.erl │ │ ├── proxy.erl │ │ ├── proxy2.erl │ │ ├── readers.erl │ │ ├── readers_basic.erl │ │ ├── readers_rrw.erl │ │ ├── readers_rwr.erl │ │ ├── readers_wrr.erl │ │ ├── receive_order.erl │ │ ├── register_again.erl │ │ ├── register_again_2.erl │ │ ├── same_messages.erl │ │ ├── same_messages_2.erl │ │ ├── same_messages_3.erl │ │ ├── same_messages_4.erl │ │ ├── send_it_ets.erl │ │ ├── sleeping_races_1.erl │ │ ├── sleeping_races_2.erl │ │ ├── sleeping_races_3_read.erl │ │ ├── sleeping_races_3_write.erl │ │ ├── sleeping_races_4.erl │ │ ├── sleeping_races_5.erl │ │ ├── sleeping_races_6.erl │ │ ├── sleeping_races_7.erl │ │ ├── sleeping_races_8.erl │ │ ├── stress.erl │ │ ├── sync_start.erl │ │ ├── test_after_spawns.erl │ │ ├── timer_replayed.erl │ │ ├── tricky_predecessors.erl │ │ ├── two_writers_readers_1.erl │ │ ├── two_writers_readers_2.erl │ │ ├── wakeup_many.erl │ │ ├── workers.erl │ │ ├── workers_2.erl │ │ └── writeread.erl └── erlang_tests │ ├── results │ ├── erlang_maps-maps_fold-inf-optimal.txt │ ├── erlang_timer-cancel_bad-inf-optimal.txt │ ├── erlang_timer-cancel_badarg-inf-optimal.txt │ ├── erlang_timer-read_bad-inf-optimal.txt │ └── erlang_timer-read_badarg-inf-optimal.txt │ └── src │ ├── erlang_maps.erl │ └── erlang_timer.erl ├── test_template.erl └── test_template_stripped.erl /.editorconfig: -------------------------------------------------------------------------------- 1 | 2 | 3 | # EditorConfig is awesome: https://EditorConfig.org 4 | 5 | # top-most EditorConfig file 6 | root = true 7 | 8 | # Unix-style newlines with a newline ending every file 9 | [*] 10 | end_of_line = lf 11 | insert_final_newline = true 12 | indent_style = space 13 | indent_size = 2 14 | 15 | # Tab indentation 16 | [Makefile] 17 | indent_style = tab 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | 5 | --- 6 | 7 | **Describe the bug** 8 | A clear and concise description of what the bug is. 9 | 10 | **To Reproduce** 11 | Steps to reproduce the behavior: 12 | 1. Create a directory containing the following files and change into it: '...' 13 | 2. Run Concuerror in the following way: '...' 14 | 15 | **Expected behavior** 16 | A clear and concise description of what you expected to happen. 17 | 18 | **Environment (please complete the following information):** 19 | - OS: [e.g. Debian] 20 | - Concuerror Version: [retrieve by `concuerror --version`] 21 | 22 | **Additional context** 23 | Add any other context about the problem here. 24 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | 5 | --- 6 | 7 | **Is your feature request related to a problem? Please describe.** 8 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 9 | 10 | **Describe the solution you'd like** 11 | A clear and concise description of what you want to happen. 12 | 13 | **Describe alternatives you've considered** 14 | A clear and concise description of any alternative solutions or features you've considered. 15 | 16 | **Additional context** 17 | Add any other context or screenshots about the feature request here. 18 | -------------------------------------------------------------------------------- /.github/codecov.yml: -------------------------------------------------------------------------------- 1 | codecov: 2 | notify: 3 | after_n_builds: 4 4 | comment: 5 | after_n_builds: 4 6 | coverage: 7 | status: 8 | project: 9 | default: 10 | target: 94% 11 | patch: 12 | default: 13 | target: 90% 14 | fixes: 15 | - "_build/default/lib/concuerror/::" 16 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Summary 2 | 3 | Describe what will be improved after merging this Pull Request. 4 | 5 | ## Checklist 6 | 7 | * [ ] Has tests (or doesn't need them) 8 | * [ ] Updates CHANGELOG (or too minor) 9 | * [ ] References related Issues 10 | -------------------------------------------------------------------------------- /.github/scripts/covertool_combine: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | EBIN=$(rebar3 path --ebin --app concuerror) 5 | cd cover 6 | export COVER_COMBINE=all.coverdata 7 | ./cover-report data || true 8 | covertool/covertool -cover $COVER_COMBINE -ebin $EBIN -appname concuerror 9 | cd .. 10 | -------------------------------------------------------------------------------- /.github/scripts/covertool_setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | make cover/data 5 | cd cover 6 | git clone https://github.com/covertool/covertool.git --branch 2.0.3 7 | cd covertool 8 | make compile 9 | -------------------------------------------------------------------------------- /.github/workflows/website.yml: -------------------------------------------------------------------------------- 1 | name: Website 2 | 3 | on: 4 | push: 5 | branches: master 6 | paths: 'docs/**' 7 | pull_request: 8 | branches: master 9 | paths: 'docs/**' 10 | schedule: 11 | # Run at 00:00 UTC on the first day of each month 12 | - cron: '00 00 1 * *' 13 | 14 | jobs: 15 | test: 16 | strategy: 17 | matrix: 18 | target: 19 | - test 20 | - test-external 21 | name: ${{ matrix.target }} 22 | runs-on: ubuntu-latest 23 | steps: 24 | - uses: actions/checkout@v4 25 | - uses: ruby/setup-ruby@v1 26 | with: 27 | ruby-version: 3.2 28 | bundler-cache: true 29 | working-directory: docs 30 | - run: make -C docs ${{ matrix.target }} 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # NOTE! Please use 'git ls-files -i --exclude-standard' 2 | # command after changing this file, to see if there are 3 | # any tracked files which get ignored after the change. 4 | 5 | _build 6 | *.beam 7 | concuerror_report.txt 8 | erl_crash.dump 9 | thediff 10 | rebar3 11 | -------------------------------------------------------------------------------- /bin/.gitignore: -------------------------------------------------------------------------------- 1 | concuerror 2 | -------------------------------------------------------------------------------- /cover/.gitignore: -------------------------------------------------------------------------------- 1 | *.coverdata 2 | *.COVER.html 3 | covertool 4 | data 5 | -------------------------------------------------------------------------------- /doc/.gitignore: -------------------------------------------------------------------------------- 1 | *_option.edoc 2 | *.css 3 | *.html 4 | edoc-info 5 | erlang.png 6 | Gemfile.lock 7 | -------------------------------------------------------------------------------- /doc/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem "html-proofer" 4 | -------------------------------------------------------------------------------- /doc/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: default 2 | default: build 3 | 4 | Gemfile.lock: Gemfile 5 | bundle install 6 | touch $@ 7 | 8 | .PHONY: build 9 | build: 10 | make -C .. edoc 11 | 12 | .PHONY: test 13 | test: build Gemfile.lock 14 | bundle exec htmlproofer --disable-external=true --ignore-files "/vendor/" --log_level=debug --allow_missing_href=true --enforce_https=false . 15 | 16 | .PHONY: clean 17 | clean: 18 | $(RM) *_option.edoc *.html *.css erlang.png edoc-info Gemfile.lock 19 | -------------------------------------------------------------------------------- /docs/.bundle/config: -------------------------------------------------------------------------------- 1 | --- 2 | BUNDLE_PATH: "vendor/bundle" 3 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | /_site 2 | .jekyll-cache 3 | vendor 4 | -------------------------------------------------------------------------------- /docs/404.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: search 3 | title: "Page Not Found" 4 | description: "Page not found" 5 | --- 6 | 7 | ## 404 Error 8 | 9 | Sorry, but the page you were trying to view does not exist. 10 | 11 | Search the site: 12 | -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | concuerror.com -------------------------------------------------------------------------------- /docs/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem "github-pages", group: :jekyll_plugins 4 | gem "html-proofer" 5 | gem "webrick" 6 | -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: default 2 | default: build 3 | 4 | JEKYLL = bundle exec jekyll 5 | PROOFER = bundle exec htmlproofer ./_site --checks "Images,Links,Script,Favicon,OpenGraph" 6 | 7 | .PHONY: jekyll 8 | jekyll: Gemfile 9 | bundle install 10 | 11 | .PHONY: build 12 | build: jekyll 13 | $(JEKYLL) build 14 | 15 | .PHONY: serve 16 | serve: jekyll 17 | $(JEKYLL) serve --config _config.yml,_config_local.yml 18 | 19 | .PHONY: test 20 | test: build 21 | $(PROOFER) --disable_external 22 | 23 | .PHONY: test-external 24 | test-external: build 25 | $(PROOFER) --ignore-status-codes "302,403" 26 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Concuerror's Website 2 | 3 | Based on the [**So Simple Theme**](http://mmistakes.github.io) 4 | 5 | ## How to build 6 | 7 | `bundle install` 8 | `jekyll serve` 9 | -------------------------------------------------------------------------------- /docs/_config_local.yml: -------------------------------------------------------------------------------- 1 | url: "" 2 | -------------------------------------------------------------------------------- /docs/_data/authors.yml: -------------------------------------------------------------------------------- 1 | stavros: 2 | name: Stavros Aronis 3 | picture: https://www.gravatar.com/avatar/5730e85681def67cb10151437519f39d?s=200 4 | email: aronisstav@gmail.com 5 | twitter: "@Vahnatai" 6 | links: 7 | - title: Twitter 8 | url: https://twitter.com/Vahnatai 9 | icon: fab fa-twitter-square 10 | - title: Github 11 | url: https://github.com/aronisstav 12 | icon: fab fa-github 13 | -------------------------------------------------------------------------------- /docs/_includes/footer-custom.html: -------------------------------------------------------------------------------- 1 |
{% if page.updated %}Page last modified on {{ page.updated | date: site.date_format }} | {% endif %} {{ site.data.text[site.locale].back_to_top | default: 'Back to Top' }} ↑
2 |
3 | -------------------------------------------------------------------------------- /docs/_includes/head-custom.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/_includes/masthead.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {% if site.logo %} 4 | 7 | {% endif %} 8 | {% assign page_image = page.image.path | default: page.image %} 9 |
10 |
11 | -------------------------------------------------------------------------------- /docs/_includes/yt.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/_posts/2013-09-03-site.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Concuerror's website" 4 | category: news 5 | redirect_from: /site.html 6 | --- 7 | 8 | Concuerror just got a website! 9 | -------------------------------------------------------------------------------- /docs/_posts/2013-09-23-euc-2013.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Tutorial at EUC 2013: Video and Slides" 4 | author: Kostis Sagonas 5 | category: tutorials 6 | --- 7 | 8 | Kostis Sagonas gave a presentation about Concuerror at the Erlang User Conference 2013. 9 | 10 | {% assign yt-link = "FpkjKN9wTKg" %} 11 | {% include yt.html %} 12 | 13 | [Get the slides](https://www.erlang-factory.com/upload/presentations/858/euc_pres.pdf). 14 | 15 | You can also find the video and slides [here](https://www.erlang-factory.com/conference/ErlangUserConference2013/speakers/KostisSagonas). 16 | -------------------------------------------------------------------------------- /docs/_posts/2015-06-10-euc-2015.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Tutorial at EUC 2015: Slides" 4 | category: tutorials 5 | updated: 2015-06-10 6 | --- 7 | 8 | Stavros Aronis is presenting a tutorial on Concuerror at the Erlang User Conference 2015. 9 | 10 | You can find more info [here](https://www.erlang-factory.com/euc2015/stavros-aronis). 11 | 12 | The slides are [here](https://docs.google.com/presentation/d/1dRUQ1jC0NXRyM-6WJWo15n-3hSZ1p7F8fl3X4bdhis8/pub?start=false&loop=false&delayms=60000). 13 | -------------------------------------------------------------------------------- /docs/_posts/2017-08-14-euc-2017-talk.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Talk at EUC 2017: Video and Slides" 4 | category: news 5 | redirect_from: /euc-2017-talk.html 6 | --- 7 | 8 | Kostis Sagonas presented a talk on Concuerror at the Erlang User Conference 2017. 9 | 10 | {% assign yt-link = "WWBDUpmCUsI" %} 11 | {% include yt.html %} 12 | 13 | [Get the slides](https://docs.google.com/presentation/d/11nidXG5JazNXsNSoqW98oRlx7-e64ghQ_E1p_WMLitg). 14 | 15 | You can find more info [here](https://www.erlang-factory.com/euc2017/kostis-sagonas). 16 | -------------------------------------------------------------------------------- /docs/_posts/2017-08-14-euc-2017-tutorial.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Tutorial at EUC 2017: Slides" 4 | category: tutorials 5 | --- 6 | 7 | Stavros Aronis presented a tutorial on Concuerror at the Erlang User Conference 2017. 8 | 9 | You can find more info [here](https://www.erlang-factory.com/euc2017/stavros-aronis). 10 | 11 | The slides are [here](https://goo.gl/Mhulbn). 12 | -------------------------------------------------------------------------------- /docs/_posts/2017-10-03-publications-update.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Recent Publications and Homepage" 4 | category: news 5 | redirect_from: /publications-update.html 6 | --- 7 | 8 | The [Publications](/publications) page was updated with some recent publications. 9 | 10 | The [Homepage](/) was extended with more info. 11 | -------------------------------------------------------------------------------- /docs/_posts/2017-11-06-Announcing-Mailing-List.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Announcing a Mailing List" 4 | category: news 5 | redirect_from: /Announcing-Mailing-List.html 6 | --- 7 | 8 | Concuerror now has a [mailing list](/contact). 9 | -------------------------------------------------------------------------------- /docs/_posts/2018-07-15-hex.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Available on Hex.pm (with API specification)" 4 | category: news 5 | redirect_from: /hex.html 6 | --- 7 | 8 | Concuerror is now also available via 9 | [Hex.pm](https://hex.pm/packages/concuerror). 10 | 11 | Specification about its API is available on 12 | [Hexdocs](https://hexdocs.pm/concuerror). 13 | -------------------------------------------------------------------------------- /docs/_posts/2020-10-17-code-beam-sf-2019.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Talk at CODE BEAM SF 2019: Slides" 4 | category: news 5 | redirect_from: /code-beam-sf-2019.html 6 | --- 7 | 8 | Stavros Aronis presented a talk on Concuerror at CODE BEAM 2019. 9 | 10 | You can find more info [here](https://codesync.global/speaker/stavros-aronis/#301modeling-and-verifying-distributed-applications-with-concuerror). 11 | 12 | The slides are [here](/assets/pdf/CodeBEAMSF2019.pdf). 13 | -------------------------------------------------------------------------------- /docs/_posts/2020-10-17-functional-conf-2018.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Talk at Functional Conf 2018: Video and Slides" 4 | category: news 5 | redirect_from: /functional-conf-2018.html 6 | --- 7 | 8 | Stavros Aronis presented a talk on Concuerror at Functional Conf 2018. 9 | 10 | {% assign yt-link = "xAoIn_3b_n8" %} 11 | {% include yt.html %} 12 | 13 | You can find more info [here](https://confengine.com/functional-conf-2018/proposal/8528/conquering-race-conditions-in-erlang-programs-with-concuerror). 14 | 15 | The slides are [here](https://drive.google.com/file/d/11dhg9lG2v1cHpDrgLPcUlVvna39qHVFG/preview?feature=oembed). 16 | -------------------------------------------------------------------------------- /docs/assets/pdf/CodeBEAMSF2019.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parapluu/Concuerror/7acf5fd312f51dbdc51e824efec519fa051c979e/docs/assets/pdf/CodeBEAMSF2019.pdf -------------------------------------------------------------------------------- /docs/assets/pdf/ICST2013.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parapluu/Concuerror/7acf5fd312f51dbdc51e824efec519fa051c979e/docs/assets/pdf/ICST2013.pdf -------------------------------------------------------------------------------- /docs/assets/pdf/iFM2017.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parapluu/Concuerror/7acf5fd312f51dbdc51e824efec519fa051c979e/docs/assets/pdf/iFM2017.pdf -------------------------------------------------------------------------------- /docs/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parapluu/Concuerror/7acf5fd312f51dbdc51e824efec519fa051c979e/docs/images/favicon.ico -------------------------------------------------------------------------------- /docs/images/site-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/parapluu/Concuerror/7acf5fd312f51dbdc51e824efec519fa051c979e/docs/images/site-logo.png -------------------------------------------------------------------------------- /docs/news.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: posts 3 | permalink: /news/index.html 4 | title: News 5 | description: "Links to all posts on this website, sorted by date." 6 | show_excerpts: false 7 | --- 8 | -------------------------------------------------------------------------------- /docs/search.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: search 3 | permalink: /search/index.html 4 | title: Search 5 | description: "Search Concuerror's website" 6 | --- 7 | -------------------------------------------------------------------------------- /docs/sitemap.xml: -------------------------------------------------------------------------------- 1 | --- 2 | layout: null 3 | --- 4 | 5 | 6 | 7 | {{ site.url }} 8 | 9 | 10 | {% for post in site.posts %} 11 | 12 | {{ site.url }}{{ post.url }} 13 | 14 | {% endfor %} 15 | 16 | -------------------------------------------------------------------------------- /docs/tutorials.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: category 3 | permalink: /tutorials/index.html 4 | title: Tutorials 5 | description: "Links to tutorials on how to use Concuerror, sorted by date." 6 | show_excerpts: false 7 | taxonomy: tutorials 8 | --- 9 | 10 | This is a list of tutorials on how to use Concuerror. 11 | If you are looking for documentation, check the 12 | [API](https://hexdocs.pm/concuerror). 13 | -------------------------------------------------------------------------------- /priv/generate_option_docfiles: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env escript 2 | %%! -noshell -pa _build/docs/lib/concuerror/ebin 3 | 4 | main(Dir) -> 5 | concuerror_options:generate_option_docfiles(Dir). 6 | -------------------------------------------------------------------------------- /rebar.lock: -------------------------------------------------------------------------------- 1 | {"1.2.0", 2 | [{<<"getopt">>,{pkg,<<"getopt">>,<<"1.0.1">>},0}]}. 3 | [ 4 | {pkg_hash,[ 5 | {<<"getopt">>, <<"C73A9FA687B217F2FF79F68A3B637711BB1936E712B521D8CE466B29CBF7808A">>}]}, 6 | {pkg_hash_ext,[ 7 | {<<"getopt">>, <<"53E1AB83B9CEB65C9672D3E7A35B8092E9BDC9B3EE80721471A161C10C59959C">>}]} 8 | ]. 9 | -------------------------------------------------------------------------------- /resources/DPOR_paper_material/foo.erl: -------------------------------------------------------------------------------- 1 | -module(foo). 2 | 3 | -export([foo/0]). 4 | 5 | foo() -> 6 | P = self(), 7 | spawn(fun() -> P ! a end), 8 | spawn(fun() -> P ! b end), 9 | spawn(fun() -> P ! c end), 10 | receive 11 | V -> V 12 | after 13 | 0 -> bloo 14 | end. 15 | -------------------------------------------------------------------------------- /resources/DPOR_paper_material/foobar.erl: -------------------------------------------------------------------------------- 1 | -module(foobar). 2 | 3 | -export([foo/0]). 4 | 5 | foo() -> 6 | bar(). 7 | 8 | bar() -> 9 | ok. 10 | -------------------------------------------------------------------------------- /resources/DPOR_paper_material/my_test.erl: -------------------------------------------------------------------------------- 1 | -module(my_test). 2 | 3 | -export([test/1]). 4 | 5 | test(small) -> 6 | foo_test(); 7 | test(large) -> 8 | foobar_test(). 9 | 10 | foo_test() -> 11 | dialyzer:run([{files, ["/home/stavros/git/Concuerror/resources/DPOR_paper_material/foo.erl"]}, {from, src_code}]). 12 | 13 | foobar_test() -> 14 | dialyzer:run([{files, ["/home/stavros/git/Concuerror/foobar.erl"]}, {from, src_code}]). 15 | -------------------------------------------------------------------------------- /resources/DPOR_paper_material/run_dialyzer.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo "\\hline" 4 | for i in small large; do 5 | f=0 6 | for t in --dpor --dpor_source --dpor_classic; do 7 | if [ $f -eq 0 ]; then 8 | echo "\multirow{3}{*}{$T} & \multirow{3}{*}{$i} & " 9 | echo -n " o-DPOR &" 10 | elif [ $f -eq 1 ]; then 11 | echo -n " & & s-DPOR &" 12 | else 13 | echo -n " & & DPOR &" 14 | fi 15 | f=$((f+1)) 16 | ./conc_dia.sh $i $t | grep "OUT" | sed 's/OUT//' 17 | done 18 | echo "\\hline" 19 | done -------------------------------------------------------------------------------- /resources/DPOR_paper_material/run_filesystem.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | T=file_system_example 4 | 5 | echo "\\hline" 6 | for i in 16 18; do 7 | f=0 8 | for t in --dpor --dpor_source --dpor_classic; do 9 | if [ $f -eq 0 ]; then 10 | echo "\multirow{3}{*}{file\_system} & \multirow{3}{*}{$i} & " 11 | echo -n " o-DPOR &" 12 | elif [ $f -eq 1 ]; then 13 | echo -n " & & s-DPOR &" 14 | else 15 | echo -n " & & DPOR &" 16 | fi 17 | f=$((f+1)) 18 | ./concuerror_mem --noprogress -f testsuite/suites/dpor/src/$T.erl \ 19 | -t $T main $i -p inf $t \ 20 | | grep "OUT" | sed 's/OUT//' 21 | done 22 | echo "\\hline" 23 | done -------------------------------------------------------------------------------- /resources/DPOR_paper_material/run_indexer.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | T=indexer_example 4 | 5 | echo "\\hline" 6 | for i in 12 15; do 7 | f=0 8 | for t in --dpor --dpor_source --dpor_classic; do 9 | if [ $f -eq 0 ]; then 10 | echo "\multirow{3}{*}{$T} & \multirow{3}{*}{$i} & " 11 | echo -n " o-DPOR &" 12 | elif [ $f -eq 1 ]; then 13 | echo -n " & & s-DPOR &" 14 | else 15 | echo -n " & & DPOR &" 16 | fi 17 | f=$((f+1)) 18 | ./concuerror_mem --noprogress -f testsuite/suites/dpor/src/$T.erl \ 19 | -t $T main $i -p inf $t \ 20 | | grep "OUT" | sed 's/OUT//' 21 | done 22 | echo "\\hline" 23 | done -------------------------------------------------------------------------------- /resources/DPOR_paper_material/run_last_zero.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | T=sleeping_races_8 4 | 5 | echo "\\hline" 6 | for i in 2 5 10; do 7 | f=0 8 | for t in --dpor --dpor_source --dpor_classic; do 9 | if [ $f -eq 0 ]; then 10 | echo "\multirow{3}{*}{last_zero} & \multirow{3}{*}{$i} & " 11 | echo -n " o-DPOR &" 12 | elif [ $f -eq 1 ]; then 13 | echo -n " & & s-DPOR &" 14 | else 15 | echo -n " & & DPOR &" 16 | fi 17 | f=$((f+1)) 18 | ./concuerror_mem --noprogress -f testsuite/suites/dpor/src/$T.erl \ 19 | -t $T $T $i -p inf $t \ 20 | | grep "OUT" | sed 's/OUT//' 21 | done 22 | echo "\\hline" 23 | done -------------------------------------------------------------------------------- /resources/DPOR_paper_material/run_readers.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | T=readers 4 | 5 | echo "\\hline" 6 | for i in 2 8; do 7 | f=0 8 | for t in --dpor --dpor_source --dpor_classic; do 9 | if [ $f -eq 0 ]; then 10 | echo "\multirow{3}{*}{$T} & \multirow{3}{*}{$i} & " 11 | echo -n " o-DPOR &" 12 | elif [ $f -eq 1 ]; then 13 | echo -n " & & s-DPOR &" 14 | else 15 | echo -n " & & DPOR &" 16 | fi 17 | f=$((f+1)) 18 | ./concuerror_mem --noprogress -f testsuite/suites/dpor/src/$T.erl \ 19 | -t $T $T $i -p inf $t \ 20 | | grep "OUT" | sed 's/OUT//' 21 | done 22 | echo "\\hline" 23 | done -------------------------------------------------------------------------------- /resources/DPOR_paper_material/run_rush_hour.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | T=rush_hour 4 | 5 | echo "\\hline" 6 | for i in -; do 7 | f=0 8 | for t in --dpor --dpor_source --dpor_classic; do 9 | if [ $f -eq 0 ]; then 10 | echo "\multirow{3}{*}{rush\_hour} & \multirow{3}{*}{$i} & " 11 | echo -n " o-DPOR &" 12 | elif [ $f -eq 1 ]; then 13 | echo -n " & & s-DPOR &" 14 | else 15 | echo -n " & & DPOR &" 16 | fi 17 | f=$((f+1)) 18 | ./concuerror_mem --noprogress -f testsuite/suites/resources/src/manolis/*.erl \ 19 | -t rush_hour test_2workers_benchmark -p inf $t | \ 20 | grep "OUT" | sed 's/OUT//' 21 | done 22 | echo "\\hline" 23 | done -------------------------------------------------------------------------------- /resources/syntax/block_after.erl: -------------------------------------------------------------------------------- 1 | %%%---------------------------------------------------------------------- 2 | %%% File : block_after.erl 3 | %%% Authors : Alkis Gotovos 4 | %%% Maria Christakis 5 | %%% Description : Test block expression in after clause 6 | %%% Created : 3 Jan 2010 7 | %%%---------------------------------------------------------------------- 8 | 9 | -module(block_after). 10 | 11 | -export([block_after_test/0]). 12 | 13 | block_after_test() -> 14 | receive 15 | _Any -> ok 16 | after 42 -> 17 | foo, 18 | bar 19 | end. 20 | -------------------------------------------------------------------------------- /resources/syntax/rec_uscore.erl: -------------------------------------------------------------------------------- 1 | %%%---------------------------------------------------------------------- 2 | %%% File : rec_uscore.erl 3 | %%% Authors : Alkis Gotovos 4 | %%% Maria Christakis 5 | %%% Description : Test underscore in record creation 6 | %%% Created : 3 Jan 2010 7 | %%%---------------------------------------------------------------------- 8 | 9 | -module(rec_uscore). 10 | 11 | -export([rec_uscore_test/0]). 12 | 13 | -record(test, {foo :: integer(), bar :: atom(), baz :: atom()}). 14 | 15 | rec_uscore_test() -> 16 | _Rec = #test{foo = 42, _ = '_'}. 17 | -------------------------------------------------------------------------------- /resources/tdd/reg_server.hrl: -------------------------------------------------------------------------------- 1 | -define(MAX_ATTACHED, 2). 2 | -------------------------------------------------------------------------------- /src/.gitignore: -------------------------------------------------------------------------------- 1 | concuerror_otp_version.hrl 2 | -------------------------------------------------------------------------------- /src/concuerror.app.src: -------------------------------------------------------------------------------- 1 | {application, concuerror, 2 | [ {description, 3 | "Concuerror: Stateless Model Checking tool for Erlang programs" 4 | } 5 | , {vsn, "git"} 6 | , {applications, [kernel, stdlib]} 7 | , {maintainers, 8 | [ "Stavros Aronis" 9 | , "Kostis Sagonas" 10 | ]} 11 | , {licenses, ["BSD-2-Clause"]} 12 | , {links, 13 | [ {"Github", "https://github.com/parapluu/Concuerror"} 14 | , {"Website", "http://parapluu.github.io/Concuerror"} 15 | ]} 16 | ]}. 17 | -------------------------------------------------------------------------------- /test/README.md: -------------------------------------------------------------------------------- 1 | # Concuerror's EUnit tests 2 | 3 | This directory contains tests that can be run by Rebar, 4 | e.g. `rebar3 eunit` (from the top directory). 5 | -------------------------------------------------------------------------------- /test/concuerror_options_tests.erl: -------------------------------------------------------------------------------- 1 | -module(concuerror_options_tests). 2 | 3 | -include_lib("eunit/include/eunit.hrl"). 4 | 5 | -define(M, concuerror_options). 6 | 7 | %%============================================================================== 8 | 9 | lint_option_specs_test_() -> 10 | LintSpec = 11 | fun(OptionSpec) -> 12 | fun() -> 13 | {Keywords, _} = ?M:get_keywords_and_related(OptionSpec), 14 | OptionName = element(1, OptionSpec), 15 | ?assertEqual( 16 | {OptionName, Keywords}, 17 | {OptionName, lists:usort(Keywords)} 18 | ) 19 | end 20 | end, 21 | lists:map(LintSpec, ?M:options()). 22 | -------------------------------------------------------------------------------- /tests-real/Makefile: -------------------------------------------------------------------------------- 1 | SUBDIRS=$(patsubst %Makefile,%,$(wildcard suites/*/Makefile)) 2 | 3 | .PHONY: all $(SUBDIRS) 4 | 5 | all: $(SUBDIRS) 6 | 7 | $(SUBDIRS): 8 | $(MAKE) -C $@ 9 | -------------------------------------------------------------------------------- /tests-real/README.md: -------------------------------------------------------------------------------- 1 | # Concuerror's 'real tests' suite 2 | 3 | ## Structure 4 | 5 | This testsuite contains a number of suites, each following its own 6 | logic. 7 | 8 | Suites are structured in the following way: 9 | `./suites/` 10 | 11 | Each suite has a `Makefile` whose default target should run all tests 12 | in the suite. 13 | 14 | ## How to run all the tests 15 | 16 | From Concuerror's main directory, execute `make tests-real`. 17 | -------------------------------------------------------------------------------- /tests-real/suites/erlang-litmus/.gitignore: -------------------------------------------------------------------------------- 1 | erlang-concurrency-litmus-tests 2 | -------------------------------------------------------------------------------- /tests-real/suites/erlang-litmus/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: test 2 | 3 | test: erlang-concurrency-litmus-tests 4 | ./test etsglobal 5 | ./test leader 6 | ./test link 7 | ./test mailbox 8 | ./test process 9 | ./test registry 10 | ./test signal 11 | ./test timer 12 | 13 | erlang-concurrency-litmus-tests: 14 | git clone https://github.com/aronisstav/erlang-concurrency-litmus-tests.git 15 | -------------------------------------------------------------------------------- /tests-real/suites/erlang-litmus/test: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | REPO="erlang-concurrency-litmus-tests" 4 | 5 | CONCUERROR=${CONCUERROR:-$(which concuerror)} 6 | 7 | . ../print_colors 8 | 9 | function abort { 10 | cat *.out 11 | print_red "FAILED" 12 | } 13 | 14 | if ! ../check_version.escript 18; then 15 | print_blue "SKIPPING" 16 | exit 0 17 | fi 18 | 19 | set -e 20 | trap 'abort' 0 21 | 22 | print_blue "Litmus Suite $1" 23 | 24 | cd $REPO/litmus 25 | 26 | ../../run_litmus.escript $1 27 | 28 | trap - 0 29 | 30 | print_green "SUCCESS!" 31 | -------------------------------------------------------------------------------- /tests-real/suites/gproc/.gitignore: -------------------------------------------------------------------------------- 1 | run 2 | gproc 3 | -------------------------------------------------------------------------------- /tests-real/suites/gproc/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: test 2 | 3 | test: gproc/ebin/gproc.beam run 4 | ./test 5 | 6 | gproc/ebin/gproc.beam: gproc 7 | $(MAKE) -C gproc 8 | 9 | gproc: 10 | git clone https://github.com/uwiger/gproc.git -b 0.3 11 | 12 | run: 13 | mkdir $@ 14 | -------------------------------------------------------------------------------- /tests-real/suites/makefile/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: test 2 | test: 3 | ./makefile-tests 4 | -------------------------------------------------------------------------------- /tests-real/suites/makefile/footer: -------------------------------------------------------------------------------- 1 | ../options/footer -------------------------------------------------------------------------------- /tests-real/suites/makefile/header: -------------------------------------------------------------------------------- 1 | ../options/header -------------------------------------------------------------------------------- /tests-real/suites/options/.gitignore: -------------------------------------------------------------------------------- 1 | console 2 | -------------------------------------------------------------------------------- /tests-real/suites/options/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: test 2 | test: options other 3 | 4 | .PHONY: options 5 | options: 6 | ./option1-tests 7 | ./option2-tests 8 | ./option3-tests 9 | 10 | .PHONY: other 11 | other: 12 | ./autocomplete-tests 13 | ./other-tests 14 | -------------------------------------------------------------------------------- /tests-real/suites/options/autocomplete/autocomplete.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # load bash-completion functions 4 | source $(dirname $0)/../../../../resources/bash_completion/concuerror 5 | 6 | COMP_WORDS=("$1" "$2") 7 | COMP_CWORD=1 8 | 9 | _concuerror ignored "$2" "$1" 10 | 11 | echo ${COMPREPLY[@]} 12 | -------------------------------------------------------------------------------- /tests-real/suites/options/autocomplete/autocomplete_help.erl: -------------------------------------------------------------------------------- 1 | -module(autocomplete_help). 2 | 3 | -export([test/0]). 4 | 5 | test() -> 6 | OptionSpec = concuerror_options:options(), 7 | OptsRaw = [Keywords || {_, Keywords, _, _, _, _} <- OptionSpec], 8 | Opts = lists:usort(lists:append([[all, progress, attributes] | OptsRaw])), 9 | Keywords = [atom_to_list(K) || K <- Opts], 10 | autocomplete_common:test("./autocomplete.sh --help ''", Keywords, [no_sort_check]). 11 | -------------------------------------------------------------------------------- /tests-real/suites/options/autocomplete/autocomplete_long.erl: -------------------------------------------------------------------------------- 1 | -module(autocomplete_long). 2 | 3 | -export([test/0]). 4 | 5 | test() -> 6 | OptionSpec = concuerror_options:options(), 7 | OptsRaw = ["--" ++ atom_to_list(Long) || {Long, _, _, _, _, _} <- OptionSpec], 8 | Opts = lists:sort(OptsRaw), 9 | autocomplete_common:test("./autocomplete.sh concuerror --", Opts). 10 | -------------------------------------------------------------------------------- /tests-real/suites/options/autocomplete/autocomplete_short.erl: -------------------------------------------------------------------------------- 1 | -module(autocomplete_short). 2 | 3 | -export([test/0]). 4 | 5 | test() -> 6 | OptionSpec = concuerror_options:options(), 7 | OptsRaw = ["-" ++ [Short] || {_, _, Short, _, _, _} <- OptionSpec, Short =/= undefined], 8 | Opts = lists:sort(OptsRaw), 9 | autocomplete_common:test("./autocomplete.sh concuerror -", Opts). 10 | -------------------------------------------------------------------------------- /tests-real/suites/options/footer: -------------------------------------------------------------------------------- 1 | trap - ERR 2 | 3 | print_green "SUCCESS" 4 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/bad.erl: -------------------------------------------------------------------------------- 1 | -module(bad). 2 | 3 | -export([test/1). %% This has a typo and won't compile. 4 | 5 | test() -> 6 | ok. 7 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/bad_attribute.erl: -------------------------------------------------------------------------------- 1 | -module(bad_attribute). 2 | 3 | -export([test/0]). 4 | 5 | -concuerror_options(unknown_unknown). 6 | 7 | test() -> 8 | ok. 9 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/bad_attribute_1.erl: -------------------------------------------------------------------------------- 1 | -module(bad_attribute_1). 2 | 3 | -export([test/0]). 4 | 5 | -concuerror_options(unknown_unknown). 6 | 7 | test() -> 8 | ok. 9 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/bad_attribute_2.erl: -------------------------------------------------------------------------------- 1 | -module(bad_attribute_2). 2 | 3 | -export([test/0]). 4 | 5 | -concuerror_options_forced(version). 6 | 7 | test() -> 8 | ok. 9 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/bad_attribute_3.erl: -------------------------------------------------------------------------------- 1 | -module(bad_attribute_3). 2 | 3 | -export([test/0]). 4 | 5 | -concuerror_options([symbolic_names, keep_going, keep_going]). 6 | 7 | test() -> 8 | ok. 9 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/bad_attribute_4.erl: -------------------------------------------------------------------------------- 1 | -module(bad_attribute_4). 2 | 3 | -export([test/0]). 4 | 5 | -concuerror_options_forced([keep_going, keep_going]). 6 | 7 | test() -> 8 | ok. 9 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/bad_attribute_5.erl: -------------------------------------------------------------------------------- 1 | -module(bad_attribute_4). 2 | 3 | -export([test/0]). 4 | 5 | -concuerror_options_forced(keep_going). 6 | -concuerror_options(keep_going). 7 | 8 | test() -> 9 | ok. 10 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/debug_works.erl: -------------------------------------------------------------------------------- 1 | -module(debug_works). 2 | 3 | -export([test/0]). 4 | 5 | -ifndef(N). 6 | -define(N, 2). 7 | -endif. 8 | 9 | test() -> 10 | test(?N). 11 | 12 | test(N) -> 13 | P = self(), 14 | Fun = fun() -> P ! self() end, 15 | [spawn(Fun) || _ <- lists:seq(1, N)], 16 | receive 17 | _ -> ok 18 | end. 19 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/excluded.erl: -------------------------------------------------------------------------------- 1 | -module(excluded). 2 | 3 | -export([foo/0]). 4 | 5 | foo() -> 6 | P = self(), 7 | spawn(fun() -> P ! msg1 end), 8 | spawn(fun() -> P ! msg2 end), 9 | receive 10 | _ -> 11 | receive 12 | _ -> 13 | ok 14 | end 15 | end. 16 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/excluding.erl: -------------------------------------------------------------------------------- 1 | -module(excluding). 2 | 3 | -export([test/0]). 4 | 5 | -export([scenarios/0]). 6 | 7 | -concuerror_options_forced([{ignore_error, deadlock}]). 8 | 9 | %%------------------------------------------------------------------------------ 10 | 11 | scenarios() -> [{test, inf, optimal}]. 12 | 13 | %%------------------------------------------------------------------------------ 14 | 15 | test() -> 16 | excluded:foo(), 17 | receive after infinity -> ok end. 18 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/first_and_other_deadlock.erl: -------------------------------------------------------------------------------- 1 | -module(first_and_other_deadlock). 2 | 3 | -export([test/0]). 4 | 5 | test() -> 6 | CoinFlip = 7 | fun(Fun) -> 8 | fun() -> 9 | Palm = self(), 10 | spawn(fun() -> Palm ! coin end), 11 | receive 12 | coin -> Fun() 13 | after 14 | 0 -> ok 15 | end 16 | end 17 | end, 18 | MessageWaiter = 19 | fun() -> 20 | receive 21 | ok -> ok 22 | end 23 | end, 24 | P = self(), 25 | MaybeDeadlock = spawn(MessageWaiter), 26 | CoinForNever = spawn(CoinFlip(fun() -> P ! ok end)), 27 | CoinForMaybe = spawn(CoinFlip(fun() -> MaybeDeadlock ! ok end)), 28 | MessageWaiter(). 29 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/foo.erl: -------------------------------------------------------------------------------- 1 | -module(foo). 2 | 3 | -export([test/0]). 4 | 5 | test() -> 6 | ok. 7 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/from_shell.erl: -------------------------------------------------------------------------------- 1 | -module(from_shell). 2 | 3 | -export([ with_unknown/0 4 | , with_bad_entry/0 5 | , with_multiple_entries/0 6 | ]). 7 | 8 | %%============================================================================== 9 | 10 | with_unknown() -> 11 | fail = concuerror:run([unknown_option]). 12 | 13 | with_bad_entry() -> 14 | fail = concuerror:run([{entry_point, ugly}]). 15 | 16 | with_multiple_entries() -> 17 | fail = concuerror:run([{entry_point, one}, {entry_point, another}]). 18 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/load_nif.erl: -------------------------------------------------------------------------------- 1 | -module(load_nif). 2 | -export([test/0]). 3 | 4 | -on_load(init/0). 5 | 6 | init() -> 7 | catch erlang:load_nif("", no), 8 | ok. 9 | 10 | test() -> 11 | ok. 12 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/other_deadlock.erl: -------------------------------------------------------------------------------- 1 | -module(other_deadlock). 2 | 3 | -export([test/0]). 4 | 5 | test() -> 6 | CoinFlip = 7 | fun(Fun) -> 8 | fun() -> 9 | Palm = self(), 10 | spawn(fun() -> Palm ! coin end), 11 | receive 12 | coin -> Fun() 13 | after 14 | 0 -> ok 15 | end 16 | end 17 | end, 18 | MessageWaiter = 19 | fun() -> 20 | receive 21 | ok -> ok 22 | end 23 | end, 24 | P = self(), 25 | MaybeDeadlock = spawn(MessageWaiter), 26 | CoinForNever = spawn(fun() -> P ! ok end), 27 | CoinForMaybe = spawn(CoinFlip(fun() -> MaybeDeadlock ! ok end)), 28 | MessageWaiter(). 29 | -------------------------------------------------------------------------------- /tests-real/suites/options/src/six.erl: -------------------------------------------------------------------------------- 1 | -module(six). 2 | 3 | -export([test/0]). 4 | 5 | test() -> 6 | P = self(), 7 | F = fun(M) -> fun() -> P ! M end end, 8 | spawn(F(a)), 9 | spawn(F(b)), 10 | spawn(F(c)), 11 | _ = receive _ -> ok end, 12 | _ = receive _ -> ok end, 13 | _ = receive _ -> ok end. 14 | -------------------------------------------------------------------------------- /tests-real/suites/output/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: test 2 | test: 3 | ./output-tests 4 | -------------------------------------------------------------------------------- /tests-real/suites/output/footer: -------------------------------------------------------------------------------- 1 | ../options/footer -------------------------------------------------------------------------------- /tests-real/suites/output/header: -------------------------------------------------------------------------------- 1 | ../options/header -------------------------------------------------------------------------------- /tests-real/suites/output/src/a_fun.erl: -------------------------------------------------------------------------------- 1 | -module(a_fun). 2 | 3 | -export([test/0]). 4 | 5 | test() -> 6 | ThisIsAFun = fun() -> exit(error) end, 7 | P1 = spawn(fun() -> receive F -> F() end end), 8 | P1 ! ThisIsAFun. 9 | -------------------------------------------------------------------------------- /tests-real/suites/output/src/buggy.erl: -------------------------------------------------------------------------------- 1 | -module(buggy). 2 | 3 | -export([test/0]). 4 | 5 | test() -> 6 | P = self(), 7 | spawn(fun() -> P ! foo end), 8 | spawn(fun() -> P ! bar end), 9 | receive 10 | Msg -> 11 | true = Msg =:= foo 12 | end. 13 | -------------------------------------------------------------------------------- /tests-real/suites/output/src/deadlock.erl: -------------------------------------------------------------------------------- 1 | -module(deadlock). 2 | 3 | -export([test/0]). 4 | 5 | test() -> 6 | P = self(), 7 | spawn(fun() -> P ! foo end), 8 | receive 9 | bar -> ok 10 | end. 11 | -------------------------------------------------------------------------------- /tests-real/suites/output/src/harmless_exit.erl: -------------------------------------------------------------------------------- 1 | -module(harmless_exit). 2 | 3 | -export([test/0]). 4 | 5 | test() -> 6 | process_flag(trap_exit, true), 7 | spawn_link(fun() -> exit(abnormal) end), 8 | receive 9 | _ -> ok 10 | end. 11 | -------------------------------------------------------------------------------- /tests-real/suites/output/src/many_scheds.erl: -------------------------------------------------------------------------------- 1 | -module(many_scheds). 2 | 3 | -concuerror_options([{ignore_error, deadlock}]). 4 | 5 | -export([test/0, test_large/0]). 6 | 7 | test() -> 8 | test(6). 9 | 10 | test_large() -> 11 | test(10). 12 | 13 | test(N) -> 14 | ets:new(table, [public, named_table]), 15 | Fun = 16 | fun() -> 17 | ets:insert(table, {key, self()}) 18 | end, 19 | [spawn(Fun) || _ <- lists:seq(1, N)], 20 | receive after infinity -> ok end. 21 | -------------------------------------------------------------------------------- /tests-real/suites/output/src/more_stacktrace.erl: -------------------------------------------------------------------------------- 1 | -module(more_stacktrace). 2 | 3 | -export([test/0, do_not_blame_me/0]). 4 | 5 | test() -> 6 | erlang:diplay(). 7 | 8 | do_not_blame_me() -> 9 | self() ! ok, 10 | exit(abnormal). 11 | -------------------------------------------------------------------------------- /tests-real/suites/output/src/race_info.erl: -------------------------------------------------------------------------------- 1 | -module(race_info). 2 | 3 | -export([test/0]). 4 | 5 | test() -> 6 | P = self(), 7 | spawn(fun() -> P ! foo end), 8 | receive 9 | foo -> ok 10 | after 11 | 0 -> ok 12 | end. 13 | -------------------------------------------------------------------------------- /tests-real/suites/output/src/register.erl: -------------------------------------------------------------------------------- 1 | -module(register). 2 | 3 | -export([test/0]). 4 | 5 | -concuerror_options_forced([symbolic_names]). 6 | 7 | test() -> 8 | spawn(fun() -> 9 | register(foo, self()), 10 | exit(abnormal) 11 | end). 12 | -------------------------------------------------------------------------------- /tests-real/suites/poolboy/.gitignore: -------------------------------------------------------------------------------- 1 | poolboy 2 | -------------------------------------------------------------------------------- /tests-real/suites/poolboy/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: test 2 | 3 | test: poolboy/ebin/poolboy.beam poolboy/.eunit/poolboy_test_worker.beam poolboy/poolboy_tests_1.erl 4 | ./test 5 | 6 | poolboy/ebin/poolboy.beam: poolboy/rebar 7 | $(MAKE) REBAR=./$( /dev/null 11 | 12 | poolboy/poolboy_tests_1.erl: | poolboy 13 | git clone -q https://gist.github.com/b67df16361cd9a2fa87e.git tmp 14 | mv tmp/$(notdir $@) $@ 15 | rm -rf tmp 16 | 17 | poolboy/rebar: | poolboy 18 | cd poolboy; curl -O https://raw.githubusercontent.com/wiki/rebar/rebar/rebar; chmod u+x rebar 19 | 20 | poolboy: 21 | git clone -q https://github.com/devinus/poolboy.git --branch 1.2.2 22 | -------------------------------------------------------------------------------- /tests-real/suites/print_colors: -------------------------------------------------------------------------------- 1 | function print_red { 2 | echo -e "\033[1;31m$1\033[0m" 3 | } 4 | 5 | function print_green { 6 | echo -e "\033[1;32m$1\033[0m" 7 | } 8 | 9 | function print_blue { 10 | echo -e "\033[1;34m$1\033[0m" 11 | } 12 | -------------------------------------------------------------------------------- /tests/differ: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o pipefail 4 | 5 | DIFFPRINTER=${DIFFPRINTER:-thediff} 6 | 7 | DIFF=$(mktemp) 8 | 9 | diff \ 10 | <(grep " Summary" $1 2> /dev/null || echo empty1) \ 11 | <(grep " Summary" $2 2> /dev/null || echo empty2) \ 12 | > $DIFF 13 | 14 | if [ "$?" -ne 0 ]; then 15 | echo echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >> $DIFFPRINTER 16 | echo echo "New result:" >> $DIFFPRINTER 17 | echo "cat $2" >> $DIFFPRINTER 18 | echo echo "Diff from $1:" >> $DIFFPRINTER 19 | echo "cat $DIFF" >> $DIFFPRINTER 20 | exit 1 21 | fi 22 | -------------------------------------------------------------------------------- /tests/results/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /tests/suites/advanced_tests/src/manolis/good_testcase.txt: -------------------------------------------------------------------------------- 1 | {9,9,{8,3}}, [{33,{{3,4},x,2}},{32,{{2,0},x,2}},{31,{{4,7},x,2}},{30,{{2,8},y,2}},{29,{{7,5},y,2}},{28,{{0,0},y,2}},{27,{{4,0},y,2}},{26,{{0,1},y,2}},{25,{{7,6},y,2}},{24,{{5,3},y,2}},{23,{{2,6},x,2}},{22,{{2,3},y,2}},{21,{{6,8},y,2}},{20,{{5,5},y,2}},{19,{{6,0},y,2}},{18,{{7,1},x,2}},{17,{{0,6},x,2}},{16,{{0,3},x,2}},{15,{{5,1},y,2}},{14,{{1,4},y,2}},{13,{{5,6},y,2}},{12,{{7,3},x,2}},{11,{{1,6},x,2}},{10,{{0,8},y,2}},{9,{{5,7},x,2}},{8,{{4,5},x,2}},{7,{{1,5},y,2}},{6,{{4,2},y,2}},{5,{{1,2},y,2}},{4,{{3,0},x,2}},{3,{{3,6},x,2}},{2,{{4,4},y,2}},{1,{{6,7},y,2}},{0,{{8,7},x,2}}] 2 | -------------------------------------------------------------------------------- /tests/suites/advanced_tests/src/manolis/test.erl: -------------------------------------------------------------------------------- 1 | -module(test). 2 | 3 | -export([scenarios/0]). 4 | -export([test_2workers/0, test_2workers_small/0]). 5 | 6 | -concuerror_options_forced([{instant_delivery, false}, {scheduling, oldest}]). 7 | 8 | scenarios() -> 9 | [{test_2workers_small, inf, dpor}]. 10 | 11 | test_2workers() -> 12 | rush_hour:test_2workers(). 13 | 14 | test_2workers_small() -> 15 | rush_hour:test_2workers_small(). 16 | -------------------------------------------------------------------------------- /tests/suites/advanced_tests/src/shootout/test.erl: -------------------------------------------------------------------------------- 1 | -module(test). 2 | 3 | -export([scenarios/0]). 4 | -export([test1/0]). 5 | 6 | scenarios() -> 7 | [{test1, inf, dpor}]. 8 | 9 | test1() -> 10 | thread_ring:test1(). 11 | -------------------------------------------------------------------------------- /tests/suites/advanced_tests/src/source_killer.erl: -------------------------------------------------------------------------------- 1 | -module(source_killer). 2 | 3 | -export([test/0]). 4 | -export([scenarios/0]). 5 | 6 | -concuerror_options_forced([{ignore_error, deadlock}]). 7 | 8 | scenarios() -> [{test, inf, T} || T <- [source, dpor]]. 9 | 10 | test() -> 11 | ets:new(table, [public, named_table]), 12 | P = spawn(fun() -> ets:lookup(table, v), ets:lookup(table, k) end), 13 | spawn(fun() -> ets:insert(table, {k,1}) end), 14 | spawn(fun() -> ets:lookup(table, k), exit(P, kill) end), 15 | receive after infinity -> ok end. 16 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/ets_new-test-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 8 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {{badmatch,2}, 6 | [{ets_new,child,0,[{file,"ets_new.erl"},{line,32}]}]} 7 | Process P1 spawns process P1.1 8 | Process P1: ets_new {table,[named_table,public]} 9 | Process P1.1: ets_info {table} 10 | Process P1.1 exits ("Exception") 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/exit-test1-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 5 interleaving(s). 2 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 sends an exit signal to "P1.1" (normal) 8 | Process P1 exits (normal) 9 | Process P1.1 sets flag `trap_exit` to `true` 10 | Process P1.1 blocks 11 | 12 | 13 | 2 14 | Error type : Deadlock 15 | Blocked processes : P1.1 16 | Process P1 spawns process P1.1 17 | Process P1 sends an exit signal to "P1.1" (normal) 18 | Process P1.1 sets flag `trap_exit` to `true` 19 | Process P1.1 blocks 20 | Process P1 exits (normal) 21 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/exit-test2-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {foo,[]} 6 | Process P1 spawns process P1.1 7 | Process P1 sends an exit signal to "P1.1" (foo) 8 | Process P1.1: error [exit,foo,[]] 9 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/exit-test3-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 2 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {killed,[]} 6 | Process P1 spawns process P1.1 7 | Process P1 sends an exit signal to "P1.1" (kill) 8 | Process P1.1: error [exit,killed,[]] 9 | 10 | 11 | 2 12 | Error type : Exception 13 | Details : {killed,[]} 14 | Process P1 spawns process P1.1 15 | Process P1.1 sets flag `trap_exit` to `true` 16 | Process P1.1 blocks 17 | Process P1 sends an exit signal to "P1.1" (kill) 18 | Process P1.1: error [exit,killed,[]] 19 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/init_race_condition-test-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 224 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/instr_apply-test-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[{erlang,register,[test,<0.52.0>],[]}]} 6 | Process P1 spawns process P1.1 7 | Process P1.1 exits (normal) 8 | Process P1 registers process P1.1 (dead) as `test` 9 | Process P1 exits ("Exception") 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/normal_exit-normal_exit-inf-dpor.txt: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | Concuerror started with options: 3 | [{'after-timeout',infinite}, 4 | {assume_racing,false}, 5 | {files,["/home/stavros/git/Concuerror/tests/suites/basic_tests/src/normal_exit.erl"]}, 6 | {normal_exit,[normal]}, 7 | {symbolic,true}, 8 | {target,{normal_exit,normal_exit,[]}}, 9 | {verbose,0}, 10 | {wait,2000}] 11 | ################################################################################ 12 | No errors found! 13 | ################################################################################ 14 | Done! (Exit status: completed) 15 | Summary: 0 errors, 1/1 interleavings explored 16 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/process_info-test2-inf-dpor.txt: -------------------------------------------------------------------------------- 1 | Summary: 3 errors, 3/3 interleavings explored 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_receive_exit-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_receive_exit-0.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_receive_exit-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_receive_exit-1.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_receive_exit-2-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_receive_exit-2.txt: -------------------------------------------------------------------------------- 1 | Checked 5 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_receive_exit-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 5 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-0.txt: -------------------------------------------------------------------------------- 1 | Checked 8 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-1.txt: -------------------------------------------------------------------------------- 1 | Checked 44 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-2-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-2.txt: -------------------------------------------------------------------------------- 1 | Checked 136 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-3-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-3.txt: -------------------------------------------------------------------------------- 1 | Checked 275 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-4-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-4.txt: -------------------------------------------------------------------------------- 1 | Checked 392 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-5-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-5.txt: -------------------------------------------------------------------------------- 1 | Checked 458 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-6-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-6.txt: -------------------------------------------------------------------------------- 1 | Checked 481 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-7-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-7.txt: -------------------------------------------------------------------------------- 1 | Checked 483 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_3_proc_send_receive-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 483 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_after_clause_preemption-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_after_clause_preemption-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_halt_0-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_halt_0-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_halt_0-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_halt_1-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_halt_1-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_halt_1-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_link_receive_exit-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 links to process P1.1 8 | Process P1 exits (normal) 9 | Process P1.1 sets flag `trap_exit` to `true` 10 | Process P1.1 blocks 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_link_receive_exit-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 links to process P1.1 8 | Process P1 exits (normal) 9 | Process P1.1 sets flag `trap_exit` to `true` 10 | Process P1.1 blocks 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_link_receive_exit-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 links to process P1.1 8 | Process P1 exits (normal) 9 | Process P1.1 sets flag `trap_exit` to `true` 10 | Process P1.1 blocks 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_link_receive_exit-1.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 links to process P1.1 8 | Process P1 exits (normal) 9 | Process P1.1 sets flag `trap_exit` to `true` 10 | Process P1.1 blocks 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_link_receive_exit-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 links to process P1.1 8 | Process P1 exits (normal) 9 | Process P1.1 sets flag `trap_exit` to `true` 10 | Process P1.1 blocks 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_link_unlink-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 links to process P1.1 8 | Process P1 unlinks from process P1.1 9 | Process P1 blocks 10 | Process P1.1 sets flag `trap_exit` to `true` 11 | Process P1.1 sends message `foo` to process P1 12 | Process P1.1 blocks 13 | Process P1 receives message `foo` from process P1.1 14 | Process P1 exits (normal) 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_link_unlink-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 links to process P1.1 8 | Process P1 unlinks from process P1.1 9 | Process P1 blocks 10 | Process P1.1 sets flag `trap_exit` to `true` 11 | Process P1.1 sends message `foo` to process P1 12 | Process P1.1 blocks 13 | Process P1 receives message `foo` from process P1.1 14 | Process P1 exits (normal) 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_link_unlink-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 links to process P1.1 8 | Process P1 unlinks from process P1.1 9 | Process P1 blocks 10 | Process P1.1 sets flag `trap_exit` to `true` 11 | Process P1.1 sends message `foo` to process P1 12 | Process P1.1 blocks 13 | Process P1 receives message `foo` from process P1.1 14 | Process P1 exits (normal) 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_link_unlink-2-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 links to process P1.1 8 | Process P1 unlinks from process P1.1 9 | Process P1 blocks 10 | Process P1.1 sets flag `trap_exit` to `true` 11 | Process P1.1 sends message `foo` to process P1 12 | Process P1.1 blocks 13 | Process P1 receives message `foo` from process P1.1 14 | Process P1 exits (normal) 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_link_unlink-3-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 links to process P1.1 8 | Process P1 unlinks from process P1.1 9 | Process P1 blocks 10 | Process P1.1 sets flag `trap_exit` to `true` 11 | Process P1.1 sends message `foo` to process P1 12 | Process P1.1 blocks 13 | Process P1 receives message `foo` from process P1.1 14 | Process P1 exits (normal) 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_monitor_unexisting-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_monitor_unexisting-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_monitor_unexisting-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:398 6 | Expected : ok 7 | Value : not_ok 8 | Process P1 spawns process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 monitors process P1.1 (dead) 11 | Process P1 receives message `{'DOWN',#Ref<0.0.0.714>,process,...}` from process P1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_monitor_unexisting-1.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:398 6 | Expected : ok 7 | Value : not_ok 8 | Process P1 spawns process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 monitors process P1.1 (dead) 11 | Process P1 receives message `{'DOWN',#Ref<0.0.0.714>,process,...}` from process P1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_monitor_unexisting-inf-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:398 6 | Expected : ok 7 | Value : not_ok 8 | Process P1 spawns process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 monitors process P1.1 (dead) 11 | Process P1 receives message `{'DOWN',#Ref<0.0.0.714>,process,...}` from process P1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_monitor_unexisting-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:398 6 | Expected : ok 7 | Value : not_ok 8 | Process P1 spawns process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 monitors process P1.1 (dead) 11 | Process P1 receives message `{'DOWN',#Ref<0.0.0.714>,process,...}` from process P1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_nested_send_receive_block_twice-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_nested_send_receive_block_twice-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_nested_send_receive_block_twice-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_nested_send_receive_block_twice-1.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_nested_send_receive_block_twice-2-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_nested_send_receive_block_twice-2.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1 6 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1 6 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1 6 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_2-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1, P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 blocks 8 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_2-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1, P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 blocks 8 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_2-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1, P1.1 6 | Process P1 spawns process P1.1 7 | Process P1 blocks 8 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_block_expr_action-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_block_expr_action-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_block_expr_action-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_infinity_no_patterns-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1 6 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_infinity_no_patterns-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1 6 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_infinity_no_patterns-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1 6 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_infinity_with_pattern-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1 6 | Process P1 spawns and links to process P1.1 7 | Process P1 blocks 8 | Process P1.1 exits (normal) 9 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_infinity_with_pattern-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1 6 | Process P1 spawns and links to process P1.1 7 | Process P1 blocks 8 | Process P1.1 exits (normal) 9 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_infinity_with_pattern-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1 6 | Process P1 spawns and links to process P1.1 7 | Process P1 blocks 8 | Process P1.1 exits (normal) 9 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_no_patterns-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_no_patterns-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_no_patterns-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_no_patterns-1.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_no_patterns-2-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_no_patterns-2.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_no_patterns-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_with_pattern-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_with_pattern-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_with_pattern-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:201 6 | Expected : result2 7 | Value : result1 8 | Process P1 spawns process P1.1 9 | Process P1.1 sends message `foo` to process P1 10 | Process P1.1 exits (normal) 11 | Process P1 receives message `foo` from process P1.1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_with_pattern-1.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:201 6 | Expected : result2 7 | Value : result1 8 | Process P1 spawns process P1.1 9 | Process P1.1 sends message `foo` to process P1 10 | Process P1.1 exits (normal) 11 | Process P1 receives message `foo` from process P1.1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_with_pattern-2-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:201 6 | Expected : result2 7 | Value : result1 8 | Process P1 spawns process P1.1 9 | Process P1.1 sends message `foo` to process P1 10 | Process P1.1 exits (normal) 11 | Process P1 receives message `foo` from process P1.1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_receive_after_with_pattern-3-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:201 6 | Expected : result2 7 | Value : result1 8 | Process P1 spawns process P1.1 9 | Process P1.1 sends message `foo` to process P1 10 | Process P1.1 exits (normal) 11 | Process P1 receives message `foo` from process P1.1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_register_unregister-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 registers process P1 as `foo` 7 | Process P1 spawns process P1.1 8 | Process P1 unregisters process `foo` 9 | Process P1 blocks 10 | Process P1.1 sends message `bar` to process named 'foo' 11 | Process P1.1 exits ("Exception") 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_register_unregister-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 registers process P1 as `foo` 7 | Process P1 spawns process P1.1 8 | Process P1 unregisters process `foo` 9 | Process P1 blocks 10 | Process P1.1 sends message `bar` to process named 'foo' 11 | Process P1.1 exits ("Exception") 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_register_unregister-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 registers process P1 as `foo` 7 | Process P1 spawns process P1.1 8 | Process P1 unregisters process `foo` 9 | Process P1 blocks 10 | Process P1.1 sends message `bar` to process named 'foo' 11 | Process P1.1 exits ("Exception") 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_register_unregister-1.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 registers process P1 as `foo` 7 | Process P1 spawns process P1.1 8 | Process P1 unregisters process `foo` 9 | Process P1 blocks 10 | Process P1.1 sends message `bar` to process named 'foo' 11 | Process P1.1 exits ("Exception") 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_register_unregister-2-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 registers process P1 as `foo` 7 | Process P1 spawns process P1.1 8 | Process P1 unregisters process `foo` 9 | Process P1 blocks 10 | Process P1.1 sends message `bar` to process named 'foo' 11 | Process P1.1 exits ("Exception") 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_register_unregister-2.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 registers process P1 as `foo` 7 | Process P1 spawns process P1.1 8 | Process P1 unregisters process `foo` 9 | Process P1 blocks 10 | Process P1.1 sends message `bar` to process named 'foo' 11 | Process P1.1 exits ("Exception") 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_register_unregister-3-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 registers process P1 as `foo` 7 | Process P1 spawns process P1.1 8 | Process P1 unregisters process `foo` 9 | Process P1 blocks 10 | Process P1.1 sends message `bar` to process named 'foo' 11 | Process P1.1 exits ("Exception") 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_register_unregister-3.txt: -------------------------------------------------------------------------------- 1 | Checked 5 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 registers process P1 as `foo` 7 | Process P1 spawns process P1.1 8 | Process P1 unregisters process `foo` 9 | Process P1 blocks 10 | Process P1.1 sends message `bar` to process named 'foo' 11 | Process P1.1 exits ("Exception") 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_register_unregister-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 5 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 registers process P1 as `foo` 7 | Process P1 spawns process P1.1 8 | Process P1 unregisters process `foo` 9 | Process P1 blocks 10 | Process P1.1 sends message `bar` to process named 'foo' 11 | Process P1.1 exits ("Exception") 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send-1.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_2-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_2-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_2-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_2-1.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_2-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_3-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_3-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_3-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_3-1.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_3-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive-1.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive-2-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive-2.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_2-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_2-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_2-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_2-1.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_2-2-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_2-2.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_2-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_3-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_3-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_3-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_3-1.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_3-2-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_3-2.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_send_receive_3-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn-1.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_race-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_race-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_race-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {noproc,[{erlang,link,[<0.55.0>],[]}, 6 | {sched_tests,test_spawn_link_race,0,[]}]} 7 | Process P1 spawns process P1.1 8 | Process P1.1 exits (normal) 9 | Process P1 links to process P1.1 10 | Process P1 exits ("Exception") 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_race-1.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {noproc,[{erlang,link,[<0.55.0>],[]}, 6 | {sched_tests,test_spawn_link_race,0,[]}]} 7 | Process P1 spawns process P1.1 8 | Process P1.1 exits (normal) 9 | Process P1 links to process P1.1 10 | Process P1 exits ("Exception") 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_race-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {noproc,[{erlang,link,[<0.55.0>],[]}, 6 | {sched_tests,test_spawn_link_race,0,[]}]} 7 | Process P1 spawns process P1.1 8 | Process P1.1 exits (normal) 9 | Process P1 links to process P1.1 10 | Process P1 exits ("Exception") 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_receive_exit-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns and links to process P1.1 7 | Process P1 exits (normal) 8 | Process P1.1 sets flag `trap_exit` to `true` 9 | Process P1.1 blocks 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_receive_exit-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns and links to process P1.1 7 | Process P1 exits (normal) 8 | Process P1.1 sets flag `trap_exit` to `true` 9 | Process P1.1 blocks 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_receive_exit-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns and links to process P1.1 7 | Process P1 exits (normal) 8 | Process P1.1 sets flag `trap_exit` to `true` 9 | Process P1.1 blocks 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_receive_exit-1.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns and links to process P1.1 7 | Process P1 exits (normal) 8 | Process P1.1 sets flag `trap_exit` to `true` 9 | Process P1.1 blocks 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_receive_exit-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns and links to process P1.1 7 | Process P1 exits (normal) 8 | Process P1.1 sets flag `trap_exit` to `true` 9 | Process P1.1 blocks 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns and links to process P1.1 7 | Process P1 unlinks from process P1.1 8 | Process P1 blocks 9 | Process P1.1 sets flag `trap_exit` to `true` 10 | Process P1.1 sends message `foo` to process P1 11 | Process P1.1 blocks 12 | Process P1 receives message `foo` from process P1.1 13 | Process P1 exits (normal) 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns and links to process P1.1 7 | Process P1 unlinks from process P1.1 8 | Process P1 blocks 9 | Process P1.1 sets flag `trap_exit` to `true` 10 | Process P1.1 sends message `foo` to process P1 11 | Process P1.1 blocks 12 | Process P1 receives message `foo` from process P1.1 13 | Process P1 exits (normal) 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns and links to process P1.1 7 | Process P1 unlinks from process P1.1 8 | Process P1 blocks 9 | Process P1.1 sets flag `trap_exit` to `true` 10 | Process P1.1 sends message `foo` to process P1 11 | Process P1.1 blocks 12 | Process P1 receives message `foo` from process P1.1 13 | Process P1 exits (normal) 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink-2-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns and links to process P1.1 7 | Process P1 unlinks from process P1.1 8 | Process P1 blocks 9 | Process P1.1 sets flag `trap_exit` to `true` 10 | Process P1.1 sends message `foo` to process P1 11 | Process P1.1 blocks 12 | Process P1 receives message `foo` from process P1.1 13 | Process P1 exits (normal) 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink_2-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink_2-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink_2-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink_2-1.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink_2-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink_3-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink_3-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink_3-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:343 6 | Expected : ok 7 | Value : not_ok 8 | Process P1 sets flag `trap_exit` to `true` 9 | Process P1 spawns and links to process P1.1 10 | Process P1.1 exits (normal) 11 | Process P1 unlinks from process P1.1 12 | Process P1 receives message `{'EXIT',<0.53.0>,normal}` from process P1.1 13 | Process P1 exits ("Assertion violation") 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink_3-1.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:343 6 | Expected : ok 7 | Value : not_ok 8 | Process P1 sets flag `trap_exit` to `true` 9 | Process P1 spawns and links to process P1.1 10 | Process P1.1 exits (normal) 11 | Process P1 unlinks from process P1.1 12 | Process P1 receives message `{'EXIT',<0.57.0>,normal}` from process P1.1 13 | Process P1 exits ("Assertion violation") 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink_3-inf-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:343 6 | Expected : ok 7 | Value : not_ok 8 | Process P1 sets flag `trap_exit` to `true` 9 | Process P1 spawns and links to process P1.1 10 | Process P1.1 exits (normal) 11 | Process P1 unlinks from process P1.1 12 | Process P1 receives message `{'EXIT',<0.53.0>,normal}` from process P1.1 13 | Process P1 exits ("Assertion violation") 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_link_unlink_3-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:343 6 | Expected : ok 7 | Value : not_ok 8 | Process P1 sets flag `trap_exit` to `true` 9 | Process P1 spawns and links to process P1.1 10 | Process P1.1 exits (normal) 11 | Process P1 unlinks from process P1.1 12 | Process P1 receives message `{'EXIT',<0.57.0>,normal}` from process P1.1 13 | Process P1 exits ("Assertion violation") 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:418 6 | Expected : result2 7 | Value : result1 8 | Process P1 spawns and monitors process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 demonitors process P1.1 11 | Process P1 receives message `{'DOWN',#Ref<0.0.0.714>,process,...}` from process P1.1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor-1.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:418 6 | Expected : result2 7 | Value : result1 8 | Process P1 spawns and monitors process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 demonitors process P1.1 11 | Process P1 receives message `{'DOWN',#Ref<0.0.0.714>,process,...}` from process P1.1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor-inf-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:418 6 | Expected : result2 7 | Value : result1 8 | Process P1 spawns and monitors process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 demonitors process P1.1 11 | Process P1 receives message `{'DOWN',#Ref<0.0.0.714>,process,...}` from process P1.1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:418 6 | Expected : result2 7 | Value : result1 8 | Process P1 spawns and monitors process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 demonitors process P1.1 11 | Process P1 receives message `{'DOWN',#Ref<0.0.0.714>,process,...}` from process P1.1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_2-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_2-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_2-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:430 6 | Expected : result2 7 | Value : result1 8 | Process P1 spawns and monitors process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 demonitors process P1.1 11 | Process P1 receives message `{'DOWN',#Ref<0.0.0.714>,process,...}` from process P1.1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_2-1.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:430 6 | Expected : result2 7 | Value : result1 8 | Process P1 spawns and monitors process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 demonitors process P1.1 11 | Process P1 receives message `{'DOWN',#Ref<0.0.0.714>,process,...}` from process P1.1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_2-inf-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:430 6 | Expected : result2 7 | Value : result1 8 | Process P1 spawns and monitors process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 demonitors process P1.1 11 | Process P1 receives message `{'DOWN',#Ref<0.0.0.714>,process,...}` from process P1.1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_2-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:430 6 | Expected : result2 7 | Value : result1 8 | Process P1 spawns and monitors process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 demonitors process P1.1 11 | Process P1 receives message `{'DOWN',#Ref<0.0.0.714>,process,...}` from process P1.1 12 | Process P1 exits ("Assertion violation") 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_3-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_3-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_3-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_3-1.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_3-inf-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_3-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_4-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_4-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_4-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:449 6 | Expected : true 7 | Value : false 8 | Process P1 spawns and monitors process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 demonitors process P1.1 11 | Process P1 exits ("Assertion violation") 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_4-1.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:449 6 | Expected : true 7 | Value : false 8 | Process P1 spawns and monitors process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 demonitors process P1.1 11 | Process P1 exits ("Assertion violation") 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_4-inf-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:449 6 | Expected : true 7 | Value : false 8 | Process P1 spawns and monitors process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 demonitors process P1.1 11 | Process P1 exits ("Assertion violation") 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_monitor_demonitor_4-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:449 6 | Expected : true 7 | Value : false 8 | Process P1 spawns and monitors process P1.1 9 | Process P1.1 exits (normal) 10 | Process P1 demonitors process P1.1 11 | Process P1 exits ("Assertion violation") 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_opt_link_receive_exit-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 with opts 7 | Process P1 exits (normal) 8 | Process P1.1 sets flag `trap_exit` to `true` 9 | Process P1.1 blocks 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_opt_link_receive_exit-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 with opts 7 | Process P1 exits (normal) 8 | Process P1.1 sets flag `trap_exit` to `true` 9 | Process P1.1 blocks 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_opt_link_receive_exit-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 with opts 7 | Process P1 exits (normal) 8 | Process P1.1 sets flag `trap_exit` to `true` 9 | Process P1.1 blocks 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_opt_link_receive_exit-1.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 with opts 7 | Process P1 exits (normal) 8 | Process P1.1 sets flag `trap_exit` to `true` 9 | Process P1.1 blocks 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_opt_link_receive_exit-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1.1 6 | Process P1 spawns process P1.1 with opts 7 | Process P1 exits (normal) 8 | Process P1.1 sets flag `trap_exit` to `true` 9 | Process P1.1 blocks 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_opt_monitor-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1 6 | Process P1 spawns process P1.1 with opts (and monitors) 7 | Process P1 demonitors process P1.1 8 | Process P1 blocks 9 | Process P1.1 exits (normal) 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_opt_monitor-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1 6 | Process P1 spawns process P1.1 with opts (and monitors) 7 | Process P1 demonitors process P1.1 8 | Process P1 blocks 9 | Process P1.1 exits (normal) 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_opt_monitor-inf-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1 6 | Process P1 spawns process P1.1 with opts (and monitors) 7 | Process P1 demonitors process P1.1 8 | Process P1 blocks 9 | Process P1.1 exits (normal) 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_opt_monitor-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Deadlock 5 | Blocked processes : P1 6 | Process P1 spawns process P1.1 with opts (and monitors) 7 | Process P1 demonitors process P1.1 8 | Process P1 blocks 9 | Process P1.1 exits (normal) 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_register_race-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_register_race-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_register_race-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 spawns process P1.1 7 | Process P1.1 sends message `bar` to process named 'foo' 8 | Process P1.1 exits ("Exception") 9 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_register_race-1.txt: -------------------------------------------------------------------------------- 1 | Checked 3 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 spawns process P1.1 7 | Process P1.1 sends message `bar` to process named 'foo' 8 | Process P1.1 exits ("Exception") 9 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_register_race-2-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 spawns process P1.1 7 | Process P1.1 sends message `bar` to process named 'foo' 8 | Process P1.1 exits ("Exception") 9 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_register_race-2.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 spawns process P1.1 7 | Process P1.1 sends message `bar` to process named 'foo' 8 | Process P1.1 exits ("Exception") 9 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_spawn_register_race-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Exception 5 | Details : {badarg,[]} 6 | Process P1 spawns process P1.1 7 | Process P1.1 sends message `bar` to process named 'foo' 8 | Process P1.1 exits ("Exception") 9 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_trap_exit_timing-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_trap_exit_timing-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_trap_exit_timing-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:356 6 | Expected : ok 7 | Value : not_ok 8 | Process P1 sets flag `trap_exit` to `true` 9 | Process P1 spawns and links to process P1.1 10 | Process P1.1 exits (normal) 11 | Process P1 sets flag `trap_exit` to `false` 12 | Process P1 receives message `{'EXIT',<0.56.0>,normal}` from process P1.1 13 | Process P1 exits ("Assertion violation") 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_trap_exit_timing-1.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:356 6 | Expected : ok 7 | Value : not_ok 8 | Process P1 sets flag `trap_exit` to `true` 9 | Process P1 spawns and links to process P1.1 10 | Process P1.1 exits (normal) 11 | Process P1 sets flag `trap_exit` to `false` 12 | Process P1 receives message `{'EXIT',<0.62.0>,normal}` from process P1.1 13 | Process P1 exits ("Assertion violation") 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_trap_exit_timing-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 4 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:356 6 | Expected : ok 7 | Value : not_ok 8 | Process P1 sets flag `trap_exit` to `true` 9 | Process P1 spawns and links to process P1.1 10 | Process P1.1 exits (normal) 11 | Process P1 sets flag `trap_exit` to `false` 12 | Process P1 receives message `{'EXIT',<0.62.0>,normal}` from process P1.1 13 | Process P1 exits ("Assertion violation") 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_var_mod_fun-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_var_mod_fun-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_var_mod_fun-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_var_mod_fun-1.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_var_mod_fun-inf.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). No errors found. 2 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_whereis-0-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:381 6 | Expected : <0.50.0> 7 | Value : undefined 8 | Process P1 spawns process P1.1 9 | Process P1 registers process P1 as `foo` 10 | Process P1 sends message `foo` to process P1.1 11 | Process P1 exits (normal) 12 | Process P1.1 receives message `foo` from process P1 13 | Process P1.1 requests the pid of unregistered process `foo` (undefined) 14 | Process P1.1 exits ("Assertion violation") 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_whereis-0.txt: -------------------------------------------------------------------------------- 1 | Checked 1 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:381 6 | Expected : <0.50.0> 7 | Value : undefined 8 | Process P1 spawns process P1.1 9 | Process P1 registers process P1 as `foo` 10 | Process P1 sends message `foo` to process P1.1 11 | Process P1 exits (normal) 12 | Process P1.1 receives message `foo` from process P1 13 | Process P1.1 requests the pid of unregistered process `foo` (undefined) 14 | Process P1.1 exits ("Assertion violation") 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_whereis-1-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:381 6 | Expected : <0.50.0> 7 | Value : undefined 8 | Process P1 spawns process P1.1 9 | Process P1 registers process P1 as `foo` 10 | Process P1 sends message `foo` to process P1.1 11 | Process P1 exits (normal) 12 | Process P1.1 receives message `foo` from process P1 13 | Process P1.1 requests the pid of unregistered process `foo` (undefined) 14 | Process P1.1 exits ("Assertion violation") 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_whereis-1.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:381 6 | Expected : <0.50.0> 7 | Value : undefined 8 | Process P1 spawns process P1.1 9 | Process P1 registers process P1 as `foo` 10 | Process P1 sends message `foo` to process P1.1 11 | Process P1 exits (normal) 12 | Process P1.1 receives message `foo` from process P1 13 | Process P1.1 requests the pid of unregistered process `foo` (undefined) 14 | Process P1.1 exits ("Assertion violation") 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/sched_tests-test_whereis-2-dpor.txt: -------------------------------------------------------------------------------- 1 | Checked 2 interleaving(s). 1 errors found. 2 | 3 | 1 4 | Error type : Assertion violation 5 | Module:Line : sched_tests.erl:381 6 | Expected : <0.50.0> 7 | Value : undefined 8 | Process P1 spawns process P1.1 9 | Process P1 registers process P1 as `foo` 10 | Process P1 sends message `foo` to process P1.1 11 | Process P1 exits (normal) 12 | Process P1.1 receives message `foo` from process P1 13 | Process P1.1 requests the pid of unregistered process `foo` (undefined) 14 | Process P1.1 exits ("Assertion violation") 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/results/waiting-waiting-inf-dpor.txt: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | Concuerror started with options: 3 | [{'after-timeout',infinite}, 4 | {assume_racing,false}, 5 | {files,["/home/stavros/git/Concuerror/tests/suites/basic_tests/src/waiting.erl"]}, 6 | {normal_exit,[normal]}, 7 | {symbolic,true}, 8 | {target,{waiting,waiting,[]}}, 9 | {verbose,0}, 10 | {wait,2000}] 11 | ################################################################################ 12 | No errors found! 13 | ################################################################################ 14 | Done! (Exit status: completed) 15 | Summary: 0 errors, 1/1 interleavings explored 16 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/after_test_2.erl: -------------------------------------------------------------------------------- 1 | -module(after_test_2). 2 | 3 | -export([after_test_2/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | after_test_2() -> 9 | Parent = self(), 10 | spawn(fun() -> Parent ! one end), 11 | receive 12 | two -> throw(two) 13 | after 14 | 0 -> ok 15 | end, 16 | receive 17 | one -> ok 18 | after 19 | 0 -> ok 20 | end, 21 | receive 22 | deadlock -> ok 23 | end. 24 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/allow_first_crash.erl: -------------------------------------------------------------------------------- 1 | -module(allow_first_crash). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | -concuerror_options_forced([{keep_going, false}]). 7 | 8 | scenarios() -> 9 | [{test, inf, dpor}]. 10 | 11 | test() -> 12 | P = self(), 13 | spawn(fun() -> P ! ok end), 14 | receive 15 | ok -> ok 16 | after 17 | 0 -> ok 18 | end, 19 | exit(error). 20 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/application_check.erl: -------------------------------------------------------------------------------- 1 | -module(application_check). 2 | 3 | -export([test/0]). 4 | 5 | -export([scenarios/0]). 6 | -export([exceptional/0]). 7 | 8 | %%------------------------------------------------------------------------------ 9 | 10 | scenarios() -> [{test, inf, dpor, crash}]. 11 | 12 | exceptional() -> 13 | fun(_Expected, Actual) -> 14 | Cmd = "grep \"Your test communicates with the 'application_controller' process.\" ", 15 | [_,_,_|_] = os:cmd(Cmd ++ Actual), 16 | true 17 | end. 18 | 19 | %%------------------------------------------------------------------------------ 20 | 21 | test() -> 22 | application:start(crypto), 23 | application:get_env(crypto). 24 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/bad_dictionary.erl: -------------------------------------------------------------------------------- 1 | -module(bad_dictionary). 2 | 3 | -compile(export_all). 4 | 5 | scenarios() -> 6 | [ bad_put 7 | , bad_get 8 | , bad_erase 9 | ]. 10 | 11 | bad_put() -> 12 | BadFun = 13 | fun() -> 14 | erlang:put(key, value), 15 | erlang:put(key, value, extra_arg_bad) 16 | end, 17 | spawn_monitor(BadFun). 18 | 19 | bad_get() -> 20 | BadFun = 21 | fun() -> 22 | erlang:get(key), 23 | erlang:get(key, extra_arg_bad) 24 | end, 25 | spawn_monitor(BadFun). 26 | 27 | bad_erase() -> 28 | BadFun = 29 | fun() -> 30 | erlang:erase(key), 31 | erlang:erase(key, value) 32 | end, 33 | spawn_monitor(BadFun). 34 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/bad_whereis.erl: -------------------------------------------------------------------------------- 1 | -module(bad_whereis). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor}]. 8 | 9 | test() -> 10 | whereis(1). 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/code_when_undef.erl: -------------------------------------------------------------------------------- 1 | -module(code_when_undef). 2 | 3 | -compile(export_all). 4 | 5 | scenarios() -> 6 | [ test 7 | ]. 8 | 9 | test() -> 10 | catch ets:non_existing_function(), 11 | code:module_info(), 12 | P = self(), 13 | spawn(fun() -> P ! ok end), 14 | receive 15 | ok -> ok 16 | after 17 | 0 -> ok 18 | end, 19 | exit(error). 20 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/concuerror_crash.erl: -------------------------------------------------------------------------------- 1 | -module(concuerror_crash). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor, crash}]. 8 | 9 | test() -> 10 | P = self(), 11 | spawn(fun() -> P ! ok end), 12 | receive 13 | ok -> 14 | list_to_pid("<0.42.42>") ! ok 15 | after 16 | 0 -> ok 17 | end. 18 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/curious_builtins.erl: -------------------------------------------------------------------------------- 1 | -module(curious_builtins). 2 | 3 | -export([scenarios/0]). 4 | -export([test1/0,test2/0,test3/0]). 5 | 6 | scenarios() -> 7 | [{T, inf, dpor} || T <- [test1,test2,test3]]. 8 | 9 | test1() -> 10 | true = is_list(erlang:pid_to_list(self())). 11 | 12 | test2() -> 13 | true = is_number(erlang:system_info(schedulers)). 14 | 15 | test3() -> 16 | true = is_list(erlang:get_stacktrace()). 17 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/dead_receive.erl: -------------------------------------------------------------------------------- 1 | -module(dead_receive). 2 | 3 | -export([dead_receive/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | dead_receive() -> 9 | Timeout = infinity, 10 | receive 11 | after Timeout -> ok 12 | end. 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/depth_bound.erl: -------------------------------------------------------------------------------- 1 | -module(depth_bound). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | -concuerror_options_forced([{keep_going, false}, {depth_bound, 10}]). 7 | 8 | scenarios() -> 9 | [{test, inf, dpor}]. 10 | 11 | test() -> 12 | process_flag(trap_exit, true), 13 | test(). 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/erlang_display.erl: -------------------------------------------------------------------------------- 1 | -module(erlang_display). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor}]. 8 | 9 | test() -> 10 | erlang:display(test), 11 | receive after infinity -> ok end. 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/erlang_display_string.erl: -------------------------------------------------------------------------------- 1 | -module(erlang_display_string). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor}]. 8 | 9 | test() -> 10 | erlang:display_string("Foo"), 11 | receive after infinity -> ok end. 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/ets_exceptions.erl: -------------------------------------------------------------------------------- 1 | -module(ets_exceptions). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> [{test, inf, dpor}]. 7 | 8 | test() -> 9 | test(2). 10 | 11 | test(N) -> 12 | table = ets:new(table, [public, named_table]), 13 | chain(N), 14 | true = [{key, N}] =/= ets:lookup(table, key). 15 | 16 | chain(0) -> ok; 17 | chain(N) -> 18 | Fun = fun() -> ets:insert(table, {key, N}) end, 19 | Q = spawn(Fun), 20 | chain(N - 1). 21 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/ets_heir_2.erl: -------------------------------------------------------------------------------- 1 | -module(ets_heir_2). 2 | 3 | -export([ets_heir_2/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | ets_heir_2() -> 9 | spawn(fun() -> 10 | ets:lookup(table, x), 11 | throw(too_bad) 12 | end), 13 | Heir = spawn(fun() -> ok end), 14 | ets:new(table, [named_table, {heir, Heir, heir}]). 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/ets_insert_new.erl: -------------------------------------------------------------------------------- 1 | -module(ets_insert_new). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor}]. 8 | 9 | test() -> 10 | ets:new(table, [named_table, public]), 11 | child(), 12 | child(), 13 | child(), 14 | receive after infinity -> ok end. 15 | 16 | child() -> 17 | spawn(fun() -> 18 | try 19 | ets:update_counter(table, c, 1) 20 | catch 21 | _:_ -> 22 | ets:insert_new(table, {c,1}) 23 | end 24 | end). 25 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/ets_many_insert_new.erl: -------------------------------------------------------------------------------- 1 | -module(ets_many_insert_new). 2 | 3 | -export([ets_many_insert_new/0, ets_many_insert_new/1]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | ets_many_insert_new() -> 9 | ets_many_insert_new(3). 10 | 11 | ets_many_insert_new(N) -> 12 | ets:new(table, [public, named_table]), 13 | Writer = 14 | fun(I) -> 15 | ets:insert_new(table, {x, I}) 16 | end, 17 | [spawn(fun() -> Writer(I) end) || I <- lists:seq(1, N)], 18 | ets:lookup(table, x), 19 | receive 20 | after 21 | infinity -> deadlock 22 | end. 23 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/ets_new_failure.erl: -------------------------------------------------------------------------------- 1 | -module(ets_new_failure). 2 | 3 | -export([ets_new_failure/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | ets_new_failure() -> 9 | ets:new(table, [named_table, public]), 10 | ets:new(table, [named_table, public]). 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/ets_new_failure_3.erl: -------------------------------------------------------------------------------- 1 | -module(ets_new_failure_3). 2 | 3 | -export([ets_new_failure_3/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | ets_new_failure_3() -> 9 | Fun = 10 | fun() -> 11 | ets:new(table, [named_table, public]) 12 | end, 13 | spawn(Fun), 14 | spawn(Fun). 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/ets_unguarded.erl: -------------------------------------------------------------------------------- 1 | -module(ets_unguarded). 2 | 3 | -export([test/0]). 4 | 5 | -export([scenarios/0]). 6 | 7 | %%------------------------------------------------------------------------------ 8 | 9 | scenarios() -> [{test, inf, optimal}]. 10 | 11 | %%------------------------------------------------------------------------------ 12 | 13 | test() -> 14 | ets:new(table, [named_table, public]), 15 | Fun = 16 | fun() -> 17 | ets:insert(table, {1, self()}) 18 | end, 19 | _ = [spawn(Fun) || _ <- lists:seq(1, 3)]. 20 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/exit_kill.erl: -------------------------------------------------------------------------------- 1 | -module(exit_kill). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | -concuerror_options_forced([{treat_as_normal, kill}]). 7 | 8 | scenarios() -> 9 | [{test, inf, dpor}]. 10 | 11 | test() -> 12 | process_flag(trap_exit, true), 13 | Child = spawn_link(fun() -> exit(kill) end), 14 | receive 15 | {'EXIT', Child, kill} -> ok 16 | end. 17 | 18 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/exit_message_unpredicted.erl: -------------------------------------------------------------------------------- 1 | -module(exit_message_unpredicted). 2 | 3 | -export([exit_message_unpredicted/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | exit_message_unpredicted() -> 9 | P1 = self(), 10 | {P11,_} = spawn_monitor(fun() -> ok end), 11 | P12 = spawn(fun() -> P1 ! ok end), 12 | is_process_alive(P11), 13 | receive 14 | _ -> ok 15 | end, 16 | receive after infinity -> ok end. 17 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/file_read_file.erl: -------------------------------------------------------------------------------- 1 | -module(file_read_file). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor}]. 8 | 9 | test() -> 10 | spawn(fun() -> file:get_cwd() end), 11 | file:get_cwd(). 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/fun_fail.erl: -------------------------------------------------------------------------------- 1 | -module(fun_fail). 2 | 3 | -export([scenarios/0]). 4 | -export([test1/0,test2/0,test3/0]). 5 | 6 | scenarios() -> 7 | [{T, inf, dpor} || T <- [test1,test2,test3]]. 8 | 9 | test1() -> 10 | A = ban, 11 | A(foo). 12 | 13 | test2() -> 14 | A = fun() -> ok end, 15 | A(foo). 16 | 17 | test3() -> 18 | A = 1, 19 | A:foo(blip). 20 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/group_leader.erl: -------------------------------------------------------------------------------- 1 | -module(group_leader). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0, test1/0]). 5 | 6 | scenarios() -> 7 | [{T, inf, dpor} || T <- [test,test1]]. 8 | 9 | test() -> 10 | C = spawn(fun() -> receive _ -> ok end end), 11 | group_leader(C, self()), 12 | C ! ok. 13 | 14 | test1() -> 15 | {C, _} = spawn_monitor(fun() -> ok end), 16 | receive 17 | _MonitorDown -> ok 18 | end, 19 | group_leader(C, self()). 20 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/group_leader3.erl: -------------------------------------------------------------------------------- 1 | -module(group_leader3). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | -concuerror_options_forced([{ignore_error, deadlock}]). 7 | 8 | scenarios() -> 9 | [{test, inf, dpor}]. 10 | 11 | test() -> 12 | P = spawn(fun() -> receive after infinity -> ok end end), 13 | spawn(fun() -> group_leader(self(), P) end), 14 | process_info(P, group_leader). 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/halt_error.erl: -------------------------------------------------------------------------------- 1 | -module(halt_error). 2 | 3 | -export([test1/0, test2/0]). 4 | 5 | -export([scenarios/0]). 6 | 7 | scenarios() -> [{T, inf, optimal} || T <- [test1, test2]]. 8 | 9 | %%------------------------------------------------------------------------------ 10 | 11 | test1() -> 12 | spawn(fun() -> io:format("Will never be shown") end), 13 | erlang:halt(1). 14 | 15 | test2() -> 16 | spawn(fun() -> halt(0) end), 17 | io:format("Will be shown"). 18 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/halt_support.erl: -------------------------------------------------------------------------------- 1 | -module(halt_support). 2 | 3 | -export([test/0]). 4 | 5 | -export([scenarios/0]). 6 | -export([exceptional/0]). 7 | 8 | scenarios() -> [{test, inf, optimal}]. 9 | 10 | exceptional() -> 11 | fun(_Expected, Actual) -> 12 | String = 13 | "Concuerror does not do race analysis for calls to erlang:halt", 14 | Cmd = "grep \"" ++ String ++ "\" ", 15 | [_,_,_|_] = os:cmd(Cmd ++ Actual), 16 | true 17 | end. 18 | 19 | %%------------------------------------------------------------------------------ 20 | 21 | test() -> 22 | spawn(fun() -> io:format("Will never be shown") end), 23 | erlang:halt(0). 24 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/hibernate.erl: -------------------------------------------------------------------------------- 1 | -module(hibernate). 2 | 3 | -compile(export_all). 4 | 5 | scenarios() -> 6 | [ test 7 | ]. 8 | 9 | test() -> 10 | P = spawn(fun foo/0), 11 | P ! ok. 12 | 13 | foo() -> 14 | try 15 | erlang:hibernate(?MODULE, resume, []) 16 | catch 17 | _:_ -> error(impossible) 18 | end. 19 | 20 | resume() -> 21 | throw(possible). 22 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/hopeless_after.erl: -------------------------------------------------------------------------------- 1 | -module(hopeless_after). 2 | 3 | -export([hopeless_after/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | hopeless_after() -> 9 | P = self(), 10 | spawn(fun() -> P ! hopeless end), 11 | receive 12 | hope -> saved 13 | after 14 | 100 -> 15 | throw(no_hope) 16 | end. 17 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/i_hate_myself.erl: -------------------------------------------------------------------------------- 1 | -module(i_hate_myself). 2 | 3 | -export([i_hate_myself/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | i_hate_myself() -> 9 | Name = list_to_atom(lists:flatten(io_lib:format("~p",[make_ref()]))), 10 | spawn(fun() -> Name ! message end), 11 | register(Name, self()), 12 | receive 13 | message -> ok 14 | end. 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/ignore_error_1.erl: -------------------------------------------------------------------------------- 1 | -module(ignore_error_1). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | -concuerror_options_forced([{ignore_error, abnormal_exit}]). 7 | 8 | scenarios() -> 9 | [{test, inf, dpor}]. 10 | 11 | test() -> 12 | P = self(), 13 | spawn(fun() -> exit(boom) end), 14 | receive after infinity -> ok end. 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/ignore_error_2.erl: -------------------------------------------------------------------------------- 1 | -module(ignore_error_2). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | -concuerror_options_forced([{ignore_error, deadlock}]). 7 | 8 | scenarios() -> 9 | [{test, inf, dpor}]. 10 | 11 | test() -> 12 | P = self(), 13 | spawn(fun() -> exit(boom) end), 14 | receive after infinity -> ok end. 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/ignore_error_3.erl: -------------------------------------------------------------------------------- 1 | -module(ignore_error_3). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | -concuerror_options_forced( 7 | [ {depth_bound, 10} 8 | , {ignore_error, depth_bound} 9 | , {ignore_error, deadlock} 10 | ]). 11 | 12 | scenarios() -> 13 | [{test, inf, dpor}]. 14 | 15 | test() -> 16 | P = self(), 17 | loop(10), 18 | spawn(fun() -> exit(boom) end), 19 | receive after infinity -> ok end. 20 | 21 | loop(0) -> ok; 22 | loop(N) -> 23 | self() ! ok, 24 | loop(N-1). 25 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/infinite_loop.erl: -------------------------------------------------------------------------------- 1 | -module(infinite_loop). 2 | 3 | -export([scenarios/0]). 4 | -export([exceptional/0]). 5 | -export([test1/0, test2/0]). 6 | 7 | -concuerror_options_forced([{timeout, 500}]). 8 | 9 | scenarios() -> 10 | [{T, inf, dpor, crash} || T <- [test1, test2]]. 11 | 12 | exceptional() -> 13 | fun(_Expected, Actual) -> 14 | Cmd = 15 | "grep \"You can try to increase the '--timeout' limit and/or ensure that" 16 | " there are no infinite loops in your test.\" ", 17 | [_,_,_|_] = os:cmd(Cmd ++ Actual), 18 | true 19 | end. 20 | 21 | test1() -> 22 | loop(). 23 | 24 | test2() -> 25 | process_flag(trap_exit, true), 26 | loop(). 27 | 28 | loop() -> 29 | loop(). 30 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/init_race_condition.erl: -------------------------------------------------------------------------------- 1 | %% A late reply from init could be registered as unblocking the respective child 2 | %% but not be previously instrumented. This bug appears on bigger machines. 3 | 4 | -module(init_race_condition). 5 | 6 | -export([scenarios/0]). 7 | -export([test/0]). 8 | 9 | scenarios() -> [{test, inf, dpor}]. 10 | 11 | get_arguments() -> 12 | init ! {self(), get_arguments}, 13 | receive 14 | {init, Rep} -> Rep 15 | end. 16 | 17 | test() -> 18 | [ spawn(fun() -> get_arguments() end) || _ <- lists:seq(1, 2) ]. 19 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/inspect_system.erl: -------------------------------------------------------------------------------- 1 | -module(inspect_system). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor}]. 8 | 9 | test() -> 10 | {group_leader, _} = process_info(whereis(kernel_sup), group_leader). 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/io_error.erl: -------------------------------------------------------------------------------- 1 | -module(io_error). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor}]. 8 | 9 | test() -> 10 | io:format(standard_error,"Test",[]), 11 | receive after infinity -> ok end. 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/io_format.erl: -------------------------------------------------------------------------------- 1 | -module(io_format). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor}]. 8 | 9 | test() -> 10 | io:format("Test"), 11 | receive after infinity -> ok end. 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/io_format_2.erl: -------------------------------------------------------------------------------- 1 | -module(io_format_2). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor}]. 8 | 9 | test() -> 10 | spawn(fun() -> io:format("Child~n") end), 11 | io:format("Parent~n"), 12 | receive after infinity -> ok end. 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/io_format_3.erl: -------------------------------------------------------------------------------- 1 | -module(io_format_3). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | -concuerror_options_forced([{non_racing_system, user}]). 7 | 8 | scenarios() -> 9 | [{test, inf, dpor}]. 10 | 11 | test() -> 12 | P = self(), 13 | spawn( 14 | fun() -> P ! ok, 15 | io:format("Child~n") 16 | end), 17 | receive 18 | ok -> io:format("Parent~n") 19 | after 20 | 0 -> ok 21 | end, 22 | receive after infinity -> ok end. 23 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/irrelevant_send.erl: -------------------------------------------------------------------------------- 1 | -module(irrelevant_send). 2 | 3 | -export([irrelevant_send/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | irrelevant_send() -> 9 | process_flag(trap_exit, true), 10 | P1 = spawn_link(fun() -> ok end), 11 | P2 = spawn_link(fun() -> ok end), 12 | receive 13 | {'EXIT', P1, normal} -> ok; 14 | {'EXIT', P2, normal} -> throw(error) 15 | end. 16 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/is_process_alive_1.erl: -------------------------------------------------------------------------------- 1 | -module(is_process_alive_1). 2 | 3 | -export([is_process_alive_1/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | is_process_alive_1() -> 9 | Pid = spawn(fun() -> ok end), 10 | case is_process_alive(Pid) of 11 | true -> register(child, Pid); 12 | false -> ok 13 | end. 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/late_hope.erl: -------------------------------------------------------------------------------- 1 | -module(late_hope). 2 | 3 | -export([late_hope/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | late_hope() -> 9 | P = self(), 10 | Q = spawn(fun() -> ok end), 11 | spawn(fun() -> Q ! ignore, 12 | P ! hope end), 13 | receive 14 | hope -> throw(saved) 15 | after 16 | 100 -> hopeless 17 | end. 18 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/link_after.erl: -------------------------------------------------------------------------------- 1 | -module(link_after). 2 | 3 | -export([link_after/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | link_after() -> 9 | P1 = spawn(fun() -> 10 | process_flag(trap_exit, true), 11 | receive 12 | _ -> throw(untrapped) 13 | after 14 | 0 -> ok 15 | end 16 | end), 17 | try link(P1) 18 | catch _:_ -> ok 19 | end. 20 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/load_before_start.erl: -------------------------------------------------------------------------------- 1 | -module(load_before_start). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor}]. 8 | 9 | test() -> 10 | spawn(ets,new,[table,[named_table]]), 11 | spawn(ets,lookup,[table,key]). 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/log_all.erl: -------------------------------------------------------------------------------- 1 | -module(log_all). 2 | 3 | -export([test/0]). 4 | -export([scenarios/0]). 5 | -export([exceptional/0]). 6 | 7 | -concuerror_options_forced([log_all]). 8 | 9 | scenarios() -> [{test, inf, dpor}]. 10 | 11 | exceptional() -> 12 | fun(_Expected, Actual) -> 13 | Cmd = "grep \"Event trace\" ", 14 | case os:cmd(Cmd ++ Actual) of 15 | [_,_,_|_] -> true; 16 | _ -> false 17 | end 18 | end. 19 | 20 | test() -> 21 | P = self(), 22 | Q = spawn(fun() -> receive A -> A ! ok end end), 23 | S = spawn(fun() -> receive _ -> ok after 100 -> ok end end), 24 | Q ! S, 25 | S ! ok. 26 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/many_kill.erl: -------------------------------------------------------------------------------- 1 | -module(many_kill). 2 | 3 | -export([test/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{test, inf, dpor}]. 7 | 8 | test() -> 9 | Fun = 10 | fun() -> 11 | receive after infinity -> ok end 12 | end, 13 | Pid = spawn(Fun), 14 | spawn(fun() -> exit(Pid, not_normal) end), 15 | spawn(fun() -> exit(Pid, also_not_normal) end), 16 | spawn(fun() -> exit(Pid, not_normal) end). 17 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/many_links.erl: -------------------------------------------------------------------------------- 1 | -module(many_links). 2 | 3 | -export([many_links/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | many_links() -> 9 | process_flag(trap_exit, true), 10 | P1 = spawn(fun() -> ok end), 11 | P2 = spawn(fun() -> ok end), 12 | link(P1), 13 | link(P2), 14 | receive after infinity -> ok end. 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/many_monitors.erl: -------------------------------------------------------------------------------- 1 | -module(many_monitors). 2 | 3 | -export([many_monitors/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | many_monitors() -> 9 | P1 = spawn(fun() -> ok end), 10 | P2 = spawn(fun() -> ok end), 11 | monitor(process, P1), 12 | monitor(process, P2), 13 | receive after infinity -> ok end. 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/many_send_to_dead.erl: -------------------------------------------------------------------------------- 1 | -module(many_send_to_dead). 2 | 3 | -export([many_send_to_dead/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | many_send_to_dead() -> 9 | Pid = spawn(fun() -> receive _ -> ok after 0 -> ok end end), 10 | spawn(fun() -> Pid ! msg1 end), 11 | spawn(fun() -> Pid ! msg2 end), 12 | receive 13 | after 14 | infinity -> deadlock 15 | end. 16 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/many_send_to_dead_2.erl: -------------------------------------------------------------------------------- 1 | -module(many_send_to_dead_2). 2 | 3 | -export([many_send_to_dead_2/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | many_send_to_dead_2() -> 9 | Pid = 10 | spawn(fun() -> 11 | receive _ -> ok after 0 -> ok end, 12 | receive _ -> ok after 0 -> ok end 13 | end), 14 | spawn(fun() -> Pid ! msg1 end), 15 | spawn(fun() -> Pid ! msg2 end), 16 | receive 17 | after 18 | infinity -> deadlock 19 | end. 20 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/message_queue_length.erl: -------------------------------------------------------------------------------- 1 | -module(message_queue_length). 2 | 3 | -export([test/0]). 4 | 5 | -export([scenarios/0]). 6 | 7 | %%------------------------------------------------------------------------------ 8 | 9 | scenarios() -> [{test, inf, optimal}]. 10 | 11 | %%------------------------------------------------------------------------------ 12 | 13 | test() -> 14 | P = self(), 15 | spawn(fun() -> 16 | P ! one, 17 | P ! two 18 | end), 19 | receive 20 | two -> 21 | {message_queue_len, 1} 22 | = erlang:process_info(self(), message_queue_len) 23 | end. 24 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/messed_deliveries.erl: -------------------------------------------------------------------------------- 1 | -module(messed_deliveries). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor}]. 8 | 9 | test() -> 10 | P = self(), 11 | process_flag(trap_exit, true), 12 | Q = spawn(fun() -> receive _ -> ok after 0 -> ok end end), 13 | spawn(fun() -> exit(P, die) end), 14 | spawn(fun() -> exit(P, die) end), 15 | Q ! ok. 16 | 17 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/module_loaded_dep.erl: -------------------------------------------------------------------------------- 1 | -module(module_loaded_dep). 2 | 3 | -compile(export_all). 4 | 5 | scenarios() -> 6 | [ test 7 | ]. 8 | 9 | test() -> 10 | P = spawn(fun() -> erlang:module_loaded(erlang) end), 11 | spawn(fun() -> P ! ok end). 12 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/monitor_failure.erl: -------------------------------------------------------------------------------- 1 | -module(monitor_failure). 2 | 3 | -export([monitor_failure/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | monitor_failure() -> 9 | monitor(process, 1). 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/monitor_missing_messages.erl: -------------------------------------------------------------------------------- 1 | -module(monitor_missing_messages). 2 | 3 | -export([monitor_missing_messages/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | monitor_missing_messages() -> 9 | spawn_monitor(fun() -> ok end), 10 | receive 11 | _ -> throw(boo) 12 | after 13 | 0 -> ok 14 | end. 15 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/monitor_named.erl: -------------------------------------------------------------------------------- 1 | -module(monitor_named). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor}]. 8 | 9 | test() -> 10 | C = spawn(fun() -> receive quit -> ok end end), 11 | true = register(child, C), 12 | Ref = monitor(process, child), 13 | true = unregister(child), 14 | C ! quit, 15 | receive 16 | {'DOWN',Ref, process, {child,_}, normal} -> ok 17 | end. 18 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/node_names.erl: -------------------------------------------------------------------------------- 1 | -module(node_names). 2 | 3 | -export([scenarios/0]). 4 | -export([test1/0,test2/0]). 5 | 6 | scenarios() -> 7 | [{T, inf, dpor} || T <- [test1,test2]]. 8 | 9 | test1() -> 10 | R = monitor(process, {foo, node()}), 11 | receive 12 | {'DOWN',R,process,{foo,N},noproc} when N =:= node() -> ok 13 | end. 14 | 15 | test2() -> 16 | register(foo, self()), 17 | spawn(fun() -> {foo, node()} ! ok end), 18 | receive 19 | ok -> ok 20 | end. 21 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/nonexistent_module.erl: -------------------------------------------------------------------------------- 1 | -module(nonexistent_module). 2 | 3 | -export([test/0]). 4 | 5 | -export([scenarios/0]). 6 | -export([exceptional/0]). 7 | 8 | -concuerror_options_forced([]). 9 | 10 | %%------------------------------------------------------------------------------ 11 | 12 | scenarios() -> [{test, inf, optimal}]. 13 | 14 | exceptional() -> 15 | fun(_Expected, Actual) -> 16 | Cmd = "grep \"Could not load module 'nonexistent_module_42'\" ", 17 | [_,_,_|_] = os:cmd(Cmd ++ Actual), 18 | true 19 | end. 20 | 21 | %%------------------------------------------------------------------------------ 22 | 23 | test() -> 24 | nonexistent_module_42:test(). 25 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/normal_exit.erl: -------------------------------------------------------------------------------- 1 | -module(normal_exit). 2 | 3 | -export([normal_exit/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | normal_exit() -> 9 | exit(normal). 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/normal_shutdown.erl: -------------------------------------------------------------------------------- 1 | -module(normal_shutdown). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | -concuerror_options_forced([{treat_as_normal, shutdown}]). 7 | 8 | scenarios() -> 9 | [{test, inf, dpor}]. 10 | 11 | test() -> 12 | exit(shutdown). 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/normal_tuple_exit.erl: -------------------------------------------------------------------------------- 1 | -module(normal_tuple_exit). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | -concuerror_options_forced([{treat_as_normal, undef}]). 7 | 8 | scenarios() -> 9 | [{test, inf, dpor}]. 10 | 11 | test() -> 12 | non:existing(). 13 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/os_timestamp.erl: -------------------------------------------------------------------------------- 1 | -module(os_timestamp). 2 | 3 | -export([test/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{test, inf, dpor}]. 7 | 8 | test() -> 9 | os:timestamp(), 10 | receive after infinity -> ok end. 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/process_flag_link.erl: -------------------------------------------------------------------------------- 1 | -module(process_flag_link). 2 | 3 | -export([process_flag_link/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | process_flag_link() -> 9 | P = self(), 10 | process_flag(trap_exit, true), 11 | spawn(fun() -> P ! message end), 12 | spawn(fun() -> link(P) end), 13 | receive 14 | M1 -> 15 | receive 16 | _M2 -> 17 | message = M1 18 | end 19 | end. 20 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/processes.erl: -------------------------------------------------------------------------------- 1 | -module(processes). 2 | 3 | -export([test1/0, test2/0]). 4 | -export([scenarios/0]). 5 | 6 | -concuerror_options_forced([{symbolic_names, false}]). 7 | 8 | scenarios() -> [{T, inf, dpor} || T <- [test1, test2]]. 9 | 10 | test1() -> 11 | Fun = fun() -> ok end, 12 | spawn(Fun), 13 | spawn(Fun), 14 | processes(). 15 | 16 | test2() -> 17 | Fun = fun() -> ok end, 18 | FFun = fun() -> spawn(Fun) end, 19 | spawn(Fun), 20 | spawn(FFun), 21 | processes(), 22 | throw(foo). 23 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/processes_leader.erl: -------------------------------------------------------------------------------- 1 | -module(processes_leader). 2 | 3 | -export([test/0]). 4 | -export([scenarios/0]). 5 | 6 | %%------------------------------------------------------------------------------ 7 | 8 | scenarios() -> [{test, inf, optimal}]. 9 | 10 | %%------------------------------------------------------------------------------ 11 | 12 | test() -> 13 | group_leader(S = self(), self()), 14 | W = fun W(0) -> ok; 15 | W(N) -> spawn_monitor(fun () -> W(N - 1) end) 16 | end, 17 | W(2), 18 | [exit(P, kill) 19 | || P <- processes(), 20 | P =/= S, 21 | {group_leader, S} =:= process_info(P, group_leader) 22 | ]. 23 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/receive_after.erl: -------------------------------------------------------------------------------- 1 | -module(receive_after). 2 | 3 | -export([receive_after/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | receive_after() -> 9 | P = self(), 10 | P1 = 11 | spawn(fun() -> 12 | P ! ok, 13 | receive 14 | _Sth -> saved 15 | after 16 | 0 -> throw(boom) 17 | end 18 | end), 19 | P1 ! ok, 20 | receive 21 | ok -> ok 22 | end. 23 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/receive_and_after.erl: -------------------------------------------------------------------------------- 1 | -module(receive_and_after). 2 | 3 | -export([receive_and_after/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | receive_and_after() -> 9 | spawn(fun p1/0) ! enable. 10 | 11 | p1() -> 12 | receive 13 | enable -> throw(kaboom) 14 | after 15 | 10 -> 16 | throw(boom) 17 | end. 18 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/receive_with_guard.erl: -------------------------------------------------------------------------------- 1 | -module(receive_with_guard). 2 | 3 | -export([receive_with_guard/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | receive_with_guard() -> 9 | P1 = 10 | spawn(fun() -> 11 | receive 12 | W when is_atom(W) -> ok 13 | end 14 | end), 15 | P1 ! 10. 16 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/receive_without_trapping.erl: -------------------------------------------------------------------------------- 1 | -module(receive_without_trapping). 2 | 3 | -export([receive_without_trapping/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | receive_without_trapping() -> 9 | Parent = self(), 10 | C1 = spawn_link(fun() -> receive _ -> ok end end), 11 | C2 = spawn(fun() -> 12 | receive 13 | _ -> C1 ! ok 14 | end, 15 | Parent ! ok 16 | end), 17 | C2 ! ok, 18 | receive 19 | _ -> ok 20 | end. 21 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/register_link.erl: -------------------------------------------------------------------------------- 1 | -module(register_link). 2 | 3 | -export([test/0]). 4 | 5 | -export([scenarios/0]). 6 | 7 | %%------------------------------------------------------------------------------ 8 | 9 | scenarios() -> [{test, inf, optimal}]. 10 | 11 | %%------------------------------------------------------------------------------ 12 | 13 | test() -> 14 | P = spawn(fun() -> receive ok -> ok end end), 15 | {Reg, M1} = 16 | spawn_monitor( 17 | fun() -> 18 | register(foo, P) 19 | end), 20 | {Link, M2} = 21 | spawn_monitor( 22 | fun() -> 23 | link(P) 24 | end), 25 | receive 26 | _ -> ok 27 | end, 28 | receive 29 | _ -> ok 30 | end, 31 | P ! ok. 32 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/registered_1.erl: -------------------------------------------------------------------------------- 1 | -module(registered_1). 2 | 3 | -export([registered_1/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | registered_1() -> 9 | register(parent, self()), 10 | Pid = spawn(fun() -> receive 11 | go -> ok 12 | end, 13 | register(parent, self()) 14 | end), 15 | Pid ! go. 16 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/registered_2.erl: -------------------------------------------------------------------------------- 1 | -module(registered_2). 2 | 3 | -export([registered_2/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | registered_2() -> 9 | Pid = spawn(fun() -> 10 | register(parent, self()) 11 | end), 12 | register(parent, self()), 13 | register(child, Pid). 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/registered_send_1.erl: -------------------------------------------------------------------------------- 1 | -module(registered_send_1). 2 | 3 | -export([registered_send_1/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | registered_send_1() -> 9 | Parent = self(), 10 | spawn(fun() -> 11 | Parent ! ok, 12 | register(child, self()), 13 | receive 14 | ok -> ok 15 | end 16 | end), 17 | receive 18 | ok -> child ! ok 19 | end. 20 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/registered_send_2.erl: -------------------------------------------------------------------------------- 1 | -module(registered_send_2). 2 | 3 | -export([registered_send_2/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | registered_send_2() -> 9 | Pid = spawn(fun() -> ok end), 10 | register(child, Pid). 11 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/registered_send_3.erl: -------------------------------------------------------------------------------- 1 | -module(registered_send_3). 2 | 3 | -export([registered_send_3/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | registered_send_3() -> 9 | Pid = 10 | spawn(fun() -> 11 | receive 12 | ok -> ok 13 | end 14 | end), 15 | Pid ! ok, 16 | register(child, Pid), 17 | child ! foo. 18 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/report_blocks.erl: -------------------------------------------------------------------------------- 1 | -module(report_blocks). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | scenarios() -> 7 | [{test, inf, dpor}]. 8 | 9 | test() -> 10 | Parent = self(), 11 | spawn(fun() -> Parent ! ok end), 12 | receive 13 | ok -> ok 14 | end, 15 | receive 16 | after 17 | infinity -> deadlock 18 | end. 19 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/reuse_raw_pid.erl: -------------------------------------------------------------------------------- 1 | -module(reuse_raw_pid). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0]). 5 | 6 | -concuerror_options_forced([{symbolic_names, false}]). 7 | 8 | scenarios() -> 9 | [{test, inf, dpor}]. 10 | 11 | test() -> 12 | P = self(), 13 | spawn(fun() -> P ! ok end), 14 | Msg = 15 | receive 16 | ok -> received 17 | after 18 | 0 -> expired 19 | end, 20 | spawn(fun() -> P ! Msg end), 21 | receive 22 | M -> throw(M) 23 | end. 24 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/safeops_coverage.erl: -------------------------------------------------------------------------------- 1 | -module(safeops_coverage). 2 | 3 | -compile(export_all). 4 | 5 | scenarios() -> 6 | [ test 7 | ]. 8 | 9 | test() -> 10 | erlang:adler32("42"), 11 | [1, 2, 3, 4] = erlang:append([1, 2], [3, 4]), 12 | erlang:bump_reductions(10), 13 | erlang:crc32("42"), 14 | erlang:decode_packet(raw, <<"foo">>, []), 15 | {c} = erlang:delete_element(1, {b, c}), 16 | erlang:external_size(42), 17 | erlang:garbage_collect(), 18 | {b, c} = erlang:insert_element(1, {c}, b), 19 | true = erlang:is_builtin(erlang, is_builtin, 3), 20 | {a, a, a} = erlang:make_tuple(3, a), 21 | [1, 2] = erlang:subtract([1, 2, 3], [3]). 22 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/send_after_trouble.erl: -------------------------------------------------------------------------------- 1 | -module(send_after_trouble). 2 | 3 | -export([test/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{test, inf, dpor}]. 7 | 8 | test() -> 9 | P = self(), 10 | Q = spawn(fun() -> receive A -> A ! ok end end), 11 | S = spawn(fun() -> receive _ -> ok after 100 -> ok end end), 12 | Q ! S, 13 | S ! ok. 14 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/send_self.erl: -------------------------------------------------------------------------------- 1 | -module(send_self). 2 | 3 | -export([scenarios/0]). 4 | -export([test1/0, test2/0, test3/0]). 5 | 6 | scenarios() -> 7 | [{T, inf, dpor} || T <- [test1,test2,test3]]. 8 | 9 | test1() -> 10 | self() ! ok, 11 | receive 12 | ok -> ok 13 | after 14 | 0 -> error(self_messages_are_delivered_instantly) 15 | end. 16 | 17 | test2() -> 18 | P = self(), 19 | spawn(fun() -> P ! two end), 20 | P ! one, 21 | receive 22 | A -> throw(A) 23 | end. 24 | 25 | test3() -> 26 | P = self(), 27 | spawn(fun() -> P ! two end), 28 | P ! one, 29 | receive 30 | one -> throw(one) 31 | end. 32 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/send_using_names.erl: -------------------------------------------------------------------------------- 1 | -module(send_using_names). 2 | 3 | -export([send_using_names/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | send_using_names() -> 9 | Self = self(), 10 | Name = name, 11 | register(Name, Self), 12 | spawn(fun() -> Self ! msg1 end), 13 | spawn(fun() -> Name ! msg2 end), 14 | receive 15 | Msg1 -> 16 | receive 17 | Msg2 -> 18 | [Msg1, Msg2] = [msg1, msg2] 19 | end 20 | end. 21 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/signals_vs_messages.erl: -------------------------------------------------------------------------------- 1 | -module(signals_vs_messages). 2 | 3 | -export([scenarios/0]). 4 | -export([test/0, test1/0]). 5 | 6 | -concuerror_options_forced([{treat_as_normal, die}]). 7 | 8 | scenarios() -> 9 | [{T, inf, dpor} || T <- [test, test1]]. 10 | 11 | test() -> 12 | P = self(), 13 | register(p, P), 14 | spawn(fun() -> exit(P, die) end), 15 | spawn(fun() -> P ! ok end), 16 | spawn(fun() -> whereis(p) end), 17 | receive 18 | ok -> ok 19 | end. 20 | 21 | test1() -> 22 | P = self(), 23 | spawn_link(fun() -> ok end), 24 | spawn(fun() -> P ! ok end), 25 | receive 26 | ok -> ok 27 | end. 28 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/simple_spawn.erl: -------------------------------------------------------------------------------- 1 | -module(simple_spawn). 2 | 3 | -export([simple_spawn/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | simple_spawn() -> 9 | spawn(fun() -> ok end). 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/spawn_and_send.erl: -------------------------------------------------------------------------------- 1 | -module(spawn_and_send). 2 | 3 | -export([spawn_and_send/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | spawn_and_send() -> 9 | spawn(fun() -> ok end) ! ok. 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/spawn_bad.erl: -------------------------------------------------------------------------------- 1 | -module(spawn_bad). 2 | 3 | -export([scenarios/0, test/0]). 4 | 5 | scenarios() -> [{test, inf, dpor}]. 6 | 7 | test() -> spawn(2). 8 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/spawn_failure.erl: -------------------------------------------------------------------------------- 1 | -module(spawn_failure). 2 | 3 | -export([spawn_failure/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | spawn_failure() -> 9 | spawn(2). 10 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/spawn_monitor_test.erl: -------------------------------------------------------------------------------- 1 | -module(spawn_monitor_test). 2 | 3 | -export([scenarios/0]). 4 | 5 | scenarios() -> [{?MODULE, inf, dpor}]. 6 | 7 | -include_lib("eunit/include/eunit.hrl"). 8 | 9 | spawn_monitor_test() -> 10 | {Pid, Ref} = spawn_monitor(fun() -> ok end), 11 | demonitor(Ref), 12 | Result = 13 | receive 14 | {'DOWN', Ref, process, Pid, normal} -> result1 15 | after 0 -> result2 16 | end, 17 | ?assertEqual(result2, Result). 18 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/spawned_sender_crasher.erl: -------------------------------------------------------------------------------- 1 | -module(spawned_sender_crasher). 2 | 3 | -export([spawned_sender_crasher/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | spawned_sender_crasher() -> 9 | Receiver = spawn(fun receive_two/0), 10 | spawn(sender(Receiver, one)), 11 | spawn(sender(Receiver, two)). 12 | 13 | 14 | 15 | receive_two() -> 16 | receive 17 | Pat1 -> 18 | receive 19 | Pat2 -> 20 | [one, two] = [Pat1, Pat2], 21 | [two, one] = [Pat1, Pat2] 22 | end 23 | end. 24 | 25 | sender(Receiver, Msg) -> 26 | fun() -> Receiver ! Msg end. 27 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/spawned_senders.erl: -------------------------------------------------------------------------------- 1 | -module(spawned_senders). 2 | 3 | -export([spawned_senders/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | spawned_senders() -> 9 | Receiver = spawn(fun receive_two/0), 10 | spawn(sender(Receiver, one)), 11 | spawn(sender(Receiver, two)). 12 | 13 | 14 | 15 | receive_two() -> 16 | receive 17 | Pat1 -> 18 | receive 19 | Pat2 -> 20 | [Pat1, Pat2] 21 | end 22 | end. 23 | 24 | sender(Receiver, Msg) -> 25 | fun() -> Receiver ! Msg end. 26 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/stacktrace_vs_exit.erl: -------------------------------------------------------------------------------- 1 | -module(stacktrace_vs_exit). 2 | 3 | -export([test/0]). 4 | 5 | -export([scenarios/0]). 6 | 7 | -concuerror_options_forced([]). 8 | 9 | %%------------------------------------------------------------------------------ 10 | 11 | scenarios() -> [{test, inf, optimal}]. 12 | 13 | %%------------------------------------------------------------------------------ 14 | 15 | test() -> 16 | spawn(fun() -> erlang:get_stacktrace() end). 17 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/system_info.erl: -------------------------------------------------------------------------------- 1 | -module(system_info). 2 | 3 | -export([test/0]). 4 | 5 | -export([scenarios/0]). 6 | 7 | %%------------------------------------------------------------------------------ 8 | 9 | scenarios() -> [{test, inf, optimal}]. 10 | 11 | %%------------------------------------------------------------------------------ 12 | 13 | %% This is a dummy test function. 14 | test() -> 15 | {registered_name, user} = erlang:process_info(whereis(user), registered_name). 16 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/trigger_the_after.erl: -------------------------------------------------------------------------------- 1 | -module(trigger_the_after). 2 | 3 | -export([trigger_the_after/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | trigger_the_after() -> 9 | Receiver = spawn(fun receive_two/0), 10 | spawn(sender(Receiver, two)), 11 | spawn(sender(Receiver, one)), 12 | error(error). 13 | 14 | receive_two() -> 15 | receive 16 | one -> 17 | receive 18 | two -> throw(both) 19 | after 20 | 100 -> throw(one) 21 | end 22 | end. 23 | 24 | sender(Receiver, Msg) -> 25 | fun() -> Receiver ! Msg end. 26 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/unregister_deadlocked.erl: -------------------------------------------------------------------------------- 1 | -module(unregister_deadlocked). 2 | 3 | -export([scenarios/0]). 4 | -export([test1/0]). 5 | 6 | scenarios() -> 7 | [{test1,inf,dpor}]. 8 | 9 | test1() -> 10 | whereis(one), 11 | spawn(fun() -> 12 | register(one, self()), 13 | receive after infinity -> ok end 14 | end), 15 | one ! boo. 16 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/unsupported_exit.erl: -------------------------------------------------------------------------------- 1 | -module(unsupported_exit). 2 | 3 | -export([scenarios/0]). 4 | -export([exceptional/0]). 5 | 6 | -export([test/0]). 7 | 8 | scenarios() -> 9 | [{test, inf, dpor, crash}]. 10 | 11 | test() -> 12 | try 13 | erlang:monitor_node(node(), false) 14 | catch 15 | _:_ -> ok 16 | end. 17 | 18 | exceptional() -> 19 | fun(_Expected, Actual) -> 20 | String = 21 | "Concuerror does not support calls to built-in erlang:monitor_node/2", 22 | Cmd = "grep \"" ++ String ++ "\" ", 23 | [_,_,_|_] = os:cmd(Cmd ++ Actual), 24 | true 25 | end. 26 | -------------------------------------------------------------------------------- /tests/suites/basic_tests/src/waiting.erl: -------------------------------------------------------------------------------- 1 | -module(waiting). 2 | 3 | -export([waiting/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | waiting() -> 9 | timer:sleep(25000). 10 | -------------------------------------------------------------------------------- /tests/suites/bounding_tests/src/manolis/test.erl: -------------------------------------------------------------------------------- 1 | -module(test). 2 | 3 | -export([scenarios/0]). 4 | -export([test_2workers/0, test_2workers_small/0]). 5 | 6 | scenarios() -> 7 | [{test_2workers_small, 1, source, bpor}]. 8 | 9 | test_2workers() -> 10 | rush_hour:test_2workers(). 11 | 12 | test_2workers_small() -> 13 | rush_hour:test_2workers_small(). 14 | -------------------------------------------------------------------------------- /tests/suites/bounding_tests/src/readers.erl: -------------------------------------------------------------------------------- 1 | -module(readers). 2 | -export([scenarios/0,test/0]). 3 | 4 | scenarios() -> [{test, B, dpor} || B <- [0, 1, 2, 3, 4, 5, 6, 7]]. 5 | 6 | test() -> readers(6). 7 | 8 | readers(N) -> 9 | ets:new(tab, [public, named_table]), 10 | Writer = fun() -> ets:insert(tab, {x, 42}) end, 11 | Reader = fun(I) -> ets:lookup(tab, I), ets:lookup(tab, x) end, 12 | spawn(Writer), 13 | [spawn(fun() -> Reader(I) end) || I <- lists:seq(1, N)], 14 | receive after infinity -> deadlock end. 15 | -------------------------------------------------------------------------------- /tests/suites/bounding_tests/src/readers_2.erl: -------------------------------------------------------------------------------- 1 | -module(readers_2). 2 | -export([scenarios/0,test/0]). 3 | 4 | scenarios() -> [{test, B, dpor} || B <- [0, 1, 2, 3, 4, 5, 6, 7]]. 5 | 6 | test() -> readers(6). 7 | 8 | readers(N) -> 9 | ets:new(tab, [public, named_table]), 10 | Writer = fun() -> ets:insert(tab, {x, 42}) end, 11 | Reader = fun(I) -> ets:lookup(tab, x) end, 12 | [spawn(fun() -> Reader(I) end) || I <- lists:seq(1, N)], 13 | spawn(Writer), 14 | receive after infinity -> deadlock end. 15 | -------------------------------------------------------------------------------- /tests/suites/bounding_tests/src/readers_compare.erl: -------------------------------------------------------------------------------- 1 | -module(readers_compare). 2 | -export([scenarios/0,test/0]). 3 | 4 | scenarios() -> 5 | [{test, B, DPOR, BoundType} || 6 | B <- [0, 1, 2, 6], 7 | DPOR <- [optimal, source, persistent], 8 | BoundType <- [bpor, delay], 9 | DPOR =/= optimal orelse BoundType =/= bpor 10 | ]. 11 | 12 | test() -> readers(3). 13 | 14 | readers(N) -> 15 | ets:new(tab, [public, named_table]), 16 | Writer = fun() -> ets:insert(tab, {x, 42}) end, 17 | Reader = fun(I) -> ets:lookup(tab, I), ets:lookup(tab, x) end, 18 | spawn(Writer), 19 | [spawn(fun() -> Reader(I) end) || I <- lists:seq(1, N)], 20 | receive after infinity -> deadlock end. 21 | -------------------------------------------------------------------------------- /tests/suites/bounding_tests/src/readers_delay.erl: -------------------------------------------------------------------------------- 1 | -module(readers_delay). 2 | -export([scenarios/0,test/0]). 3 | 4 | scenarios() -> [{test, B, none, delay} || B <- [0, 1, 2, 3, 4, 5, 6]]. 5 | 6 | test() -> readers(6). 7 | 8 | readers(N) -> 9 | ets:new(tab, [public, named_table]), 10 | Writer = fun() -> ets:insert(tab, {x, 42}) end, 11 | Reader = fun(I) -> ets:lookup(tab, I), ets:lookup(tab, x) end, 12 | spawn(Writer), 13 | [spawn(fun() -> Reader(I) end) || I <- lists:seq(1, N)], 14 | receive after infinity -> deadlock end. 15 | -------------------------------------------------------------------------------- /tests/suites/bounding_tests/src/readers_no_preempt.erl: -------------------------------------------------------------------------------- 1 | -module(readers_no_preempt). 2 | -export([scenarios/0,test/0]). 3 | 4 | scenarios() -> 5 | [{test, B, DPOR, BoundType} || 6 | B <- [0, 1, 2], 7 | DPOR <- [optimal, source, persistent], 8 | BoundType <- [bpor, delay], 9 | DPOR =/= optimal orelse BoundType =/= bpor 10 | ]. 11 | 12 | test() -> readers(3). 13 | 14 | readers(N) -> 15 | ets:new(tab, [public, named_table]), 16 | Writer = fun() -> ets:insert(tab, {x, 42}) end, 17 | Reader = fun() -> ets:lookup(tab, x) end, 18 | spawn(Writer), 19 | [spawn(fun() -> Reader() end) || _ <- lists:seq(1, N)], 20 | receive after infinity -> deadlock end. 21 | -------------------------------------------------------------------------------- /tests/suites/bounding_tests/src/simple_delay.erl: -------------------------------------------------------------------------------- 1 | -module(simple_delay). 2 | 3 | -export([scenarios/0]). 4 | 5 | -export([test/0]). 6 | 7 | -define(TABLE, table). 8 | 9 | scenarios() -> [{test, B, dpor} || B <- [0, 1, 2]]. 10 | 11 | test() -> 12 | ?TABLE = ets:new(?TABLE, [public, named_table]), 13 | write(x,0), 14 | Fun = fun(N) -> spawn(fun() -> work(N) end) end, 15 | lists:foreach(Fun, lists:seq(1, 10)), 16 | receive after infinity -> ok end. 17 | 18 | work(N) -> 19 | write(x, 1), 20 | write(x, 2). 21 | 22 | write(Key, Value) -> 23 | ets:insert(?TABLE, {Key, Value}). 24 | 25 | read(Key) -> 26 | [{Key, V}] = ets:lookup(?TABLE, Key), 27 | V. 28 | -------------------------------------------------------------------------------- /tests/suites/bounding_tests/src/writers.erl: -------------------------------------------------------------------------------- 1 | -module(writers). 2 | -export([scenarios/0,test/0]). 3 | 4 | scenarios() -> [{test, B, dpor} || B <- [0, 1, 2, 3, 4, 5, 6, 7]]. 5 | 6 | test() -> writers(6). 7 | 8 | writers(N) -> 9 | ets:new(tab, [public, named_table]), 10 | Writer = fun(I) -> ets:insert(tab, {x, I}) end, 11 | [spawn(fun() -> Writer(I) end) || I <- lists:seq(1, N)], 12 | receive after infinity -> deadlock end. 13 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/results/proxy-proxy-inf-dpor.txt: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | Concuerror started with options: 3 | [{'after-timeout',infinite}, 4 | {assume_racing,false}, 5 | {files,["/home/stavros/git/Concuerror/tests/suites/dpor_tests/src/proxy.erl"]}, 6 | {normal_exit,[normal]}, 7 | {symbolic,true}, 8 | {target,{proxy,proxy,[]}}, 9 | {verbose,0}, 10 | {wait,2000}] 11 | ################################################################################ 12 | No errors found! 13 | ################################################################################ 14 | Done! (Exit status: completed) 15 | Summary: 0 errors, 2/2 interleavings explored 16 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/results/proxy2-proxy2-inf-dpor.txt: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | Concuerror started with options: 3 | [{'after-timeout',infinite}, 4 | {assume_racing,false}, 5 | {files,["/home/stavros/git/Concuerror/tests/suites/dpor_tests/src/proxy2.erl"]}, 6 | {normal_exit,[normal]}, 7 | {symbolic,true}, 8 | {target,{proxy2,proxy2,[]}}, 9 | {verbose,0}, 10 | {wait,2000}] 11 | ################################################################################ 12 | No errors found! 13 | ################################################################################ 14 | Done! (Exit status: completed) 15 | Summary: 0 errors, 2/2 interleavings explored 16 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/results/stress-stress-inf-dpor.txt: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | Concuerror started with options: 3 | [{'after-timeout',infinite}, 4 | {assume_racing,false}, 5 | {files,["/home/stavros/git/Concuerror/tests/suites/dpor_tests/src/stress.erl"]}, 6 | {normal_exit,[normal]}, 7 | {symbolic,true}, 8 | {target,{stress,stress,[]}}, 9 | {verbose,0}, 10 | {wait,2000}] 11 | ################################################################################ 12 | No errors found! 13 | ################################################################################ 14 | Done! (Exit status: completed) 15 | Summary: 0 errors, 12/12 interleavings explored 16 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/diff_obs.erl: -------------------------------------------------------------------------------- 1 | -module(diff_obs). 2 | 3 | -export([test/0, scenarios/0]). 4 | 5 | scenarios() -> 6 | [{test, inf, optimal}]. 7 | 8 | p() -> 9 | main ! {x, 0}. 10 | 11 | q() -> 12 | main ! {y, 0}. 13 | 14 | r() -> 15 | main ! {x, 1}. 16 | 17 | s() -> 18 | main ! o. 19 | 20 | test() -> 21 | register(main, self()), 22 | [spawn(F) || F <- [fun p/0, fun q/0, fun r/0, fun s/0]], 23 | receive 24 | o -> receive {x, _} -> ok end 25 | after 26 | 0 -> receive {_, _} -> ok end 27 | end, 28 | receive after infinity -> ok end. 29 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/ets_cross.erl: -------------------------------------------------------------------------------- 1 | -module(ets_cross). 2 | 3 | -export([test/0,scenarios/0]). 4 | 5 | scenarios() -> [{test, inf, dpor}]. 6 | 7 | test() -> 8 | ets:new(table, [public, named_table]), 9 | spawn(fun() -> 10 | ets:insert(table, {x, 1}), 11 | ets:insert(table, {y, 1}) 12 | end), 13 | spawn(fun() -> 14 | ets:insert(table, {y, 2}), 15 | ets:insert(table, {x, 2}) 16 | end), 17 | receive 18 | after 19 | infinity -> ok 20 | end. 21 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/ets_dependencies.erl: -------------------------------------------------------------------------------- 1 | -module(ets_dependencies). 2 | 3 | -export([ets_dependencies/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | ets_dependencies() -> 9 | ets:new(table, [public, named_table]), 10 | spawn(fun() -> 11 | ets:insert(table, {x, 1}) 12 | end), 13 | spawn(fun() -> 14 | ets:insert(table, {y, 2}), 15 | ets:lookup(table, x) 16 | end), 17 | spawn(fun() -> 18 | ets:insert(table, {z, 3}), 19 | ets:lookup(table, x) 20 | end), 21 | receive 22 | after 23 | infinity -> ok 24 | end. 25 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/hairbrush_teeth_1.erl: -------------------------------------------------------------------------------- 1 | -module(hairbrush_teeth_1). 2 | 3 | -export([hairbrush_teeth_1/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | hairbrush_teeth_1() -> 9 | ets:new(table, [public, named_table]), 10 | ets:insert(table, {x, 0}), 11 | spawn(fun() -> 12 | ets:insert(table, {x, 1}), 13 | ets:insert(table, {x, 2}) 14 | end), 15 | spawn(fun() -> 16 | ets:lookup(table, x), 17 | ets:lookup(table, x) 18 | end), 19 | receive 20 | after 21 | infinity -> ok 22 | end. 23 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/hairbrush_teeth_2.erl: -------------------------------------------------------------------------------- 1 | -module(hairbrush_teeth_2). 2 | 3 | -export([hairbrush_teeth_2/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | hairbrush_teeth_2() -> 9 | ets:new(table, [public, named_table]), 10 | ets:insert(table, {x, 0}), 11 | spawn(fun() -> 12 | ets:insert(table, {x, 1}), 13 | ets:insert(table, {x, 2}), 14 | ets:insert(table, {x, 3}) 15 | end), 16 | spawn(fun() -> 17 | ets:lookup(table, x), 18 | ets:lookup(table, x), 19 | ets:lookup(table, x) 20 | end), 21 | receive 22 | after 23 | infinity -> ok 24 | end. 25 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/independent_receivers.erl: -------------------------------------------------------------------------------- 1 | -module(independent_receivers). 2 | 3 | -export([independent_receivers/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | independent_receivers() -> 9 | Parent = self(), 10 | Rec1 = spawn(fun() -> receiver(Parent, 1) end), 11 | Rec2 = spawn(fun() -> receiver(Parent, 2) end), 12 | _Snd1 = spawn(fun() -> sender(Rec1) end), 13 | _Snd2 = spawn(fun() -> sender(Rec2) end), 14 | receive 15 | _Msg1 -> 16 | receive 17 | _Msg2 -> done 18 | end 19 | end. 20 | 21 | sender(Pid) -> 22 | Pid ! ok. 23 | 24 | receiver(Parent, N) -> 25 | receive 26 | ok -> Parent ! N 27 | end. 28 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/indifferent_senders.erl: -------------------------------------------------------------------------------- 1 | -module(indifferent_senders). 2 | 3 | -export([indifferent_senders/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | indifferent_senders() -> 9 | Parent = self(), 10 | Messages = [msg1, msg2, msg3], 11 | [spawn(fun() -> Parent ! Msg end) || Msg <- Messages], 12 | receive_in_order(Messages), 13 | ok. 14 | 15 | receive_in_order([]) -> ok; 16 | receive_in_order([Msg|Rest]) -> 17 | receive 18 | Msg -> receive_in_order(Rest) 19 | end. 20 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/no_observers.erl: -------------------------------------------------------------------------------- 1 | -module(no_observers). 2 | 3 | -compile(export_all). 4 | 5 | -concuerror_options_forced([{use_receive_patterns, false}]). 6 | 7 | scenarios() -> 8 | [ test 9 | ]. 10 | 11 | test() -> 12 | P = self(), 13 | Fun = fun() -> P ! self() end, 14 | P1 = spawn(Fun), 15 | P2 = spawn(Fun), 16 | receive 17 | P1 -> 18 | receive 19 | P2 -> 20 | ok 21 | end 22 | end. 23 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/process_info.erl: -------------------------------------------------------------------------------- 1 | -module(process_info). 2 | 3 | -compile(export_all). 4 | 5 | scenarios() -> 6 | [ links 7 | ]. 8 | 9 | links() -> 10 | P = self(), 11 | Fun = fun() -> whereis(name), link(P) end, 12 | Fun2 = fun() -> P ! foo, link(P) end, 13 | P1 = spawn(Fun), 14 | P2 = spawn(Fun2), 15 | receive foo -> ok end, 16 | process_info(self(), links), 17 | register(name, self()), 18 | receive after infinity -> ok end. 19 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/proxy2.erl: -------------------------------------------------------------------------------- 1 | -module(proxy2). 2 | 3 | -export([proxy2/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | proxy2() -> 9 | C = self(), 10 | B = proxy(100, C), 11 | _A = spawn(fun() -> 12 | B ! world, 13 | C ! hello 14 | end), 15 | receive Msg1 -> ok end, 16 | receive Msg2 -> ok end, 17 | {Msg1, Msg2}. 18 | 19 | proxy(0, Pid) -> 20 | Pid; 21 | proxy(N, Pid) -> 22 | Proxy = proxy(N-1, Pid), 23 | proxy(Proxy). 24 | 25 | proxy(Pid) -> 26 | spawn(fun() -> 27 | receive Msg -> Pid ! Msg end 28 | end). 29 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/readers.erl: -------------------------------------------------------------------------------- 1 | -module(readers). 2 | -export([scenarios/0,test/0]). 3 | 4 | scenarios() -> [{test, inf, DPOR} || DPOR <- [optimal, persistent, source]]. 5 | 6 | test() -> readers(6). 7 | 8 | readers(N) -> 9 | ets:new(tab, [public, named_table]), 10 | Writer = fun() -> ets:insert(tab, {x, 42}) end, 11 | Reader = fun(I) -> ets:lookup(tab, I), ets:lookup(tab, x) end, 12 | spawn(Writer), 13 | [spawn(fun() -> Reader(I) end) || I <- lists:seq(1, N)], 14 | receive after infinity -> deadlock end. 15 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/readers_basic.erl: -------------------------------------------------------------------------------- 1 | -module(readers_basic). 2 | 3 | -export([readers_basic/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | readers_basic() -> 9 | ets:new(table, [public, named_table]), 10 | ets:insert(table, {x, 0}), 11 | ets:insert(table, {y, 0}), 12 | Writer = 13 | fun() -> 14 | ets:insert(table, {x, 1}) 15 | end, 16 | Reader = 17 | fun() -> 18 | ets:lookup(table, x) 19 | end, 20 | spawn(Writer), 21 | spawn(Reader), 22 | spawn(Reader), 23 | receive 24 | after 25 | infinity -> ok 26 | end. 27 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/readers_rrw.erl: -------------------------------------------------------------------------------- 1 | -module(readers_rrw). 2 | 3 | -export([readers_rrw/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | readers_rrw() -> 9 | ets:new(table, [public, named_table]), 10 | ets:insert(table, {x, 0}), 11 | ets:insert(table, {y, 0}), 12 | Writer = 13 | fun() -> 14 | ets:lookup(table, y), 15 | ets:insert(table, {x, 1}) 16 | end, 17 | Reader = 18 | fun() -> 19 | ets:lookup(table, y), 20 | ets:lookup(table, x) 21 | end, 22 | spawn(Reader), 23 | spawn(Reader), 24 | spawn(Writer), 25 | receive 26 | after 27 | infinity -> ok 28 | end. 29 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/readers_rwr.erl: -------------------------------------------------------------------------------- 1 | -module(readers_rwr). 2 | 3 | -export([readers_rwr/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | readers_rwr() -> 9 | ets:new(table, [public, named_table]), 10 | ets:insert(table, {x, 0}), 11 | ets:insert(table, {y, 0}), 12 | Writer = 13 | fun() -> 14 | ets:lookup(table, y), 15 | ets:insert(table, {x, 1}) 16 | end, 17 | Reader = 18 | fun() -> 19 | ets:lookup(table, y), 20 | ets:lookup(table, x) 21 | end, 22 | spawn(Reader), 23 | spawn(Writer), 24 | spawn(Reader), 25 | receive 26 | after 27 | infinity -> ok 28 | end. 29 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/readers_wrr.erl: -------------------------------------------------------------------------------- 1 | -module(readers_wrr). 2 | 3 | -export([readers_wrr/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | readers_wrr() -> 9 | ets:new(table, [public, named_table]), 10 | ets:insert(table, {x, 0}), 11 | ets:insert(table, {y, 0}), 12 | Writer = 13 | fun() -> 14 | ets:lookup(table, y), 15 | ets:insert(table, {x, 1}) 16 | end, 17 | Reader = 18 | fun() -> 19 | ets:lookup(table, y), 20 | ets:lookup(table, x) 21 | end, 22 | spawn(Writer), 23 | spawn(Reader), 24 | spawn(Reader), 25 | receive 26 | after 27 | infinity -> ok 28 | end. 29 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/receive_order.erl: -------------------------------------------------------------------------------- 1 | -module(receive_order). 2 | 3 | -export([scenarios/0]). 4 | -export([test1/0,test2/0,test3/0]). 5 | 6 | scenarios() -> 7 | [{T, inf, dpor} || T <- [test1,test2, test3]]. 8 | 9 | test1() -> test(a, b). 10 | 11 | test2() -> test(b, a). 12 | 13 | test(F, S) -> 14 | P = spawn(fun() -> receive a -> receive B -> B = b end end end), 15 | spawn(fun() -> P ! F end), 16 | spawn(fun() -> P ! S end). 17 | 18 | test3() -> 19 | P = spawn(fun() -> receive a -> receive b -> receive C -> C = c end end end end), 20 | spawn(fun() -> P ! b end), 21 | spawn(fun() -> P ! c, P ! a end). 22 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/same_messages.erl: -------------------------------------------------------------------------------- 1 | -module(same_messages). 2 | 3 | -export([same_messages/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | same_messages() -> 9 | Parent = self(), 10 | spawn(fun() -> Parent ! one end), 11 | spawn(fun() -> Parent ! one end), 12 | receive 13 | One -> 14 | receive 15 | Two -> 16 | [one, one] = [One, Two] 17 | end 18 | end. 19 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/same_messages_2.erl: -------------------------------------------------------------------------------- 1 | -module(same_messages_2). 2 | 3 | -export([same_messages_2/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | same_messages_2() -> 9 | P = self(), 10 | Fun = 11 | fun(A) -> 12 | fun() -> 13 | P ! unlock, 14 | P ! A 15 | end 16 | end, 17 | spawn(Fun(a)), 18 | spawn(Fun(b)), 19 | receive 20 | unlock -> 21 | receive 22 | Msg when Msg =:= a; 23 | Msg =:= b -> throw(Msg) 24 | end 25 | end. 26 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/same_messages_3.erl: -------------------------------------------------------------------------------- 1 | -module(same_messages_3). 2 | 3 | -export([same_messages_3/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | same_messages_3() -> 9 | P = self(), 10 | Fun = 11 | fun(X) -> 12 | fun() -> 13 | P ! X, 14 | P ! unlock 15 | end 16 | end, 17 | spawn(Fun(a)), 18 | spawn(Fun(b)), 19 | receive 20 | unlock -> 21 | receive 22 | X when X =/= unlock -> exit(X) 23 | end 24 | end. 25 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/send_it_ets.erl: -------------------------------------------------------------------------------- 1 | -module(send_it_ets). 2 | 3 | -export([send_it_ets/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | send_it_ets() -> 9 | Parent = self(), 10 | ets:new(table, [named_table, public]), 11 | spawn(fun() -> 12 | ets:insert(table, {x,1}), 13 | Parent ! ok 14 | end), 15 | spawn(fun() -> 16 | Parent ! ok 17 | end), 18 | receive 19 | ok -> 20 | case ets:lookup(table, x) of 21 | [] -> throw(boom); 22 | _ -> safe 23 | end 24 | end. 25 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/timer_replayed.erl: -------------------------------------------------------------------------------- 1 | -module(timer_replayed). 2 | 3 | -export([test/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{test, inf, dpor}]. 7 | 8 | test() -> 9 | ets:new(table, [named_table, public]), 10 | spawn(fun() -> ets:insert(table, {x,1}) end), 11 | spawn(fun() -> ets:lookup(table, x) end), 12 | P = self(), 13 | spawn(fun() -> erlang:send_after(100, P, ok) end), 14 | receive ok -> ok after 100 -> ok end, 15 | receive after infinity -> ok end. 16 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/two_writers_readers_1.erl: -------------------------------------------------------------------------------- 1 | -module(two_writers_readers_1). 2 | 3 | -export([two_writers_readers_1/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | two_writers_readers_1() -> 9 | ets:new(table, [public, named_table]), 10 | ets:insert(table, {x, 0}), 11 | ets:insert(table, {y, 0}), 12 | spawn(fun() -> 13 | ets:insert(table, {x, 1}), 14 | ets:insert(table, {x, 2}) 15 | end), 16 | Fun = 17 | fun() -> 18 | ets:lookup(table, y), 19 | ets:lookup(table, x) 20 | end, 21 | spawn(Fun), 22 | spawn(Fun), 23 | receive 24 | after 25 | infinity -> ok 26 | end. 27 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/wakeup_many.erl: -------------------------------------------------------------------------------- 1 | -module(wakeup_many). 2 | 3 | -export([wakeup_many/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | wakeup_many() -> 9 | ets:new(table, [named_table, public]), 10 | spawn(fun() -> ets:insert(table, {x, 1}) end), 11 | spawn(fun() -> ets:insert(table, {x, 0}) end), 12 | ets:insert(table, {x,1}), 13 | receive after infinity -> deadlock end. 14 | -------------------------------------------------------------------------------- /tests/suites/dpor_tests/src/writeread.erl: -------------------------------------------------------------------------------- 1 | -module(writeread). 2 | 3 | -export([writeread/0]). 4 | -export([scenarios/0]). 5 | 6 | scenarios() -> [{?MODULE, inf, dpor}]. 7 | 8 | writeread() -> 9 | ets:new(table, [named_table, public]), 10 | spawn(fun() -> 11 | ets:insert(table, {x, 1})%, 12 | %ets:lookup(table, x) 13 | end), 14 | spawn(fun() -> 15 | ets:insert(table, {x, 1}), 16 | ets:lookup(table, x) 17 | end), 18 | ets:insert(table, {x,0}), 19 | ets:lookup(table, x), 20 | receive after infinity -> deadlock end. 21 | -------------------------------------------------------------------------------- /tests/suites/erlang_tests/src/erlang_maps.erl: -------------------------------------------------------------------------------- 1 | -module(erlang_maps). 2 | 3 | -compile(export_all). 4 | 5 | scenarios() -> 6 | [ maps_fold ]. 7 | 8 | maps_fold() -> 9 | maps:fold(fun(_,_,Acc) -> Acc end, ok, #{}). 10 | -------------------------------------------------------------------------------- /tests/suites/erlang_tests/src/erlang_timer.erl: -------------------------------------------------------------------------------- 1 | -module(erlang_timer). 2 | 3 | -compile(export_all). 4 | 5 | scenarios() -> 6 | [ cancel_badarg 7 | , read_badarg 8 | , cancel_bad 9 | , read_bad 10 | ]. 11 | 12 | cancel_badarg() -> 13 | try 14 | erlang:cancel_timer(1), 15 | exit(bad) 16 | catch 17 | error:badarg -> ok 18 | end. 19 | 20 | read_badarg() -> 21 | try 22 | erlang:cancel_timer(1), 23 | exit(bad) 24 | catch 25 | error:badarg -> ok 26 | end. 27 | 28 | cancel_bad() -> 29 | true = false =:= erlang:cancel_timer(make_ref()). 30 | 31 | read_bad() -> 32 | true = false =:= erlang:cancel_timer(make_ref()). 33 | --------------------------------------------------------------------------------