Browse code

Add benchmarking

Robert Cranston authored on 21/05/2025 15:09:29
Showing 3 changed files

... ...
@@ -2,5 +2,6 @@ CXXFLAGS += -std=c++11
2 2
 CXXFLAGS += -Wall -Wextra -Wpedantic
3 3
 CXXFLAGS += -Wconversion
4 4
 # CXXFLAGS += -Wsign-conversion
5
+CXXFLAGS += -O3
5 6
 
6 7
 maze:
... ...
@@ -10,7 +10,7 @@ Features:
10 10
     -   Hunt And Kill
11 11
         -   Handles mazes of any size
12 12
         -   Random with seed (time in seconds since the epoch by default)
13
-        -   Fairly naive
13
+        -   Fairly slow (1000*1000 cells in ~4000ms)
14 14
 
15 15
 [`cxx-maze`]: https://git.rcrnstn.net/rcrnstn/cxx-maze
16 16
 
... ...
@@ -18,6 +18,8 @@ Features:
18 18
 
19 19
 ```
20 20
 $ make
21
+$ ./maze dummy
22
+3844ms
21 23
 $ ./maze
22 24
 ██  ████████████████████████████████████████████████████████████████████████████
23 25
 ██  ██                          ██              ██      ██          ██      ████
... ...
@@ -106,13 +106,23 @@ Maze hunt_and_kill(int w, int h, unsigned seed, C callback = [](Maze &){})
106 106
     return maze;
107 107
 }
108 108
 
109
-int main()
109
+int main(int argc, char const * [])
110 110
 {
111 111
     using namespace std::chrono;
112
-    auto seed = (unsigned)std::time(nullptr);
113
-    auto maze = hunt_and_kill(80/2, 24-1, seed, [](Maze & maze) {
112
+    if (argc == 1)
113
+    {
114
+        auto seed = (unsigned)std::time(nullptr);
115
+        auto maze = hunt_and_kill(80/2, 24-1, seed, [](Maze & maze) {
116
+            maze.print();
117
+            std::this_thread::sleep_for(milliseconds(20));
118
+        });
114 119
         maze.print();
115
-        std::this_thread::sleep_for(milliseconds(20));
116
-    });
117
-    maze.print();
120
+    }
121
+    else
122
+    {
123
+        auto const t1 = steady_clock::now();
124
+        hunt_and_kill(1000, 1000, 0);
125
+        auto const t2 = steady_clock::now();
126
+        std::cout << duration_cast<milliseconds>(t2 - t1).count() << "ms\n";
127
+    }
118 128
 }