[TGEN-1] generators/shuffle violates contract of Comparable Created: 13/Oct/12 Updated: 14/Oct/12 Resolved: 14/Oct/12 |
|
| Status: | Resolved |
| Project: | test.generative |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | None |
| Type: | Defect | Priority: | Major |
| Reporter: | Ben Smith-Mannschott | Assignee: | Ben Smith-Mannschott |
| Resolution: | Completed | Votes: | 0 |
| Labels: | None | ||
| Environment: |
Mac OS X 10.8.2 |
||
| Attachments: |
|
| Patch: | Code |
| Approval: | Accepted |
| Description |
|
JDK 7's sort function is stricter about verifying that implementations of the comparison function actually obey their contract. It will even helpfully throw an exception when this is not the case: java.lang.IllegalArgumentException: Comparison method violates its general contract! The root cause is this gem: generators.clj (defn shuffle
"Shuffle coll"
[coll]
(sort-by (fn [_] (long)) coll))
Which does not work on JDK7 since TimSort is clever enough to detect that the ordering function is behaving inconsistently, resulting in the previously mentioned exception. Also, this is just a bad idea:
|
| Comments |
| Comment by Ben Smith-Mannschott [ 14/Oct/12 11:13 AM ] |
|
Fixed by 5a59bf0f on test.generative. |