summaryrefslogtreecommitdiff
path: root/Homework/cs3460/array_perf/main.cpp
blob: 1441751b3b6e1da86913f3d99646c212f8ef6530 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "sortutils.hpp"

#include <algorithm>
#include <cmath>
#include <iostream>

const int MIN_DIST = static_cast<int>(-1e+7);
const int MAX_DIST = static_cast<int>(1e+7);

/**
 * @param SourceArray source: the data to initialize with random elements
 * @return void: set source's elements between MIN_DIST, MAX_DIST
 */
void randomizeArray(SourceArray& source)
{
    std::uniform_int_distribution<int> distribution(MIN_DIST, MAX_DIST);
    std::default_random_engine generator;
    std::generate(std::execution::par, source.begin(), source.end(), [&distribution, &generator]() { return distribution(generator); });
}

int main()
{
    SourceArray randomizedArray, sorted, reversed, organPipe, rotated;

    randomizeArray(randomizedArray);

    std::copy(randomizedArray.begin(), randomizedArray.end(), sorted.begin());
    std::sort(sorted.begin(), sorted.end());

    std::copy(sorted.begin(), sorted.end(), reversed.begin());
    std::reverse(reversed.begin(), reversed.end());

    std::copy(sorted.begin(), sorted.end(), organPipe.begin());
    organPipeStdArray(organPipe);

    std::copy(sorted.begin(), sorted.end(), rotated.begin());
    std::rotate(rotated.begin(), rotated.begin() + 1, rotated.end());

    evaluateRawArray(randomizedArray, sorted, reversed, organPipe, rotated);
    evaluateStdArray(randomizedArray, sorted, reversed, organPipe, rotated);
    evaluateStdVector(randomizedArray, sorted, reversed, organPipe, rotated);

    return 0;
}