-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Detect and reject equivalent mutants #43
Comments
Perhaps it would be better to detect the repeat (and thus save on ConTest evaluations) but keep it as it will probably mutate into something different from the previous one. (Maintain diversity.) |
I think that sounds right. It might be the case that the solution is actually one mutation from the already occurred state of the program and the first time it went down another path. I think we can just skip the ConTest evaluations like you mentioned. |
Checked this in on master (8e61f91). Lets say gen 1 mem 3 is the same as gen 1 mem 1. Is there anything that needs to be copied from 1-1 to 1-3? I'm thinking about operator weightings and so-on. Currently this patch doesn't do anything like this. It simply skips the ConTest runs. Also, it is only for the functional phase at the moment. Is there a reason why it can't be added to the non-functional phase as well? |
I went with the maintaining diversity approach. |
I think everything from 1-1 should go to 1-3 (excluding the past states if any). We are just acknowledging that this individual state has already occurred thus we don't need to re-evaluate it. We just take the already evaluated state from 1-1 and move it to 1-3 so we can evolve from that. This can influence the operator weighting as it will have duplicates influencing it. |
A short analysis of the effects of the ARC optimizations: Super-TLDR Summary:
TLDR Summary:
Longer Description of Analysis:
Each deadlock took 94 seconds longer than a data race to evaluate.
Deadlocks hurt performance by 14% (24% - 10%).
6a. Time to evaluate generation 1: (No deadlocks) Old ARC: 50m 6b. Time to evaluate generations 1 & 2: (No deadlocks) Old ARC: 1h 29m 6c. Time to find solution at generation 3, member 17 for both: Old ARC: 2h 19m With deadlocks and generations factored out, generation per generation OP-ARC does run |
Currently, if two different members of the population arrive at the same program structure after mutation, each is evaluated. Time would be saved if after we do the first evaluation, we record a hash of the mutated program and the result of the evaluation. For every new mutation, we can check against the hash list. If we find it, there is no need to test it again. Reject the mutation and try again.
The text was updated successfully, but these errors were encountered: