This is an example of documentation generated by ZigDoc, an alternative to Zig's built-in Auto Doc feature. See also examples in other modes/formats. The project being documented here (as the example) is the Zig library itself.
fnexpectEqualEnum(expected: anytype, actual: @TypeOf(expected)) !void {
trytesting.expectEqual(@typeInfo(expected).@"enum", @typeInfo(actual).@"enum");
trytesting.expectEqual(
@typeInfo(expected).@"enum".tag_type,
@typeInfo(actual).@"enum".tag_type,
);
// For comparing decls and fields, we cannot use the meta eql function here
// because the language does not guarantee that the slice pointers for field names
// and decl names will be the same.
comptime {
constexpected_field_names = @typeInfo(expected).@"enum".field_names;
constexpected_field_values = @typeInfo(expected).@"enum".field_values;
constactual_field_names = @typeInfo(actual).@"enum".field_names;
constactual_field_values = @typeInfo(actual).@"enum".field_values;
if (expected_field_names.len != actual_field_names.len) returnerror.FailedTest;
for (expected_field_names, expected_field_values, 0..) |expected_field_name, expected_field_value, i| {
constactual_field_name = actual_field_names[i];
constactual_field_value = actual_field_values[i];
trytesting.expectEqual(expected_field_value, actual_field_value);
trytesting.expectEqualStrings(expected_field_name, actual_field_name);
}
}
comptime {
constexpected_decl_names = @typeInfo(expected).@"enum".decl_names;
constactual_decl_names = @typeInfo(actual).@"enum".decl_names;
if (expected_decl_names.len != actual_decl_names.len) returnerror.FailedTest;
for (expected_decl_names, 0..) |expected_decl_name, i| {
constactual_decl_name = actual_decl_names[i];
trytesting.expectEqualStrings(expected_decl_name, actual_decl_name);
}
}
trytesting.expectEqual(
@typeInfo(expected).@"enum".mode,
@typeInfo(actual).@"enum".mode,
);
}