Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Prepare for submit version

  • Loading branch information...
commit 98c22f03b37cd7aa78b87a42c47acd39b1f748ce 1 parent ea9b172
@aronisstav aronisstav authored iliastsi committed
Showing with 220 additions and 5 deletions.
  1. +210 −0 DPOR_README
  2. +3 −0  src/concuerror.erl
  3. +5 −5 testsuite/runtests.py
  4. 0  testsuite/suites/regress/{dpor_fake → dpor}/ets_new-test-inf.txt
  5. 0  testsuite/suites/regress/{dpor_fake → dpor}/exit-test1-inf.txt
  6. 0  testsuite/suites/regress/{dpor_fake → dpor}/lid_test-test-0.txt
  7. 0  testsuite/suites/regress/{dpor_fake → dpor}/receive_catchall-test1-inf.txt
  8. 0  testsuite/suites/regress/{dpor_fake → dpor}/receive_catchall-test2-inf.txt
  9. 0  testsuite/suites/regress/{dpor_fake → dpor}/receive_catchall-test3-inf.txt
  10. +2 −0  testsuite/suites/regress/src/exit.erl
  11. 0  testsuite/suites/resources/{dpor_fake → dpor}/manolis-test_2workers-0.txt
  12. 0  testsuite/suites/resources/{dpor_fake → dpor}/percept-test-0.txt
  13. 0  testsuite/suites/resources/{dpor_fake → dpor}/percept-test-1.txt
  14. 0  testsuite/suites/resources/{dpor_fake → dpor}/percept-test-2.txt
  15. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_3_proc_receive_exit-0.txt
  16. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_3_proc_receive_exit-1.txt
  17. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_3_proc_receive_exit-2.txt
  18. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_3_proc_receive_exit-inf.txt
  19. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_3_proc_send_receive-0.txt
  20. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_3_proc_send_receive-1.txt
  21. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_3_proc_send_receive-2.txt
  22. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_3_proc_send_receive-3.txt
  23. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_3_proc_send_receive-4.txt
  24. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_3_proc_send_receive-5.txt
  25. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_3_proc_send_receive-6.txt
  26. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_3_proc_send_receive-7.txt
  27. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_3_proc_send_receive-inf.txt
  28. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_after_clause_preemption-0.txt
  29. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_after_clause_preemption-1.txt
  30. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_after_clause_preemption-2.txt
  31. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_after_clause_preemption-3.txt
  32. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_after_clause_preemption-inf.txt
  33. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_halt_0-0.txt
  34. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_halt_0-inf.txt
  35. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_halt_1-0.txt
  36. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_halt_1-inf.txt
  37. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_link_receive_exit-0.txt
  38. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_link_receive_exit-1.txt
  39. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_link_receive_exit-inf.txt
  40. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_link_unlink-0.txt
  41. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_link_unlink-1.txt
  42. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_link_unlink-2.txt
  43. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_link_unlink-3.txt
  44. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_link_unlink-inf.txt
  45. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_monitor_unexisting-0.txt
  46. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_monitor_unexisting-1.txt
  47. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_monitor_unexisting-inf.txt
  48. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_nested_send_receive_block_twice-0.txt
  49. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_nested_send_receive_block_twice-1.txt
  50. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_nested_send_receive_block_twice-2.txt
  51. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive-0.txt
  52. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive-inf.txt
  53. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_2-0.txt
  54. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_2-inf.txt
  55. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_block_expr_action-0.txt
  56. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_block_expr_action-inf.txt
  57. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_infinity_no_patterns-0.txt
  58. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_infinity_no_patterns-inf.txt
  59. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_infinity_with_pattern-0.txt
  60. 0  ...suite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_infinity_with_pattern-inf.txt
  61. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_no_patterns-0.txt
  62. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_no_patterns-1.txt
  63. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_no_patterns-2.txt
  64. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_no_patterns-inf.txt
  65. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_with_pattern-0.txt
  66. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_with_pattern-1.txt
  67. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_with_pattern-2.txt
  68. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_with_pattern-3.txt
  69. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_receive_after_with_pattern-inf.txt
  70. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_register_unregister-0.txt
  71. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_register_unregister-1.txt
  72. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_register_unregister-2.txt
  73. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_register_unregister-3.txt
  74. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_register_unregister-inf.txt
  75. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send-0.txt
  76. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send-1.txt
  77. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send-inf.txt
  78. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_2-0.txt
  79. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_2-1.txt
  80. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_2-inf.txt
  81. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_receive-0.txt
  82. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_receive-1.txt
  83. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_receive-2.txt
  84. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_receive-inf.txt
  85. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_receive_2-0.txt
  86. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_receive_2-1.txt
  87. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_receive_2-2.txt
  88. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_receive_2-inf.txt
  89. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_receive_3-0.txt
  90. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_receive_3-1.txt
  91. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_receive_3-2.txt
  92. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_send_receive_3-inf.txt
  93. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn-0.txt
  94. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn-1.txt
  95. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn-inf.txt
  96. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_race-0.txt
  97. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_race-1.txt
  98. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_race-inf.txt
  99. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_receive_exit-0.txt
  100. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_receive_exit-1.txt
  101. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_receive_exit-inf.txt
  102. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_unlink-0.txt
  103. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_unlink-1.txt
  104. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_unlink-2.txt
  105. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_unlink-inf.txt
  106. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_unlink_2-0.txt
  107. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_unlink_2-1.txt
  108. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_unlink_2-inf.txt
  109. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_unlink_3-0.txt
  110. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_unlink_3-1.txt
  111. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_link_unlink_3-inf.txt
  112. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor-0.txt
  113. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor-inf.txt
  114. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor_demonitor-0.txt
  115. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor_demonitor-1.txt
  116. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor_demonitor-inf.txt
  117. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor_demonitor_2-0.txt
  118. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor_demonitor_2-1.txt
  119. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor_demonitor_2-inf.txt
  120. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor_demonitor_3-0.txt
  121. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor_demonitor_3-1.txt
  122. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor_demonitor_3-inf.txt
  123. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor_demonitor_4-0.txt
  124. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor_demonitor_4-1.txt
  125. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_monitor_demonitor_4-inf.txt
  126. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_opt_link_receive_exit-0.txt
  127. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_opt_link_receive_exit-1.txt
  128. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_opt_link_receive_exit-inf.txt
  129. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_opt_monitor-0.txt
  130. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_opt_monitor-inf.txt
  131. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_register_race-0.txt
  132. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_register_race-1.txt
  133. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_register_race-2.txt
  134. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_spawn_register_race-inf.txt
  135. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_trap_exit_timing-0.txt
  136. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_trap_exit_timing-1.txt
  137. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_trap_exit_timing-inf.txt
  138. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_var_mod_fun-0.txt
  139. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_var_mod_fun-1.txt
  140. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_var_mod_fun-inf.txt
  141. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_whereis-0.txt
  142. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_whereis-1.txt
  143. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_whereis-2.txt
  144. 0  testsuite/suites/resources/{dpor_fake → dpor}/sched_tests-test_whereis-inf.txt
  145. 0  testsuite/suites/resources/{dpor_fake → dpor}/shootout-test1-0.txt
  146. 0  testsuite/suites/resources/{dpor_fake → dpor}/shootout-test1-inf.txt
View
210 DPOR_README
@@ -0,0 +1,210 @@
+Optimal Dynamic Partial Order Reduction for Analysis of Concurrent Programs
+---------------------------------------------------------------------------
+
+Contents:
+---------
+
+1. Introduction
+2. Prerequisites
+3. Quick intro
+4. Tests
+5. Interesting details in the code
+
+1. Introduction
+---------------
+
+The purpose of this readme file is to offer a brief guide around an
+experimental version of the Concuerror tool, which was developed to include an
+algorithm for optimal partial order reduction of the state space generated by
+the exploration of concurrent applications written in the Erlang language.
+
+The experimental functionality, as well as two more similar
+extensions/modifications are enabled with command line options. The tool runs
+the stable version, if these are not provided. The stable version supports a few
+more Erlang built-in functions that require preemption points and has been
+tested and integrated with a GUI. The experimental versions use the command line
+interface.
+
+2. Prerequisites
+----------------
+
+Concuerror is an Erlang application, so you will need an Erlang runtime system
+to run it. Most Linux distributions have suitable packages. To run the original
+Concuerror testsuite you will also need Python. The application startup and
+shutdown relies on a bash script, so it is currently not possible to run
+Concuerror on a Windows machine.
+
+You can build the application using 'make'
+
+3. Quick intro
+--------------
+
+Concuerror expects as input a set of Erlang source modules, a target function
+and a preemption bound. Its output in results.txt are all the traces of the
+program that had some concurrency error.
+
+We explain each briefly the command line options:
+
+- source files : are the files that will be instrumented to include preemption
+ points before built-in functions that may affect the global
+ state.
+
+ Option: -f <files>
+
+- target function : is an exported function in one of the files given as
+ input. This is the function that will be run by the first
+ process.
+
+ Option: -t <Module> <Name> [<arg1> <arg2>] (arguments are optional. If none is
+ given, the function with 0 arity
+ will be called)
+
+- preemption bound : designates how many 'unnecessary' preemptions are allowed
+ in the current run. Concuerror will always allow enabled
+ processes to run after a process has become blocked (by
+ trying to execute a receive when no matching messages are
+ in its mailbox) and will also allow processes to be
+ interrupted while still being enabled for other processes
+ to be scheduled instead as many times as the preemption
+ bound.
+
+ Option: -p <number or 'inf' for infinite bound> (default value is 2)
+
+- versions : by default you will be running the stable version of
+ Concuerror. The following command line options can be used to
+ enable 3 alternative versions, based on the same machinery:
+
+ --dpor_fake : is a 'sanity' check version of Concuerror using the
+ modified scheduler, but treating all operations as
+ dependent. Should give results similar to those of
+ the stable version, with maybe a few more
+ interleavings.
+
+ --dpor : is our experimental extension. Uses simple source sets to
+ decide additional interleavings, together with our set of
+ rules for dependencies between Erlang built-in functions.
+
+ --dpor_flanagan : is a version using the algorithm proposed by
+ Flanagan and Godefroid, extended with sleep sets
+ as described in our cited paper.
+
+Examples:
+
+To run stable Concuerror on two modules test.erl and foo.erl in your home
+directory, using test:run/0 as your starting function and infinite preemption
+bound:
+
+ ./concuerror -f ~/test.erl ~/foo.erl -t test run -p inf
+
+To run the same test using our experimental extension:
+
+ ./concuerror -f ~/test.erl ~/foo.erl -t test run -p inf --dpor
+
+You can run ./concuerror --help for description of a few more command line
+options.
+
+4. Tests
+--------
+
+You can instantly run two different testsuites that showcase the experimental
+version:
+
+a) The dpor_tests collection
+
+b) Concuerror's stable testsuite, which has been adapted slightly to run the
+ experimental version instead of the stable one.
+
+Let's go into more details:
+
+a) dpor_tests
+-------------
+
+This is a collection of motivating examples that were used during the
+development of the experimental version. They include toy Erlang programs as
+well as all the examples presented in the paper. The toy tests were written to
+expose dependencies in the supported Erlang built-in functions and to showcase
+the differences and strengths between the different versions of the tool.
+
+The tests output is compared against a stored expected output to decide success
+or failure. A few (less than 5, usually 1) of the tests are expected to fail: in
+these cases a diff of the expected output and the real output should show
+environment related changes, as the traces sometimes include information that is
+environment sensitive.
+
+These tests are in the dpor_tests directory and you can run all of them by:
+
+ dpor_tests/dpor_test
+
+... and a specific test by:
+
+ dpor_tests/dpor_test dpor_tests/dpor_test/src/<test>.erl
+
+The output is written in the dpor_tests/new_results directory and is compared
+with the reference output in dpor_tests/results. If it differs the test is
+reported as FAILED and the output is left for comparison. You can then use a
+(graphical) diff tool (e.g. meld) to see the differences in the outputs.
+
+You can of course run any of the tests with e.g.:
+
+./concuerror -f dpor_tests/src/<test>.erl -t <test> <test> -p inf --dpor
+
+Interesting tests in dpor_tests:
+--------------------------------
+
+- ets_dependencies.erl : This is the simple 2 readers vs 1 writer example.
+- ets_dependencies_n.erl : This is the extended example presented in the paper.
+ You can run this example with a varying number of readers <N> like this:
+
+ T=ets_dependencies
+ ./concuerror -f dpor_tests/src/$T.erl -t $T $T <N> -p inf --dpor
+
+- file_system_example.erl : The file system example written in Erlang
+- independent_receivers.erl : A test with just two interleavings, where stable
+ Concuerror explores 234300 interleavings.
+- register_again.erl : A test showing usage of Erlang built in functions.
+- ring_leader_election_symmetric : An implementation of leader election in a
+ set of processes connected in a ring.
+- ring_leader_election_symmetric_buffer.erl : Same as before, with the
+ difference that here mailboxes are 'modeled' as separate processes in such a
+ way that 'sends' and 'receives' are also interleaved, leading to an
+ explosion in the number of explored interleavings.
+- send_it_ets.erl : An example showing why send operations with the same message
+ to the same process must be also interleaved.
+
+b) Concuerror's stable testsuite
+--------------------------------
+
+Concuerror's stable testsuite has also been run with --dpor to check for any
+missing dependencies. The files are stored in testsuite/suites, including
+reference results. Running the tests creates the testsuite/results (which can
+again be diffed against the reference directory in case of failures).
+
+You can run the suite by:
+
+ make test
+
+87 of the tests are expected to fail because the reference results are those
+obtained by running --dpor_fake. This is to show the difference, which in most
+cases favors --dpor (unless an unsupported instruction is used, in which case
+the program crashes).
+
+The --dpor_fake results are in the dpor directories under each suite. They have
+been compared against the results (stored in the vanilla directories) obtained
+by running the stable version with a few added preemption points. These are in
+turn comparable with the original results (stored in the results directories).
+
+Interesting test in Concuerror's testsuite
+------------------------------------------
+
+- manolis_test_2workers: Corresponds to the rush_hour test presented in the
+ paper.
+
+5. Interesting details in the code
+----------------------------------
+
+Apart from concuerror_rep.erl which has all the replacement functions for the
+actual calls that are found in the instrumented modules, all the main algorithm
+run from concuerror_sched.erl. The dependent/2 boolean function returns true
+when two operations are dependent. The main loop of the algorithm is in the
+explore/1 function. Finally the two different DPOR versions differ in the details
+of add_all_backtracks/1 function.
View
3  src/concuerror.erl
@@ -362,6 +362,9 @@ help() ->
" --noprogress Disable progress bar\n"
" -q|--quiet Disable logging (implies --noprogress)\n"
" --gui Run concuerror with graphics\n"
+ " --dpor Runs the experimental optimal DPOR version\n"
+ " --dpor_fake Runs a 'sanity check' experimental version\n"
+ " --dpor_flanagan Runs an experimental reference DPOR version\n"
" --help Show this help message\n"
"\n"
"Examples:\n"
View
10 testsuite/runtests.py
@@ -31,7 +31,7 @@ def runTest(test):
files = [test]
# Create a dir to save the results
try:
- os.makedirs(results + "/" + suite + "/dpor_fake")
+ os.makedirs(results + "/" + suite + "/dpor")
except OSError:
pass
# Compile it
@@ -67,12 +67,12 @@ def runScenario(suite, name, modn, funn, preb, files):
global total_failed
sema.acquire()
# Run concuerror
- os.system("%s --dpor --target %s %s --files %s --output %s/%s/dpor_fake/%s-%s-%s.txt --preb %s --quiet"
+ os.system("%s --dpor --target %s %s --files %s --output %s/%s/dpor/%s-%s-%s.txt --preb %s --quiet"
% (concuerror, modn, funn, ' '.join(files), results, suite, name,
funn, preb, preb))
# Compare the results
- a = "%s/suites/%s/dpor_fake/%s-%s-%s.txt" % (dirname, suite, name, funn, preb)
- b = "%s/%s/dpor_fake/%s-%s-%s.txt" % (results, suite, name, funn, preb)
+ a = "%s/suites/%s/dpor/%s-%s-%s.txt" % (dirname, suite, name, funn, preb)
+ b = "%s/%s/dpor/%s-%s-%s.txt" % (results, suite, name, funn, preb)
equalRes = equalResults(a, b)
sema.release()
# Print the results
@@ -177,7 +177,7 @@ def ignoreLine(line):
print "\nOVERALL SUMMARY for test run"
print " %d total tests, which gave rise to" % len(tests)
print " %d test cases, of which" % total_tests.value
-print " %d caused unexpected failures" % total_failed.value
+print " %d caused expected failures! :-)" % total_failed.value
# Cleanup temp files
os.system("find %s -name '*.beam' -exec rm {} \;" % dirname)
View
0  ...es/regress/dpor_fake/ets_new-test-inf.txt → .../suites/regress/dpor/ets_new-test-inf.txt
File renamed without changes
View
0  ...ites/regress/dpor_fake/exit-test1-inf.txt → ...te/suites/regress/dpor/exit-test1-inf.txt
File renamed without changes
View
0  ...tes/regress/dpor_fake/lid_test-test-0.txt → ...e/suites/regress/dpor/lid_test-test-0.txt
File renamed without changes
View
0  .../dpor_fake/receive_catchall-test1-inf.txt → ...gress/dpor/receive_catchall-test1-inf.txt
File renamed without changes
View
0  .../dpor_fake/receive_catchall-test2-inf.txt → ...gress/dpor/receive_catchall-test2-inf.txt
File renamed without changes
View
0  .../dpor_fake/receive_catchall-test3-inf.txt → ...gress/dpor/receive_catchall-test3-inf.txt
File renamed without changes
View
2  testsuite/suites/regress/src/exit.erl
@@ -23,6 +23,7 @@ scenarios() ->
%% Here lies is a deadlock
test1() ->
+ throw(exit_2_is_not_supported),
Pid = spawn_link(fun() ->
process_flag(trap_exit, true),
receive _ -> ok end
@@ -31,6 +32,7 @@ test1() ->
%% Here lies is an exception
test2() ->
+ throw(exit_2_is_not_supported),
Pid = spawn_link(fun() ->
process_flag(trap_exit, true),
receive _ -> ok end
View
0  ...ces/dpor_fake/manolis-test_2workers-0.txt → ...esources/dpor/manolis-test_2workers-0.txt
File renamed without changes
View
0  ...es/resources/dpor_fake/percept-test-0.txt → .../suites/resources/dpor/percept-test-0.txt
File renamed without changes
View
0  ...es/resources/dpor_fake/percept-test-1.txt → .../suites/resources/dpor/percept-test-1.txt
File renamed without changes
View
0  ...es/resources/dpor_fake/percept-test-2.txt → .../suites/resources/dpor/percept-test-2.txt
File renamed without changes
View
0  ...ched_tests-test_3_proc_receive_exit-0.txt → ...ched_tests-test_3_proc_receive_exit-0.txt
File renamed without changes
View
0  ...ched_tests-test_3_proc_receive_exit-1.txt → ...ched_tests-test_3_proc_receive_exit-1.txt
File renamed without changes
View
0  ...ched_tests-test_3_proc_receive_exit-2.txt → ...ched_tests-test_3_proc_receive_exit-2.txt
File renamed without changes
View
0  ...ed_tests-test_3_proc_receive_exit-inf.txt → ...ed_tests-test_3_proc_receive_exit-inf.txt
File renamed without changes
View
0  ...ched_tests-test_3_proc_send_receive-0.txt → ...ched_tests-test_3_proc_send_receive-0.txt
File renamed without changes
View
0  ...ched_tests-test_3_proc_send_receive-1.txt → ...ched_tests-test_3_proc_send_receive-1.txt
File renamed without changes
View
0  ...ched_tests-test_3_proc_send_receive-2.txt → ...ched_tests-test_3_proc_send_receive-2.txt
File renamed without changes
View
0  ...ched_tests-test_3_proc_send_receive-3.txt → ...ched_tests-test_3_proc_send_receive-3.txt
File renamed without changes
View
0  ...ched_tests-test_3_proc_send_receive-4.txt → ...ched_tests-test_3_proc_send_receive-4.txt
File renamed without changes
View
0  ...ched_tests-test_3_proc_send_receive-5.txt → ...ched_tests-test_3_proc_send_receive-5.txt
File renamed without changes
View
0  ...ched_tests-test_3_proc_send_receive-6.txt → ...ched_tests-test_3_proc_send_receive-6.txt
File renamed without changes
View
0  ...ched_tests-test_3_proc_send_receive-7.txt → ...ched_tests-test_3_proc_send_receive-7.txt
File renamed without changes
View
0  ...ed_tests-test_3_proc_send_receive-inf.txt → ...ed_tests-test_3_proc_send_receive-inf.txt
File renamed without changes
View
0  ..._tests-test_after_clause_preemption-0.txt → ..._tests-test_after_clause_preemption-0.txt
File renamed without changes
View
0  ..._tests-test_after_clause_preemption-1.txt → ..._tests-test_after_clause_preemption-1.txt
File renamed without changes
View
0  ..._tests-test_after_clause_preemption-2.txt → ..._tests-test_after_clause_preemption-2.txt
File renamed without changes
View
0  ..._tests-test_after_clause_preemption-3.txt → ..._tests-test_after_clause_preemption-3.txt
File renamed without changes
View
0  ...ests-test_after_clause_preemption-inf.txt → ...ests-test_after_clause_preemption-inf.txt
File renamed without changes
View
0  ...s/dpor_fake/sched_tests-test_halt_0-0.txt → ...ources/dpor/sched_tests-test_halt_0-0.txt
File renamed without changes
View
0  ...dpor_fake/sched_tests-test_halt_0-inf.txt → ...rces/dpor/sched_tests-test_halt_0-inf.txt
File renamed without changes
View
0  ...s/dpor_fake/sched_tests-test_halt_1-0.txt → ...ources/dpor/sched_tests-test_halt_1-0.txt
File renamed without changes
View
0  ...dpor_fake/sched_tests-test_halt_1-inf.txt → ...rces/dpor/sched_tests-test_halt_1-inf.txt
File renamed without changes
View
0  .../sched_tests-test_link_receive_exit-0.txt → .../sched_tests-test_link_receive_exit-0.txt
File renamed without changes
View
0  .../sched_tests-test_link_receive_exit-1.txt → .../sched_tests-test_link_receive_exit-1.txt
File renamed without changes
View
0  ...ched_tests-test_link_receive_exit-inf.txt → ...ched_tests-test_link_receive_exit-inf.txt
File renamed without changes
View
0  ...r_fake/sched_tests-test_link_unlink-0.txt → ...s/dpor/sched_tests-test_link_unlink-0.txt
File renamed without changes
View
0  ...r_fake/sched_tests-test_link_unlink-1.txt → ...s/dpor/sched_tests-test_link_unlink-1.txt
File renamed without changes
View
0  ...r_fake/sched_tests-test_link_unlink-2.txt → ...s/dpor/sched_tests-test_link_unlink-2.txt
File renamed without changes
View
0  ...r_fake/sched_tests-test_link_unlink-3.txt → ...s/dpor/sched_tests-test_link_unlink-3.txt
File renamed without changes
View
0  ...fake/sched_tests-test_link_unlink-inf.txt → ...dpor/sched_tests-test_link_unlink-inf.txt
File renamed without changes
View
0  ...sched_tests-test_monitor_unexisting-0.txt → ...sched_tests-test_monitor_unexisting-0.txt
File renamed without changes
View
0  ...sched_tests-test_monitor_unexisting-1.txt → ...sched_tests-test_monitor_unexisting-1.txt
File renamed without changes
View
0  ...hed_tests-test_monitor_unexisting-inf.txt → ...hed_tests-test_monitor_unexisting-inf.txt
File renamed without changes
View
0  ...est_nested_send_receive_block_twice-0.txt → ...est_nested_send_receive_block_twice-0.txt
File renamed without changes
View
0  ...est_nested_send_receive_block_twice-1.txt → ...est_nested_send_receive_block_twice-1.txt
File renamed without changes
View
0  ...est_nested_send_receive_block_twice-2.txt → ...est_nested_send_receive_block_twice-2.txt
File renamed without changes
View
0  .../dpor_fake/sched_tests-test_receive-0.txt → ...urces/dpor/sched_tests-test_receive-0.txt
File renamed without changes
View
0  ...por_fake/sched_tests-test_receive-inf.txt → ...ces/dpor/sched_tests-test_receive-inf.txt
File renamed without changes
View
0  ...por_fake/sched_tests-test_receive_2-0.txt → ...ces/dpor/sched_tests-test_receive_2-0.txt
File renamed without changes
View
0  ...r_fake/sched_tests-test_receive_2-inf.txt → ...s/dpor/sched_tests-test_receive_2-inf.txt
File renamed without changes
View
0  ...est_receive_after_block_expr_action-0.txt → ...est_receive_after_block_expr_action-0.txt
File renamed without changes
View
0  ...t_receive_after_block_expr_action-inf.txt → ...t_receive_after_block_expr_action-inf.txt
File renamed without changes
View
0  ..._receive_after_infinity_no_patterns-0.txt → ..._receive_after_infinity_no_patterns-0.txt
File renamed without changes
View
0  ...eceive_after_infinity_no_patterns-inf.txt → ...eceive_after_infinity_no_patterns-inf.txt
File renamed without changes
View
0  ...receive_after_infinity_with_pattern-0.txt → ...receive_after_infinity_with_pattern-0.txt
File renamed without changes
View
0  ...ceive_after_infinity_with_pattern-inf.txt → ...ceive_after_infinity_with_pattern-inf.txt
File renamed without changes
View
0  ...ests-test_receive_after_no_patterns-0.txt → ...ests-test_receive_after_no_patterns-0.txt
File renamed without changes
View
0  ...ests-test_receive_after_no_patterns-1.txt → ...ests-test_receive_after_no_patterns-1.txt
File renamed without changes
View
0  ...ests-test_receive_after_no_patterns-2.txt → ...ests-test_receive_after_no_patterns-2.txt
File renamed without changes
View
0  ...ts-test_receive_after_no_patterns-inf.txt → ...ts-test_receive_after_no_patterns-inf.txt
File renamed without changes
View
0  ...sts-test_receive_after_with_pattern-0.txt → ...sts-test_receive_after_with_pattern-0.txt
File renamed without changes
View
0  ...sts-test_receive_after_with_pattern-1.txt → ...sts-test_receive_after_with_pattern-1.txt
File renamed without changes
View
0  ...sts-test_receive_after_with_pattern-2.txt → ...sts-test_receive_after_with_pattern-2.txt
File renamed without changes
View
0  ...sts-test_receive_after_with_pattern-3.txt → ...sts-test_receive_after_with_pattern-3.txt
File renamed without changes
View
0  ...s-test_receive_after_with_pattern-inf.txt → ...s-test_receive_after_with_pattern-inf.txt
File renamed without changes
View
0  ...ched_tests-test_register_unregister-0.txt → ...ched_tests-test_register_unregister-0.txt
File renamed without changes
View
0  ...ched_tests-test_register_unregister-1.txt → ...ched_tests-test_register_unregister-1.txt
File renamed without changes
View
0  ...ched_tests-test_register_unregister-2.txt → ...ched_tests-test_register_unregister-2.txt
File renamed without changes
View
0  ...ched_tests-test_register_unregister-3.txt → ...ched_tests-test_register_unregister-3.txt
File renamed without changes
View
0  ...ed_tests-test_register_unregister-inf.txt → ...ed_tests-test_register_unregister-inf.txt
File renamed without changes
View
0  ...ces/dpor_fake/sched_tests-test_send-0.txt → ...esources/dpor/sched_tests-test_send-0.txt
File renamed without changes
View
0  ...ces/dpor_fake/sched_tests-test_send-1.txt → ...esources/dpor/sched_tests-test_send-1.txt
File renamed without changes
View
0  ...s/dpor_fake/sched_tests-test_send-inf.txt → ...ources/dpor/sched_tests-test_send-inf.txt
File renamed without changes
View
0  ...s/dpor_fake/sched_tests-test_send_2-0.txt → ...ources/dpor/sched_tests-test_send_2-0.txt
File renamed without changes
View
0  ...s/dpor_fake/sched_tests-test_send_2-1.txt → ...ources/dpor/sched_tests-test_send_2-1.txt
File renamed without changes
View
0  ...dpor_fake/sched_tests-test_send_2-inf.txt → ...rces/dpor/sched_tests-test_send_2-inf.txt
File renamed without changes
View
0  ..._fake/sched_tests-test_send_receive-0.txt → .../dpor/sched_tests-test_send_receive-0.txt
File renamed without changes
View
0  ..._fake/sched_tests-test_send_receive-1.txt → .../dpor/sched_tests-test_send_receive-1.txt
File renamed without changes
View
0  ..._fake/sched_tests-test_send_receive-2.txt → .../dpor/sched_tests-test_send_receive-2.txt
File renamed without changes
View
0  ...ake/sched_tests-test_send_receive-inf.txt → ...por/sched_tests-test_send_receive-inf.txt
File renamed without changes
View
0  ...ake/sched_tests-test_send_receive_2-0.txt → ...por/sched_tests-test_send_receive_2-0.txt
File renamed without changes
View
0  ...ake/sched_tests-test_send_receive_2-1.txt → ...por/sched_tests-test_send_receive_2-1.txt
File renamed without changes
View
0  ...ake/sched_tests-test_send_receive_2-2.txt → ...por/sched_tests-test_send_receive_2-2.txt
File renamed without changes
View
0  ...e/sched_tests-test_send_receive_2-inf.txt → ...r/sched_tests-test_send_receive_2-inf.txt
File renamed without changes
View
0  ...ake/sched_tests-test_send_receive_3-0.txt → ...por/sched_tests-test_send_receive_3-0.txt
File renamed without changes
View
0  ...ake/sched_tests-test_send_receive_3-1.txt → ...por/sched_tests-test_send_receive_3-1.txt
File renamed without changes
View
0  ...ake/sched_tests-test_send_receive_3-2.txt → ...por/sched_tests-test_send_receive_3-2.txt
File renamed without changes
View
0  ...e/sched_tests-test_send_receive_3-inf.txt → ...r/sched_tests-test_send_receive_3-inf.txt
File renamed without changes
View
0  ...es/dpor_fake/sched_tests-test_spawn-0.txt → ...sources/dpor/sched_tests-test_spawn-0.txt
File renamed without changes
View
0  ...es/dpor_fake/sched_tests-test_spawn-1.txt → ...sources/dpor/sched_tests-test_spawn-1.txt
File renamed without changes
View
0  .../dpor_fake/sched_tests-test_spawn-inf.txt → ...urces/dpor/sched_tests-test_spawn-inf.txt
File renamed without changes
View
0  ...ke/sched_tests-test_spawn_link_race-0.txt → ...or/sched_tests-test_spawn_link_race-0.txt
File renamed without changes
View
0  ...ke/sched_tests-test_spawn_link_race-1.txt → ...or/sched_tests-test_spawn_link_race-1.txt
File renamed without changes
View
0  .../sched_tests-test_spawn_link_race-inf.txt → .../sched_tests-test_spawn_link_race-inf.txt
File renamed without changes
View
0  ..._tests-test_spawn_link_receive_exit-0.txt → ..._tests-test_spawn_link_receive_exit-0.txt
File renamed without changes
View
0  ..._tests-test_spawn_link_receive_exit-1.txt → ..._tests-test_spawn_link_receive_exit-1.txt
File renamed without changes
View
0  ...ests-test_spawn_link_receive_exit-inf.txt → ...ests-test_spawn_link_receive_exit-inf.txt
File renamed without changes
View
0  .../sched_tests-test_spawn_link_unlink-0.txt → .../sched_tests-test_spawn_link_unlink-0.txt
File renamed without changes
View
0  .../sched_tests-test_spawn_link_unlink-1.txt → .../sched_tests-test_spawn_link_unlink-1.txt
File renamed without changes
View
0  .../sched_tests-test_spawn_link_unlink-2.txt → .../sched_tests-test_spawn_link_unlink-2.txt
File renamed without changes
View
0  ...ched_tests-test_spawn_link_unlink-inf.txt → ...ched_tests-test_spawn_link_unlink-inf.txt
File renamed without changes
View
0  ...ched_tests-test_spawn_link_unlink_2-0.txt → ...ched_tests-test_spawn_link_unlink_2-0.txt
File renamed without changes
View
0  ...ched_tests-test_spawn_link_unlink_2-1.txt → ...ched_tests-test_spawn_link_unlink_2-1.txt
File renamed without changes
View
0  ...ed_tests-test_spawn_link_unlink_2-inf.txt → ...ed_tests-test_spawn_link_unlink_2-inf.txt
File renamed without changes
View
0  ...ched_tests-test_spawn_link_unlink_3-0.txt → ...ched_tests-test_spawn_link_unlink_3-0.txt
File renamed without changes
View
0  ...ched_tests-test_spawn_link_unlink_3-1.txt → ...ched_tests-test_spawn_link_unlink_3-1.txt
File renamed without changes
View
0  ...ed_tests-test_spawn_link_unlink_3-inf.txt → ...ed_tests-test_spawn_link_unlink_3-inf.txt
File renamed without changes
View
0  ...fake/sched_tests-test_spawn_monitor-0.txt → ...dpor/sched_tests-test_spawn_monitor-0.txt
File renamed without changes
View
0  ...ke/sched_tests-test_spawn_monitor-inf.txt → ...or/sched_tests-test_spawn_monitor-inf.txt
File renamed without changes
View
0  ..._tests-test_spawn_monitor_demonitor-0.txt → ..._tests-test_spawn_monitor_demonitor-0.txt
File renamed without changes
View
0  ..._tests-test_spawn_monitor_demonitor-1.txt → ..._tests-test_spawn_monitor_demonitor-1.txt
File renamed without changes
View
0  ...ests-test_spawn_monitor_demonitor-inf.txt → ...ests-test_spawn_monitor_demonitor-inf.txt
File renamed without changes
View
0  ...ests-test_spawn_monitor_demonitor_2-0.txt → ...ests-test_spawn_monitor_demonitor_2-0.txt
File renamed without changes
View
0  ...ests-test_spawn_monitor_demonitor_2-1.txt → ...ests-test_spawn_monitor_demonitor_2-1.txt
File renamed without changes
View
0  ...ts-test_spawn_monitor_demonitor_2-inf.txt → ...ts-test_spawn_monitor_demonitor_2-inf.txt
File renamed without changes
View
0  ...ests-test_spawn_monitor_demonitor_3-0.txt → ...ests-test_spawn_monitor_demonitor_3-0.txt
File renamed without changes
View
0  ...ests-test_spawn_monitor_demonitor_3-1.txt → ...ests-test_spawn_monitor_demonitor_3-1.txt
File renamed without changes
View
0  ...ts-test_spawn_monitor_demonitor_3-inf.txt → ...ts-test_spawn_monitor_demonitor_3-inf.txt
File renamed without changes
View
0  ...ests-test_spawn_monitor_demonitor_4-0.txt → ...ests-test_spawn_monitor_demonitor_4-0.txt
File renamed without changes
View
0  ...ests-test_spawn_monitor_demonitor_4-1.txt → ...ests-test_spawn_monitor_demonitor_4-1.txt
File renamed without changes
View
0  ...ts-test_spawn_monitor_demonitor_4-inf.txt → ...ts-test_spawn_monitor_demonitor_4-inf.txt
File renamed without changes
View
0  ...ts-test_spawn_opt_link_receive_exit-0.txt → ...ts-test_spawn_opt_link_receive_exit-0.txt
File renamed without changes
View
0  ...ts-test_spawn_opt_link_receive_exit-1.txt → ...ts-test_spawn_opt_link_receive_exit-1.txt
File renamed without changes
View
0  ...-test_spawn_opt_link_receive_exit-inf.txt → ...-test_spawn_opt_link_receive_exit-inf.txt
File renamed without changes
View
0  .../sched_tests-test_spawn_opt_monitor-0.txt → .../sched_tests-test_spawn_opt_monitor-0.txt
File renamed without changes
View
0  ...ched_tests-test_spawn_opt_monitor-inf.txt → ...ched_tests-test_spawn_opt_monitor-inf.txt
File renamed without changes
View
0  ...ched_tests-test_spawn_register_race-0.txt → ...ched_tests-test_spawn_register_race-0.txt
File renamed without changes
View
0  ...ched_tests-test_spawn_register_race-1.txt → ...ched_tests-test_spawn_register_race-1.txt
File renamed without changes
View
0  ...ched_tests-test_spawn_register_race-2.txt → ...ched_tests-test_spawn_register_race-2.txt
File renamed without changes
View
0  ...ed_tests-test_spawn_register_race-inf.txt → ...ed_tests-test_spawn_register_race-inf.txt
File renamed without changes
View
0  ...e/sched_tests-test_trap_exit_timing-0.txt → ...r/sched_tests-test_trap_exit_timing-0.txt
File renamed without changes
View
0  ...e/sched_tests-test_trap_exit_timing-1.txt → ...r/sched_tests-test_trap_exit_timing-1.txt
File renamed without changes
View
0  ...sched_tests-test_trap_exit_timing-inf.txt → ...sched_tests-test_trap_exit_timing-inf.txt
File renamed without changes
View
0  ...r_fake/sched_tests-test_var_mod_fun-0.txt → ...s/dpor/sched_tests-test_var_mod_fun-0.txt
File renamed without changes
View
0  ...r_fake/sched_tests-test_var_mod_fun-1.txt → ...s/dpor/sched_tests-test_var_mod_fun-1.txt
File renamed without changes
View
0  ...fake/sched_tests-test_var_mod_fun-inf.txt → ...dpor/sched_tests-test_var_mod_fun-inf.txt
File renamed without changes
View
0  .../dpor_fake/sched_tests-test_whereis-0.txt → ...urces/dpor/sched_tests-test_whereis-0.txt
File renamed without changes
View
0  .../dpor_fake/sched_tests-test_whereis-1.txt → ...urces/dpor/sched_tests-test_whereis-1.txt
File renamed without changes
View
0  .../dpor_fake/sched_tests-test_whereis-2.txt → ...urces/dpor/sched_tests-test_whereis-2.txt
File renamed without changes
View
0  ...por_fake/sched_tests-test_whereis-inf.txt → ...ces/dpor/sched_tests-test_whereis-inf.txt
File renamed without changes
View
0  .../resources/dpor_fake/shootout-test1-0.txt → ...uites/resources/dpor/shootout-test1-0.txt
File renamed without changes
View
0  ...esources/dpor_fake/shootout-test1-inf.txt → ...tes/resources/dpor/shootout-test1-inf.txt
File renamed without changes
Please sign in to comment.
Something went wrong with that request. Please try again.