Skip to content

Commit 40aba6c

Browse files
committed
chore: wip
1 parent a44f03f commit 40aba6c

File tree

4 files changed

+920
-6
lines changed

4 files changed

+920
-6
lines changed

examples/progress_examples.zig

Lines changed: 367 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,367 @@
1+
const std = @import("std");
2+
const zig_test = @import("zig-test");
3+
4+
/// Example 1: Basic Spinner
5+
pub fn example_basic_spinner() !void {
6+
const allocator = std.heap.page_allocator;
7+
8+
std.debug.print("\n=== Example 1: Basic Spinner ===\n", .{});
9+
10+
var spinner = try zig_test.Spinner.init(allocator, "Loading data...", .dots);
11+
defer spinner.deinit();
12+
13+
try spinner.start();
14+
std.Thread.sleep(2000 * std.time.ns_per_ms);
15+
spinner.succeed("Data loaded successfully");
16+
}
17+
18+
/// Example 2: Different Spinner Styles
19+
pub fn example_spinner_styles() !void {
20+
const allocator = std.heap.page_allocator;
21+
22+
std.debug.print("\n=== Example 2: Spinner Styles ===\n", .{});
23+
24+
const styles = [_]zig_test.SpinnerStyle{
25+
.dots,
26+
.line,
27+
.arc,
28+
.circle,
29+
.square,
30+
.arrow,
31+
.bounce,
32+
};
33+
34+
inline for (styles) |style| {
35+
const style_name = @tagName(style);
36+
const message = try std.fmt.allocPrint(allocator, "Testing {s} spinner...", .{style_name});
37+
defer allocator.free(message);
38+
39+
var spinner = try zig_test.Spinner.init(allocator, message, style);
40+
defer spinner.deinit();
41+
42+
try spinner.start();
43+
std.Thread.sleep(1000 * std.time.ns_per_ms);
44+
spinner.succeed(try std.fmt.allocPrint(allocator, "{s} style complete", .{style_name}));
45+
allocator.free(try std.fmt.allocPrint(allocator, "{s} style complete", .{style_name}));
46+
}
47+
}
48+
49+
/// Example 3: Spinner with different outcomes
50+
pub fn example_spinner_outcomes() !void {
51+
const allocator = std.heap.page_allocator;
52+
53+
std.debug.print("\n=== Example 3: Spinner Outcomes ===\n", .{});
54+
55+
// Success
56+
var spinner1 = try zig_test.Spinner.init(allocator, "Operation 1...", .dots);
57+
defer spinner1.deinit();
58+
try spinner1.start();
59+
std.Thread.sleep(500 * std.time.ns_per_ms);
60+
spinner1.succeed("Operation 1 succeeded");
61+
62+
// Failure
63+
var spinner2 = try zig_test.Spinner.init(allocator, "Operation 2...", .dots);
64+
defer spinner2.deinit();
65+
try spinner2.start();
66+
std.Thread.sleep(500 * std.time.ns_per_ms);
67+
spinner2.fail("Operation 2 failed");
68+
69+
// Warning
70+
var spinner3 = try zig_test.Spinner.init(allocator, "Operation 3...", .dots);
71+
defer spinner3.deinit();
72+
try spinner3.start();
73+
std.Thread.sleep(500 * std.time.ns_per_ms);
74+
spinner3.warn("Operation 3 has warnings");
75+
76+
// Info
77+
var spinner4 = try zig_test.Spinner.init(allocator, "Operation 4...", .dots);
78+
defer spinner4.deinit();
79+
try spinner4.start();
80+
std.Thread.sleep(500 * std.time.ns_per_ms);
81+
spinner4.info("Operation 4 information");
82+
}
83+
84+
/// Example 4: Basic Progress Bar
85+
pub fn example_basic_progress_bar() !void {
86+
const allocator = std.heap.page_allocator;
87+
88+
std.debug.print("\n=== Example 4: Basic Progress Bar ===\n", .{});
89+
90+
var bar = try zig_test.ProgressBar.init(allocator, 100, .{
91+
.message = "Processing",
92+
.width = 40,
93+
});
94+
defer bar.deinit();
95+
96+
var i: usize = 0;
97+
while (i <= 100) : (i += 5) {
98+
bar.update(i);
99+
std.Thread.sleep(100 * std.time.ns_per_ms);
100+
}
101+
bar.finish();
102+
}
103+
104+
/// Example 5: Progress Bar Styles
105+
pub fn example_progress_bar_styles() !void {
106+
const allocator = std.heap.page_allocator;
107+
108+
std.debug.print("\n=== Example 5: Progress Bar Styles ===\n", .{});
109+
110+
const styles = [_]zig_test.ProgressBarStyle{
111+
.classic,
112+
.blocks,
113+
.arrows,
114+
.dots,
115+
};
116+
117+
inline for (styles) |style| {
118+
const style_name = @tagName(style);
119+
const message = try std.fmt.allocPrint(allocator, "{s} style", .{style_name});
120+
defer allocator.free(message);
121+
122+
var bar = try zig_test.ProgressBar.init(allocator, 50, .{
123+
.message = message,
124+
.style = style,
125+
.width = 30,
126+
});
127+
defer bar.deinit();
128+
129+
var i: usize = 0;
130+
while (i <= 50) : (i += 5) {
131+
bar.update(i);
132+
std.Thread.sleep(50 * std.time.ns_per_ms);
133+
}
134+
bar.finish();
135+
}
136+
}
137+
138+
/// Example 6: Progress Bar with Custom Options
139+
pub fn example_progress_bar_options() !void {
140+
const allocator = std.heap.page_allocator;
141+
142+
std.debug.print("\n=== Example 6: Progress Bar Options ===\n", .{});
143+
144+
// Without percentage
145+
var bar1 = try zig_test.ProgressBar.init(allocator, 50, .{
146+
.message = "No percentage",
147+
.show_percentage = false,
148+
});
149+
defer bar1.deinit();
150+
151+
var i: usize = 0;
152+
while (i <= 50) : (i += 10) {
153+
bar1.update(i);
154+
std.Thread.sleep(100 * std.time.ns_per_ms);
155+
}
156+
bar1.finish();
157+
158+
// Without count
159+
var bar2 = try zig_test.ProgressBar.init(allocator, 50, .{
160+
.message = "No count",
161+
.show_count = false,
162+
});
163+
defer bar2.deinit();
164+
165+
i = 0;
166+
while (i <= 50) : (i += 10) {
167+
bar2.update(i);
168+
std.Thread.sleep(100 * std.time.ns_per_ms);
169+
}
170+
bar2.finish();
171+
172+
// Minimal
173+
var bar3 = try zig_test.ProgressBar.init(allocator, 50, .{
174+
.message = "Minimal",
175+
.show_percentage = false,
176+
.show_count = false,
177+
});
178+
defer bar3.deinit();
179+
180+
i = 0;
181+
while (i <= 50) : (i += 10) {
182+
bar3.update(i);
183+
std.Thread.sleep(100 * std.time.ns_per_ms);
184+
}
185+
bar3.finish();
186+
}
187+
188+
/// Example 7: Test Progress Tracker
189+
pub fn example_test_progress() !void {
190+
const allocator = std.heap.page_allocator;
191+
192+
std.debug.print("\n=== Example 7: Test Progress Tracker ===\n", .{});
193+
194+
var progress = try zig_test.TestProgress.init(allocator, 10, .{
195+
.use_spinner = true,
196+
.use_progress_bar = true,
197+
});
198+
defer progress.deinit();
199+
200+
// Simulate running 10 tests
201+
const test_names = [_][]const u8{
202+
"test_addition",
203+
"test_subtraction",
204+
"test_multiplication",
205+
"test_division",
206+
"test_modulo",
207+
"test_power",
208+
"test_square_root",
209+
"test_absolute",
210+
"test_min",
211+
"test_max",
212+
};
213+
214+
for (test_names, 0..) |name, i| {
215+
try progress.startTest(name);
216+
std.Thread.sleep(200 * std.time.ns_per_ms);
217+
218+
// Simulate different outcomes
219+
const passed = i != 3; // Fail the 4th test
220+
const skipped = i == 5; // Skip the 6th test
221+
progress.completeTest(passed, skipped);
222+
}
223+
224+
progress.printSummary();
225+
}
226+
227+
/// Example 8: Test Progress without Visual Indicators
228+
pub fn example_test_progress_minimal() !void {
229+
const allocator = std.heap.page_allocator;
230+
231+
std.debug.print("\n=== Example 8: Minimal Test Progress ===\n", .{});
232+
233+
var progress = try zig_test.TestProgress.init(allocator, 5, .{
234+
.use_spinner = false,
235+
.use_progress_bar = false,
236+
});
237+
defer progress.deinit();
238+
239+
var i: usize = 0;
240+
while (i < 5) : (i += 1) {
241+
const name = try std.fmt.allocPrint(allocator, "test_{d}", .{i});
242+
defer allocator.free(name);
243+
244+
try progress.startTest(name);
245+
std.Thread.sleep(100 * std.time.ns_per_ms);
246+
progress.completeTest(true, false);
247+
}
248+
249+
progress.printSummary();
250+
}
251+
252+
/// Example 9: Multi-Spinner for Parallel Operations
253+
pub fn example_multi_spinner() !void {
254+
const allocator = std.heap.page_allocator;
255+
256+
std.debug.print("\n=== Example 9: Multi-Spinner ===\n", .{});
257+
258+
var multi = zig_test.MultiSpinner.init(allocator);
259+
defer multi.deinit();
260+
261+
// Add multiple spinners
262+
try multi.add("task1", "Processing task 1...");
263+
try multi.add("task2", "Processing task 2...");
264+
try multi.add("task3", "Processing task 3...");
265+
266+
std.Thread.sleep(1000 * std.time.ns_per_ms);
267+
268+
// Complete tasks at different times
269+
multi.succeed("task1", "Task 1 complete");
270+
std.Thread.sleep(500 * std.time.ns_per_ms);
271+
272+
multi.fail("task2", "Task 2 failed");
273+
std.Thread.sleep(500 * std.time.ns_per_ms);
274+
275+
multi.succeed("task3", "Task 3 complete");
276+
}
277+
278+
/// Example 10: Progress Bar with Increment
279+
pub fn example_progress_increment() !void {
280+
const allocator = std.heap.page_allocator;
281+
282+
std.debug.print("\n=== Example 10: Progress Bar Increment ===\n", .{});
283+
284+
var bar = try zig_test.ProgressBar.init(allocator, 20, .{
285+
.message = "Incremental progress",
286+
});
287+
defer bar.deinit();
288+
289+
var i: usize = 0;
290+
while (i < 20) : (i += 1) {
291+
bar.increment();
292+
std.Thread.sleep(100 * std.time.ns_per_ms);
293+
}
294+
bar.finish();
295+
}
296+
297+
/// Example 11: Long Running Operation with Spinner Update
298+
pub fn example_spinner_update() !void {
299+
const allocator = std.heap.page_allocator;
300+
301+
std.debug.print("\n=== Example 11: Spinner with Updates ===\n", .{});
302+
303+
var spinner = try zig_test.Spinner.init(allocator, "Step 1: Initializing...", .dots);
304+
defer spinner.deinit();
305+
306+
try spinner.start();
307+
std.Thread.sleep(1000 * std.time.ns_per_ms);
308+
309+
try spinner.updateMessage("Step 2: Processing data...");
310+
std.Thread.sleep(1000 * std.time.ns_per_ms);
311+
312+
try spinner.updateMessage("Step 3: Finalizing...");
313+
std.Thread.sleep(1000 * std.time.ns_per_ms);
314+
315+
spinner.succeed("All steps completed");
316+
}
317+
318+
/// Example 12: Combined Progress Indicators
319+
pub fn example_combined_progress() !void {
320+
const allocator = std.heap.page_allocator;
321+
322+
std.debug.print("\n=== Example 12: Combined Indicators ===\n", .{});
323+
324+
// Use spinner for overall operation
325+
var spinner = try zig_test.Spinner.init(allocator, "Starting batch process...", .dots);
326+
defer spinner.deinit();
327+
try spinner.start();
328+
std.Thread.sleep(500 * std.time.ns_per_ms);
329+
spinner.stop();
330+
331+
// Use progress bar for sub-tasks
332+
var bar = try zig_test.ProgressBar.init(allocator, 100, .{
333+
.message = "Batch processing",
334+
});
335+
defer bar.deinit();
336+
337+
var i: usize = 0;
338+
while (i <= 100) : (i += 10) {
339+
bar.update(i);
340+
std.Thread.sleep(200 * std.time.ns_per_ms);
341+
}
342+
bar.finish();
343+
344+
// Final success
345+
var final_spinner = try zig_test.Spinner.init(allocator, "Completing...", .dots);
346+
defer final_spinner.deinit();
347+
try final_spinner.start();
348+
std.Thread.sleep(500 * std.time.ns_per_ms);
349+
final_spinner.succeed("Batch process completed successfully");
350+
}
351+
352+
pub fn main() !void {
353+
try example_basic_spinner();
354+
try example_spinner_styles();
355+
try example_spinner_outcomes();
356+
try example_basic_progress_bar();
357+
try example_progress_bar_styles();
358+
try example_progress_bar_options();
359+
try example_test_progress();
360+
try example_test_progress_minimal();
361+
try example_multi_spinner();
362+
try example_progress_increment();
363+
try example_spinner_update();
364+
try example_combined_progress();
365+
366+
std.debug.print("\n=== All Progress Examples Complete! ===\n", .{});
367+
}

0 commit comments

Comments
 (0)