Solvespace

Форк
0
/
harness.cpp 
78 строк · 2.2 Кб
1
//-----------------------------------------------------------------------------
2
// Our harness for running benchmarks.
3
//
4
// Copyright 2016 whitequark
5
//-----------------------------------------------------------------------------
6
#include "solvespace.h"
7

8
static bool RunBenchmark(std::function<void()> setupFn,
9
                         std::function<bool()> benchFn,
10
                         std::function<void()> teardownFn,
11
                         size_t minIter = 5, double minTime = 5.0) {
12
    // Warmup
13
    setupFn();
14
    if(!benchFn()) {
15
        fprintf(stderr, "Benchmark failed\n");
16
        return false;
17
    }
18
    teardownFn();
19

20
    // Benchmark
21
    size_t iter = 0;
22
    double time = 0.0;
23
    while(iter < minIter || time < minTime) {
24
        setupFn();
25
        auto testStartTime = std::chrono::steady_clock::now();
26
        benchFn();
27
        auto testEndTime = std::chrono::steady_clock::now();
28
        teardownFn();
29

30
        std::chrono::duration<double> testTime = testEndTime - testStartTime;
31
        time += testTime.count();
32
        iter += 1;
33
    }
34

35
    // Report
36
    fprintf(stdout, "Iterations: %zd\n", iter);
37
    fprintf(stdout, "Time:       %.3f s\n", time);
38
    fprintf(stdout, "Per iter.:  %.3f s\n", time / (double)iter);
39

40
    return true;
41
}
42

43
int main(int argc, char **argv) {
44
    std::vector<std::string> args = Platform::InitCli(argc, argv);
45

46
    std::string mode;
47
    Platform::Path filename;
48
    if(args.size() == 3) {
49
        mode = args[1];
50
        filename = Platform::Path::From(args[2]);
51
    } else {
52
        fprintf(stderr, "Usage: %s [mode] [filename]\n", args[0].c_str());
53
        fprintf(stderr, "Mode can be one of: load.\n");
54
        return 1;
55
    }
56

57
    bool result = false;
58
    if(mode == "load") {
59
        result = RunBenchmark(
60
            [] {
61
                SS.Init();
62
            },
63
            [&] {
64
                if(!SS.LoadFromFile(filename))
65
                    return false;
66
                SS.AfterNewFile();
67
                return true;
68
            },
69
            [] {
70
                SK.Clear();
71
                SS.Clear();
72
            });
73
    } else {
74
        fprintf(stderr, "Unknown mode \"%s\"\n", mode.c_str());
75
    }
76

77
    return (result == true ? 0 : 1);
78
}
79

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.