diff --git a/app/src/main/java/de/uni_marburg/powersort/benchmark/DummySort.java b/app/src/main/java/de/uni_marburg/powersort/benchmark/DummySort.java new file mode 100644 index 0000000..16e4c76 --- /dev/null +++ b/app/src/main/java/de/uni_marburg/powersort/benchmark/DummySort.java @@ -0,0 +1,19 @@ +package de.uni_marburg.powersort.benchmark; + +import java.util.Arrays; +import java.util.Comparator; + +/** + * Same class and method interface as JDK23 TimSort.java with its sort() method. + *
+ * Uses Arrays.sort() for sorting.
+ */
+class DummySort
+ * Uses Arrays.sort() for sorting.
+ * But calls it a.length times which makes this implementation really inefficient.
+ */
+class DummySort2
+ * Quote from JDK23 ComparableTimSort.java
+ *
+ * If you are using an optimizing VM, you may find that ComparableTimSort
+ * offers no performance benefit over TimSort in conjunction with a
+ * comparator that simply returns {@code ((Comparable)first).compareTo(Second)}.
+ * If this is the case, you are better off deleting ComparableTimSort to
+ * eliminate the code duplication.
+ */
+ private static void sortObjectsAvoidingComparableTimSort() {
+ SomeComparable[] a = {
+ new SomeComparable(1),
+ new SomeComparable(0)
+ };
+
+ NaturalOrder c = NaturalOrder.INSTANCE;
+ // -> TimSort.sort(a, 0, a.length, c, null, 0, 0);
+ // -> All elements in the array must implement the {@link Comparable} interface.
+ Arrays.sort(a, c);
+
+ System.out.println(Arrays.toString(a));
+ }
+
+ public static void sortObjects() {
+ SomeComparable[] a = {
+ new SomeComparable(1),
+ new SomeComparable(0)
+ };
+
+
+ // -> ComparableTimSort.sort(a, 0, a.length, null, 0, 0);
+ // -> All elements in the array must implement the {@link Comparable} interface.
+ Arrays.sort(a);
+
+ System.out.println(Arrays.toString(a));
+ }
+
+ public static void sortPrimitives() {
+ int[] a = {1, 0};
+
+ // -> DualPivotQuicksort.sort(a, 0, 0, a.length);
+ Arrays.sort(a);
+
+ System.out.println(Arrays.toString(a));
+ }
+}
diff --git a/app/src/main/java/de/uni_marburg/powersort/benchmark/Main.java b/app/src/main/java/de/uni_marburg/powersort/benchmark/Main.java
new file mode 100644
index 0000000..907d402
--- /dev/null
+++ b/app/src/main/java/de/uni_marburg/powersort/benchmark/Main.java
@@ -0,0 +1,30 @@
+package de.uni_marburg.powersort.benchmark;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Comparator;
+
+public class Main {
+ public static void main(final String[] args) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
+ final SomeComparable[] a = {
+ new SomeComparable(1),
+ new SomeComparable(0)
+ };
+
+ final Method[] sortImplementations = getSortImplementations();
+
+ final NaturalOrder c = NaturalOrder.INSTANCE;
+ for (Method sortImplementation : sortImplementations) {
+ sortImplementation.invoke(null, a, 0, 0, c, null, 0, 0);
+ System.out.println(Arrays.toString(a));
+ }
+ }
+
+ static Method[] getSortImplementations() throws NoSuchMethodException {
+ return new Method[]{
+ DummySort.class.getMethod("sort", Object[].class, int.class, int.class, Comparator.class, Object[].class, int.class, int.class),
+ DummySort2.class.getMethod("sort", Object[].class, int.class, int.class, Comparator.class, Object[].class, int.class, int.class)
+ };
+ }
+}
diff --git a/app/src/main/java/de/uni_marburg/powersort/benchmark/NaturalOrder.java b/app/src/main/java/de/uni_marburg/powersort/benchmark/NaturalOrder.java
new file mode 100644
index 0000000..e60074c
--- /dev/null
+++ b/app/src/main/java/de/uni_marburg/powersort/benchmark/NaturalOrder.java
@@ -0,0 +1,15 @@
+package de.uni_marburg.powersort.benchmark;
+
+import java.util.Comparator;
+
+/**
+ * Copied from JDK23 Arrays.java
+ */
+final class NaturalOrder implements Comparator