Skip to content

Commit d215e19

Browse files
committed
fixes
- fix FeatureSort - add error message for invalid unique divisor - correctly rescale speed for size-mlt < 1 - add minSize parameter for runAll sorts - add unique limit for runAll sorts
1 parent 53b7ef2 commit d215e19

File tree

3 files changed

+19
-12
lines changed

3 files changed

+19
-12
lines changed

GUI.opal

+5-7
Original file line numberDiff line numberDiff line change
@@ -640,15 +640,13 @@ new class GUI {
640640
return;
641641
}
642642

643-
if checkType(sizeMlt, float) {
644-
float <- sizeMlt;
645-
} else {
646-
this.userWarn("Error", "Invalid size multiplier value. Please retry.");
647-
return;
648-
}
649-
650643
if checkType(uniqueDiv, float) {
651644
float <- uniqueDiv;
645+
646+
if uniqueDiv < 1 {
647+
this.userWarn("Error", "Minimum unique divisor is 1.");
648+
return;
649+
}
652650
} else {
653651
this.userWarn("Error", "Invalid unique divisor value. Please retry.");
654652
return;

sorts/FeatureSort.opal

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
use UtilsIterablesStableSort;
1+
use UtilsIterablesSort;
22

33
new class FeatureSort {
44
new method sortSubarray(subarray, mainArray) {
55
new int l = len(subarray);
66
if l <= 1 {
77
return;
88
}
9-
UtilsIterablesStableSort(len(mainArray), mainArray).sort(subarray, 0, l);
9+
UtilsIterablesSort(len(mainArray), mainArray).sort(subarray, 0, l);
1010
}
1111

1212
new method __adaptAux(_) {

threads/runAllSorts.opal

+12-3
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
this.setVisual(runOpts["visual"]);
22

3-
new function runAllSort(size, name, speed, toPush = None, killers = None, speedScale = 1, sizeLimit = None) {
3+
new function runAllSort(size, name, speed, toPush = None, killers = None, speedScale = 1, sizeLimit = None, uniqueLimit = 2, minSize = 4) {
44
size *= runOpts["size-mlt"];
55
speed *= runOpts["size-mlt"] * runOpts["speed"];
66

77
if runOpts["size-mlt"] > 1 {
88
speed *= speedScale;
9-
}
9+
} elif runOpts["size-mlt"] < 1 {
10+
speed /= speedScale;
11+
}
1012

1113
int <- size;
1214

1315
if sizeLimit is not None && size > sizeLimit {
1416
size = sizeLimit;
17+
} elif size < minSize {
18+
size = minSize;
19+
}
20+
21+
new int unique = size // runOpts["unique-div"];
22+
if unique < uniqueLimit {
23+
unique = uniqueLimit;
1524
}
1625

1726
if needsSeed {
@@ -29,7 +38,7 @@ new function runAllSort(size, name, speed, toPush = None, killers = None, speedS
2938
}
3039

3140
this.runSortingProcess(
32-
runOpts["distribution"], size, int(size / runOpts["unique-div"]),
41+
runOpts["distribution"], size, unique,
3342
runOpts["shuffle"], ct, name, speed,
3443
killers = {} if killers is None else killers
3544
);

0 commit comments

Comments
 (0)