1
0
Fork 0
zar/deps/time/example.zig

112 lines
3.7 KiB
Zig
Raw Permalink Normal View History

2021-12-21 12:40:58 +00:00
const std = @import("std");
const warn = std.debug.warn;
const time = @import("./src/time.zig");
const Duration = time.Duration;
test "now" {
var local = time.Location.getLocal();
var now = time.now(&local);
warn("\n today's date {}", .{now.date()});
warn("\n today's time {}", .{now.clock()});
warn("\n local timezone detail {}\n", .{now.zone()});
// $ zig test example.zig
// Test 1/1 now...
// today's date DateDetail{ .year = 2018, .month = Month.November, .day = 25, .yday = 328 }
// today's time Clock{ .hour = 11, .min = 17, .sec = 16 }
// local timezone detail ZoneDetail{ .name = EAT, .offset = 10800 }
// OK
// All tests passed.
}
const formatTest = struct {
name: []const u8,
format: []const u8,
fn init(name: []const u8, format: []const u8) formatTest {
return formatTest{ .name = name, .format = format };
}
};
const format_tests = [_]formatTest{
formatTest.init("ANSIC", time.ANSIC),
formatTest.init("UnixDate", time.UnixDate),
formatTest.init("RubyDate", time.RubyDate),
formatTest.init("RFC822", time.RFC822),
formatTest.init("RFC850", time.RFC850),
formatTest.init("RFC1123", time.RFC1123),
formatTest.init("RFC1123Z", time.RFC1123Z),
formatTest.init("RFC3339", time.RFC3339),
formatTest.init("RFC3339Nano", time.RFC3339Nano),
formatTest.init("Kitchen", time.Kitchen),
formatTest.init("am/pm", "3pm"),
formatTest.init("AM/PM", "3PM"),
formatTest.init("two-digit year", "06 01 02"),
// Three-letter months and days must not be followed by lower-case letter.
formatTest.init("Janet", "Hi Janet, the Month is January"),
// Time stamps, Fractional seconds.
formatTest.init("Stamp", time.Stamp),
formatTest.init("StampMilli", time.StampMilli),
formatTest.init("StampMicro", time.StampMicro),
formatTest.init("StampNano", time.StampNano),
};
test "time.format" {
var local = time.Location.getLocal();
var ts = time.now(&local);
var buf = std.ArrayList(u8).init(std.testing.allocator);
defer buf.deinit();
warn("\n", .{});
for (format_tests) |value| {
try buf.resize(0);
try ts.formatBuffer(&buf, value.format);
warn("{}: {}\n", .{ value.name, buf.items });
}
// Test 2/2 time.format...
// ANSIC: Thu Nov 29 05:46:03 2018
// UnixDate: Thu Nov 29 05:46:03 EAT 2018
// RubyDate: Thu Nov 29 05:46:03 +0300 2018
// RFC822: 29 Nov 18 05:46 EAT
// RFC850: Thursday, 29-Nov-18 05:46:03 EAT
// RFC1123: Thu, 29 Nov 2018 05:46:03 EAT
// RFC1123Z: Thu, 29 Nov 2018 05:46:03 +0300
// RFC3339: 2018-11-29T05:46:03+03:00
// RFC3339Nano: 2018-11-29T05:46:03.000024416+03:00
// Kitchen: 5:46AM
// am/pm: 5am
// AM/PM: 5AM
// two-digit year: 18 11 29
// Janet: Hi Janet, the Month is November
// Stamp: Nov 29 05:46:03
// StampMilli: Nov 29 05:46:03.000
// StampMicro: Nov 29 05:46:03.000024
// StampNano: Nov 29 05:46:03.000024416
// OK
// All tests passed.
}
test "durations" {
// print w0ne hour and 10 secods
const hour = Duration.Hour.value;
const minute = Duration.Minute.value;
const second = Duration.Second.value;
var d = Duration.init(hour + minute * 4 + second * 10);
warn("duration is {} \n", .{d.string()});
}
test "addDate" {
var local = time.Location.getLocal();
var ts = time.now(&local);
var buf = std.ArrayList(u8).init(std.testing.allocator);
defer buf.deinit();
try ts.string(&buf);
warn("\ncurrent time is {}\n", .{buf.items});
// let's add 1 year
ts = ts.addDate(1, 0, 0);
try ts.string(&buf);
warn("this time next year is {}\n", .{buf.items});
}