Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
run_all_samples.cpp
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2024, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
22#include <iostream>
23#include <string>
24#include <vector>
25#include <map>
26#include <functional>
27#include <memory>
28#include <chrono>
29#include <iomanip>
30
31// Sample function declarations
35
36// Sample registry
38 std::string name;
39 std::string description;
40 std::function<void()> runner;
41};
42
44public:
48
50 std::cout << "=== Database System - All Samples Runner ===" << std::endl;
51 std::cout << "Running " << samples_.size() << " samples..." << std::endl;
52
53 auto start_time = std::chrono::high_resolution_clock::now();
54
55 for (const auto& sample : samples_) {
56 std::cout << "\n" << std::string(60, '=') << std::endl;
57 std::cout << "Running sample: " << sample.name << std::endl;
58 std::cout << "Description: " << sample.description << std::endl;
59 std::cout << std::string(60, '=') << std::endl;
60
61 auto sample_start = std::chrono::high_resolution_clock::now();
62
63 try {
64 sample.runner();
65 } catch (const std::exception& e) {
66 std::cout << "Error running sample '" << sample.name << "': " << e.what() << std::endl;
67 } catch (...) {
68 std::cout << "Unknown error running sample '" << sample.name << "'" << std::endl;
69 }
70
71 auto sample_end = std::chrono::high_resolution_clock::now();
72 auto sample_duration = std::chrono::duration_cast<std::chrono::milliseconds>(sample_end - sample_start);
73
74 std::cout << "\nSample '" << sample.name << "' completed in " << sample_duration.count() << " ms" << std::endl;
75 }
76
77 auto end_time = std::chrono::high_resolution_clock::now();
78 auto total_duration = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
79
80 std::cout << "\n" << std::string(60, '=') << std::endl;
81 std::cout << "All samples completed successfully!" << std::endl;
82 std::cout << "Total execution time: " << total_duration.count() << " ms" << std::endl;
83 std::cout << std::string(60, '=') << std::endl;
84 }
85
86 void run_specific_sample(const std::string& sample_name) {
87 for (const auto& sample : samples_) {
88 if (sample.name == sample_name) {
89 std::cout << "=== Database System - " << sample.name << " Sample ===" << std::endl;
90 std::cout << "Description: " << sample.description << std::endl;
91 std::cout << std::string(50, '-') << std::endl;
92
93 auto start_time = std::chrono::high_resolution_clock::now();
94
95 try {
96 sample.runner();
97 } catch (const std::exception& e) {
98 std::cout << "Error running sample: " << e.what() << std::endl;
99 return;
100 } catch (...) {
101 std::cout << "Unknown error running sample" << std::endl;
102 return;
103 }
104
105 auto end_time = std::chrono::high_resolution_clock::now();
106 auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
107
108 std::cout << "\nSample completed successfully in " << duration.count() << " ms" << std::endl;
109 return;
110 }
111 }
112
113 std::cout << "Sample '" << sample_name << "' not found!" << std::endl;
115 }
116
118 std::cout << "\nAvailable samples:" << std::endl;
119 std::cout << std::string(50, '-') << std::endl;
120
121 for (const auto& sample : samples_) {
122 std::cout << " " << std::setw(20) << std::left << sample.name
123 << " - " << sample.description << std::endl;
124 }
125 std::cout << std::string(50, '-') << std::endl;
126 }
127
128private:
129 std::vector<sample_info> samples_;
130
132 samples_ = {
133 {
134 "basic_usage",
135 "Demonstrates fundamental database operations",
137 },
138 {
139 "postgres_advanced",
140 "Shows PostgreSQL-specific advanced features",
142 },
143 {
144 "connection_pool_demo",
145 "Connection pooling and concurrent access examples",
147 }
148 };
149 }
150};
151
152// Sample implementations (delegated to actual sample programs)
154 std::cout << "Note: This would run the basic usage sample." << std::endl;
155 std::cout << "To run the actual sample, execute: ./basic_usage" << std::endl;
156}
157
159 std::cout << "Note: This would run the PostgreSQL advanced sample." << std::endl;
160 std::cout << "To run the actual sample, execute: ./postgres_advanced" << std::endl;
161}
162
164 std::cout << "Note: This would run the connection pool demo sample." << std::endl;
165 std::cout << "To run the actual sample, execute: ./connection_pool_demo" << std::endl;
166}
167
168void print_usage(const char* program_name) {
169 std::cout << "Database System Samples Runner" << std::endl;
170 std::cout << "Usage: " << program_name << " [sample_name]" << std::endl;
171 std::cout << std::endl;
172 std::cout << "Options:" << std::endl;
173 std::cout << " <no args> Run all samples" << std::endl;
174 std::cout << " sample_name Run specific sample" << std::endl;
175 std::cout << " --list List available samples" << std::endl;
176 std::cout << " --help Show this help message" << std::endl;
177 std::cout << std::endl;
178 std::cout << "Examples:" << std::endl;
179 std::cout << " " << program_name << " # Run all samples" << std::endl;
180 std::cout << " " << program_name << " basic_usage # Run basic usage sample" << std::endl;
181 std::cout << " " << program_name << " postgres_advanced # Run PostgreSQL advanced sample" << std::endl;
182 std::cout << " " << program_name << " --list # List all samples" << std::endl;
183}
184
185int main(int argc, char* argv[]) {
186 sample_runner runner;
187
188 if (argc == 1) {
189 // No arguments - run all samples
190 runner.run_all_samples();
191 } else if (argc == 2) {
192 std::string arg = argv[1];
193
194 if (arg == "--help" || arg == "-h") {
195 print_usage(argv[0]);
196 } else if (arg == "--list" || arg == "-l") {
197 std::cout << "=== Database System - Available Samples ===" << std::endl;
198 runner.list_available_samples();
199 } else {
200 // Run specific sample
201 runner.run_specific_sample(arg);
202 }
203 } else {
204 std::cout << "Error: Too many arguments" << std::endl;
205 print_usage(argv[0]);
206 return 1;
207 }
208
209 return 0;
210}
std::vector< sample_info > samples_
void run_specific_sample(const std::string &sample_name)
void list_available_samples()
void run_basic_usage_sample()
void run_connection_pool_demo_sample()
void run_postgres_advanced_sample()
void print_usage(const char *program_name)
std::function< void()> runner
std::string name
std::string description