{"action":"created","issue":{"url":"https://api.github.com/repos/emil-e/rapidcheck/issues/47","labels_url":"https://api.github.com/repos/emil-e/rapidcheck/issues/47/labels{/name}","comments_url":"https://api.github.com/repos/emil-e/rapidcheck/issues/47/comments","events_url":"https://api.github.com/repos/emil-e/rapidcheck/issues/47/events","html_url":"https://github.com/emil-e/rapidcheck/issues/47","id":97312620,"number":47,"title":"Parallel testing","user":{"login":"furuholm","id":977970,"avatar_url":"https://avatars.githubusercontent.com/u/977970?v=3","gravatar_id":"","url":"https://api.github.com/users/furuholm","html_url":"https://github.com/furuholm","followers_url":"https://api.github.com/users/furuholm/followers","following_url":"https://api.github.com/users/furuholm/following{/other_user}","gists_url":"https://api.github.com/users/furuholm/gists{/gist_id}","starred_url":"https://api.github.com/users/furuholm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/furuholm/subscriptions","organizations_url":"https://api.github.com/users/furuholm/orgs","repos_url":"https://api.github.com/users/furuholm/repos","events_url":"https://api.github.com/users/furuholm/events{/privacy}","received_events_url":"https://api.github.com/users/furuholm/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":8,"created_at":"2015-07-26T12:29:46Z","updated_at":"2015-08-13T21:05:50Z","closed_at":null,"body":"Parallel testing is supported by QuickCheck and PropEr and I think it will prove very useful for RapidCheck as well. \r\n\r\nI have created a proof of concept[1] and a gist that shows an example of usage[2]. This proof of concept follows the design of the QuickCheck [3] and PropEr[4] counterparts where possible. Note that this is a prototype and nothing else!\r\n\r\nAt least one API change is required for this feature to be implemented and that is that the behavior of the run function has to be split into a execution step and a verification step. This can be done by adding a new function to the Command class or by letting the run function return a callable or a std::function that can be used for verification at a later point. Returning a function might be the preffered way since the run function otherwise typically will have to change the state of its Command object (This is what the proof of concept does. I have even made a field mutable in order to minimize the changes necessary in the prototype).\r\n\r\nShrinking works given that enough retries are made. The count of retries has to be configurable in a complete solution.\r\n\r\n[1] https://github.com/furuholm/rapidcheck/tree/parallel_testing\r\n[2] https://gist.github.com/furuholm/bc98d94178c96b0f341a\r\n[3] Finding Race Conditions in Erlang with QuickCheck and PULSE - http://www.cse.chalmers.se/~nicsma/papers/finding-race-conditions.pdf\r\n[4] PropEr documentation of proper_statem module - http://proper.softlab.ntua.gr/doc/proper_statem.html"},"comment":{"url":"https://api.github.com/repos/emil-e/rapidcheck/issues/comments/130844897","html_url":"https://github.com/emil-e/rapidcheck/issues/47#issuecomment-130844897","issue_url":"https://api.github.com/repos/emil-e/rapidcheck/issues/47","id":130844897,"user":{"login":"furuholm","id":977970,"avatar_url":"https://avatars.githubusercontent.com/u/977970?v=3","gravatar_id":"","url":"https://api.github.com/users/furuholm","html_url":"https://github.com/furuholm","followers_url":"https://api.github.com/users/furuholm/followers","following_url":"https://api.github.com/users/furuholm/following{/other_user}","gists_url":"https://api.github.com/users/furuholm/gists{/gist_id}","starred_url":"https://api.github.com/users/furuholm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/furuholm/subscriptions","organizations_url":"https://api.github.com/users/furuholm/orgs","repos_url":"https://api.github.com/users/furuholm/repos","events_url":"https://api.github.com/users/furuholm/events{/privacy}","received_events_url":"https://api.github.com/users/furuholm/received_events","type":"User","site_admin":false},"created_at":"2015-08-13T21:05:50Z","updated_at":"2015-08-13T21:05:50Z","body":"There are details left to hammer out but I think this solution is more elegant than having separate command types and it doesn't complicate the sequential case too much. What do you think?"}}