From 8972a77792ad14402bd42627fd82b930486ed276 Mon Sep 17 00:00:00 2001 From: "Jeffrey C. Ollie" Date: Sun, 30 Aug 2026 00:54:28 -0500 Subject: [PATCH] add doctests to enums.zig Pins down Exclude's backward-compatible value ordering, MaildirFlag's character values, the generateEnum name-to-constant correspondence for Sort and QuerySyntax, and the status conversion. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_017i7R7ReKJAHGQpitxGXqrb --- src/enums.zig | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/enums.zig b/src/enums.zig index 4891c2d..47fb937 100644 --- a/src/enums.zig +++ b/src/enums.zig @@ -132,6 +132,15 @@ pub const Decrypt = enum(u2) { /// FALSE/TRUE options correspond to the new `.flag`/`.true` options. pub const Exclude = generateEnum("NOTMUCH_EXCLUDE_", &.{}); +test Exclude { + // The backward-compatible ordering: the old FALSE/TRUE values 0 and 1 + // correspond to .flag and .true, not to .false and .true. + try std.testing.expectEqual(0, @intFromEnum(Exclude.flag)); + try std.testing.expectEqual(1, @intFromEnum(Exclude.true)); + try std.testing.expectEqual(2, @intFromEnum(Exclude.false)); + try std.testing.expectEqual(3, @intFromEnum(Exclude.all)); +} + pub const MessageFlag = enum(u2) { match = c.NOTMUCH_MESSAGE_FLAG_MATCH, excluded = c.NOTMUCH_MESSAGE_FLAG_EXCLUDED, @@ -163,12 +172,33 @@ pub const MaildirFlag = enum(u8) { S = 'S', }; +test MaildirFlag { + // The enum values are the flag characters from the maildir ":2," info + // part of a filename. + try std.testing.expectEqual('F', @intFromEnum(MaildirFlag.F)); + try std.testing.expectEqual('S', @intFromEnum(MaildirFlag.S)); +} + /// query syntax pub const QuerySyntax = generateEnum("NOTMUCH_QUERY_SYNTAX_", &.{}); +test QuerySyntax { + // Generated from the C constants, with lowercased field names. + try std.testing.expectEqual(c.NOTMUCH_QUERY_SYNTAX_XAPIAN, @intFromEnum(QuerySyntax.xapian)); + try std.testing.expectEqual(c.NOTMUCH_QUERY_SYNTAX_SEXP, @intFromEnum(QuerySyntax.sexp)); +} + /// Sort values for notmuch_query_set_sort. pub const Sort = generateEnum("NOTMUCH_SORT_", &.{}); +test Sort { + // Generated from the C constants, with lowercased field names. + try std.testing.expectEqual(c.NOTMUCH_SORT_OLDEST_FIRST, @intFromEnum(Sort.oldest_first)); + try std.testing.expectEqual(c.NOTMUCH_SORT_NEWEST_FIRST, @intFromEnum(Sort.newest_first)); + try std.testing.expectEqual(c.NOTMUCH_SORT_MESSAGE_ID, @intFromEnum(Sort.message_id)); + try std.testing.expectEqual(c.NOTMUCH_SORT_UNSORTED, @intFromEnum(Sort.unsorted)); +} + /// Status codes used for the return values of most functions. pub const Status = enum(u5) { /// No error occurred. @@ -269,3 +299,9 @@ pub const Status = enum(u5) { pub fn status(rc: c.notmuch_status_t) Status { return .init(rc); } + +test status { + try std.testing.expectEqual(Status.success, status(c.NOTMUCH_STATUS_SUCCESS)); + try std.testing.expectEqual(Status.read_only_database, status(c.NOTMUCH_STATUS_READ_ONLY_DATABASE)); + try std.testing.expectEqual(Status.closed_database, status(c.NOTMUCH_STATUS_CLOSED_DATABASE)); +} -- 2.51.2