diff options
Diffstat (limited to 'clap/parsers.zig')
| -rw-r--r-- | clap/parsers.zig | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/clap/parsers.zig b/clap/parsers.zig index 49b95a9..208a1aa 100644 --- a/clap/parsers.zig +++ b/clap/parsers.zig | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | const std = @import("std"); | 1 | const std = @import("std"); |
| 2 | 2 | ||
| 3 | const fmt = std.fmt; | 3 | const fmt = std.fmt; |
| 4 | const testing = std.testing; | ||
| 4 | 5 | ||
| 5 | pub const default = .{ | 6 | pub const default = .{ |
| 6 | .string = string, | 7 | .string = string, |
| @@ -23,6 +24,10 @@ pub fn string(in: []const u8) error{}![]const u8 { | |||
| 23 | return in; | 24 | return in; |
| 24 | } | 25 | } |
| 25 | 26 | ||
| 27 | test "string" { | ||
| 28 | try testing.expectEqualStrings("aa", try string("aa")); | ||
| 29 | } | ||
| 30 | |||
| 26 | pub fn int(comptime T: type, comptime radix: u8) fn ([]const u8) fmt.ParseIntError!T { | 31 | pub fn int(comptime T: type, comptime radix: u8) fn ([]const u8) fmt.ParseIntError!T { |
| 27 | return struct { | 32 | return struct { |
| 28 | fn parse(in: []const u8) fmt.ParseIntError!T { | 33 | fn parse(in: []const u8) fmt.ParseIntError!T { |
| @@ -31,6 +36,14 @@ pub fn int(comptime T: type, comptime radix: u8) fn ([]const u8) fmt.ParseIntErr | |||
| 31 | }.parse; | 36 | }.parse; |
| 32 | } | 37 | } |
| 33 | 38 | ||
| 39 | test "int" { | ||
| 40 | try testing.expectEqual(@as(u8, 0), try int(u8, 10)("0")); | ||
| 41 | try testing.expectEqual(@as(u8, 1), try int(u8, 10)("1")); | ||
| 42 | try testing.expectEqual(@as(u8, 10), try int(u8, 10)("10")); | ||
| 43 | try testing.expectEqual(@as(u8, 0x10), try int(u8, 0)("0x10")); | ||
| 44 | try testing.expectEqual(@as(u8, 0b10), try int(u8, 0)("0b10")); | ||
| 45 | } | ||
| 46 | |||
| 34 | pub fn float(comptime T: type) fn ([]const u8) fmt.ParseFloatError!T { | 47 | pub fn float(comptime T: type) fn ([]const u8) fmt.ParseFloatError!T { |
| 35 | return struct { | 48 | return struct { |
| 36 | fn parse(in: []const u8) fmt.ParseFloatError!T { | 49 | fn parse(in: []const u8) fmt.ParseFloatError!T { |
| @@ -39,6 +52,30 @@ pub fn float(comptime T: type) fn ([]const u8) fmt.ParseFloatError!T { | |||
| 39 | }.parse; | 52 | }.parse; |
| 40 | } | 53 | } |
| 41 | 54 | ||
| 55 | test "float" { | ||
| 56 | try testing.expectEqual(@as(f32, 0), try float(f32)("0")); | ||
| 57 | } | ||
| 58 | |||
| 59 | pub const EnumError = error{ | ||
| 60 | NameNotPartOfEnum, | ||
| 61 | }; | ||
| 62 | |||
| 63 | pub fn enumeration(comptime T: type) fn ([]const u8) EnumError!T { | ||
| 64 | return struct { | ||
| 65 | fn parse(in: []const u8) EnumError!T { | ||
| 66 | return std.meta.stringToEnum(T, in) orelse error.NameNotPartOfEnum; | ||
| 67 | } | ||
| 68 | }.parse; | ||
| 69 | } | ||
| 70 | |||
| 71 | test "enumeration" { | ||
| 72 | const E = enum { a, b, c }; | ||
| 73 | try testing.expectEqual(E.a, try enumeration(E)("a")); | ||
| 74 | try testing.expectEqual(E.b, try enumeration(E)("b")); | ||
| 75 | try testing.expectEqual(E.c, try enumeration(E)("c")); | ||
| 76 | try testing.expectError(EnumError.NameNotPartOfEnum, enumeration(E)("d")); | ||
| 77 | } | ||
| 78 | |||
| 42 | fn ReturnType(comptime P: type) type { | 79 | fn ReturnType(comptime P: type) type { |
| 43 | return @typeInfo(P).Fn.return_type.?; | 80 | return @typeInfo(P).Fn.return_type.?; |
| 44 | } | 81 | } |