View Javadoc
1   package ch.hslu.exercises.sw09;
2   
3   import org.apache.commons.lang3.tuple.Pair;
4   import org.slf4j.Logger;
5   import org.slf4j.LoggerFactory;
6   
7   import java.time.Duration;
8   import java.time.Instant;
9   import java.util.List;
10  import java.util.Random;
11  import java.util.function.Consumer;
12  
13  public final class Sorting {
14      private List<Pair<String, Consumer<int[]>>> sortingAlgos;
15      private int[] sorted100;
16      private int[] sorted200;
17      private int[] sorted400;
18      private int[] reversed100;
19      private int[] reversed200;
20      private int[] reversed400;
21      private int[] random100;
22      private int[] random200;
23      private int[] random400;
24      private static final Logger LOG = LoggerFactory.getLogger(Sorting.class);
25  
26      public Sorting(final List<Pair<String, Consumer<int[]>>> sortingAlgos) {
27          this.sortingAlgos = sortingAlgos;
28          initTestData();
29      }
30  
31  
32      public void test() {
33          for (Pair<String, Consumer<int[]>> sortingAlgo : sortingAlgos) {
34              Instant start;
35  
36  
37              start = Instant.now();
38              sortingAlgo.getRight().accept(sorted100);
39              Duration duration = Duration.between(start, Instant.now());
40              LOG.info(sortingAlgo.getLeft() + " with 100 000 sorted: " + duration);
41  
42              start = Instant.now();
43              sortingAlgo.getRight().accept(sorted200);
44              duration = Duration.between(start, Instant.now());
45              LOG.info(sortingAlgo.getLeft() + " with 200 000 sorted: " + duration);
46  
47              start = Instant.now();
48              sortingAlgo.getRight().accept(sorted400);
49              duration = Duration.between(start, Instant.now());
50              LOG.info(sortingAlgo.getLeft() + " with 400 000 sorted: " + duration);
51  
52              start = Instant.now();
53              sortingAlgo.getRight().accept(reversed100);
54              duration = Duration.between(start, Instant.now());
55              LOG.info(sortingAlgo.getLeft() + " with 100 000 reversed: " + duration);
56  
57              start = Instant.now();
58              sortingAlgo.getRight().accept(reversed200);
59              duration = Duration.between(start, Instant.now());
60              LOG.info(sortingAlgo.getLeft() + " with 200 000 reversed: " + duration);
61  
62              start = Instant.now();
63              sortingAlgo.getRight().accept(reversed400);
64              duration = Duration.between(start, Instant.now());
65              LOG.info(sortingAlgo.getLeft() + " with 400 000 reversed: " + duration);
66  
67              start = Instant.now();
68              sortingAlgo.getRight().accept(random100);
69              duration = Duration.between(start, Instant.now());
70              LOG.info(sortingAlgo.getLeft() + " with 100 000 random: " + duration);
71  
72              start = Instant.now();
73              sortingAlgo.getRight().accept(random200);
74              duration = Duration.between(start, Instant.now());
75              LOG.info(sortingAlgo.getLeft() + " with 200 000 random: " + duration);
76  
77              start = Instant.now();
78              sortingAlgo.getRight().accept(random400);
79              duration = Duration.between(start, Instant.now());
80              LOG.info(sortingAlgo.getLeft() + " with 400 000 random: " + duration);
81              initTestData();
82          }
83      }
84  
85  
86      private void initTestData() {
87          sorted100 = new int[100_000];
88          for (int i = 0; i < sorted100.length; i++) {
89              sorted100[i] = i;
90          }
91          sorted200 = new int[200_000];
92          for (int i = 0; i < sorted200.length; i++) {
93              sorted200[i] = i;
94          }
95          sorted400 = new int[400_000];
96          for (int i = 0; i < sorted400.length; i++) {
97              sorted400[i] = i;
98          }
99  
100         reversed100 = new int[100_000];
101         int element = reversed100.length;
102         for (int i = 0; i < reversed100.length; i++) {
103             element--;
104             reversed100[i] = element;
105         }
106 
107         reversed200 = new int[200_000];
108         element = reversed200.length;
109         for (int i = 0; i < reversed200.length; i++) {
110             element--;
111             reversed200[i] = element;
112         }
113 
114         reversed400 = new int[400_000];
115         element = reversed400.length;
116         for (int i = 0; i < reversed400.length; i++) {
117             element--;
118             reversed400[i] = element;
119         }
120 
121         Random random = new Random(0);
122         random100 = new int[100_000];
123         for (int i = 0; i < random100.length; i++) {
124             random100[i] = random.nextInt();
125         }
126         random200 = new int[200_000];
127         for (int i = 0; i < random200.length; i++) {
128             random200[i] = random.nextInt();
129         }
130         random400 = new int[400_000];
131         for (int i = 0; i < random400.length; i++) {
132             random400[i] = random.nextInt();
133         }
134     }
135 
136 }