more tests
This commit is contained in:
parent
45f03ca239
commit
82e3ab9f2e
@ -956,7 +956,7 @@ pub fn indexToKey(ip: InternPool, index: Index) Key {
|
|||||||
.limbs = ip.extraData([]const std.math.big.Limb, data),
|
.limbs = ip.extraData([]const std.math.big.Limb, data),
|
||||||
} },
|
} },
|
||||||
.int_big_negative => .{ .int_big_value = .{
|
.int_big_negative => .{ .int_big_value = .{
|
||||||
.positive = true,
|
.positive = false,
|
||||||
.limbs = ip.extraData([]const std.math.big.Limb, data),
|
.limbs = ip.extraData([]const std.math.big.Limb, data),
|
||||||
} },
|
} },
|
||||||
.float_f16 => .{ .float_16_value = @bitCast(f16, @intCast(u16, data)) },
|
.float_f16 => .{ .float_16_value = @bitCast(f16, @intCast(u16, data)) },
|
||||||
@ -2319,6 +2319,34 @@ fn testExpectFmtValue(ip: *const InternPool, val: Index, ty: Index, expected: []
|
|||||||
try std.testing.expectFmt(expected, "{}", .{val.fmtValue(ty, ip)});
|
try std.testing.expectFmt(expected, "{}", .{val.fmtValue(ty, ip)});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "simple types" {
|
||||||
|
const gpa = std.testing.allocator;
|
||||||
|
|
||||||
|
var ip: InternPool = .{};
|
||||||
|
defer ip.deinit(gpa);
|
||||||
|
|
||||||
|
const null_type = try ip.get(gpa, .{ .simple = .null_type });
|
||||||
|
const undefined_type = try ip.get(gpa, .{ .simple = .undefined_type });
|
||||||
|
const enum_literal_type = try ip.get(gpa, .{ .simple = .enum_literal_type });
|
||||||
|
const undefined_value = try ip.get(gpa, .{ .simple = .undefined_value });
|
||||||
|
const void_value = try ip.get(gpa, .{ .simple = .void_value });
|
||||||
|
const unreachable_value = try ip.get(gpa, .{ .simple = .unreachable_value });
|
||||||
|
const null_value = try ip.get(gpa, .{ .simple = .null_value });
|
||||||
|
const bool_true = try ip.get(gpa, .{ .simple = .bool_true });
|
||||||
|
const bool_false = try ip.get(gpa, .{ .simple = .bool_false });
|
||||||
|
|
||||||
|
try testExpectFmtType(&ip, null_type, "@TypeOf(null)");
|
||||||
|
try testExpectFmtType(&ip, undefined_type, "@TypeOf(undefined)");
|
||||||
|
try testExpectFmtType(&ip, enum_literal_type, "@TypeOf(.enum_literal)");
|
||||||
|
|
||||||
|
try testExpectFmtValue(&ip, undefined_value, undefined, "@Type(.Undefined)");
|
||||||
|
try testExpectFmtValue(&ip, void_value, undefined, "void");
|
||||||
|
try testExpectFmtValue(&ip, unreachable_value, undefined, "unreachable");
|
||||||
|
try testExpectFmtValue(&ip, null_value, undefined, "null");
|
||||||
|
try testExpectFmtValue(&ip, bool_true, undefined, "true");
|
||||||
|
try testExpectFmtValue(&ip, bool_false, undefined, "false");
|
||||||
|
}
|
||||||
|
|
||||||
test "int type" {
|
test "int type" {
|
||||||
const gpa = std.testing.allocator;
|
const gpa = std.testing.allocator;
|
||||||
|
|
||||||
@ -2371,6 +2399,26 @@ test "int value" {
|
|||||||
try testExpectFmtValue(&ip, i64_max_value, undefined, "9223372036854775807");
|
try testExpectFmtValue(&ip, i64_max_value, undefined, "9223372036854775807");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "big int value" {
|
||||||
|
const gpa = std.testing.allocator;
|
||||||
|
|
||||||
|
var ip: InternPool = .{};
|
||||||
|
defer ip.deinit(gpa);
|
||||||
|
|
||||||
|
var result = try std.math.big.int.Managed.init(gpa);
|
||||||
|
defer result.deinit();
|
||||||
|
var a = try std.math.big.int.Managed.initSet(gpa, 2);
|
||||||
|
defer a.deinit();
|
||||||
|
|
||||||
|
try result.pow(&a, 128);
|
||||||
|
|
||||||
|
const positive_big_int_value = try ip.get(gpa, .{ .int_big_value = result.toConst() });
|
||||||
|
const negative_big_int_value = try ip.get(gpa, .{ .int_big_value = result.toConst().negate() });
|
||||||
|
|
||||||
|
try testExpectFmtValue(&ip, positive_big_int_value, undefined, "340282366920938463463374607431768211456");
|
||||||
|
try testExpectFmtValue(&ip, negative_big_int_value, undefined, "-340282366920938463463374607431768211456");
|
||||||
|
}
|
||||||
|
|
||||||
test "float type" {
|
test "float type" {
|
||||||
const gpa = std.testing.allocator;
|
const gpa = std.testing.allocator;
|
||||||
|
|
||||||
@ -2401,6 +2449,30 @@ test "float type" {
|
|||||||
try testExpectFmtType(&ip, f128_type, "f128");
|
try testExpectFmtType(&ip, f128_type, "f128");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "float value" {
|
||||||
|
const gpa = std.testing.allocator;
|
||||||
|
|
||||||
|
var ip: InternPool = .{};
|
||||||
|
defer ip.deinit(gpa);
|
||||||
|
|
||||||
|
const f16_value = try ip.get(gpa, .{ .float_16_value = 0.25 });
|
||||||
|
const f32_value = try ip.get(gpa, .{ .float_32_value = 0.5 });
|
||||||
|
const f64_value = try ip.get(gpa, .{ .float_64_value = 1.0 });
|
||||||
|
const f80_value = try ip.get(gpa, .{ .float_80_value = 2.0 });
|
||||||
|
const f128_value = try ip.get(gpa, .{ .float_128_value = 2.75 });
|
||||||
|
|
||||||
|
try std.testing.expect(f16_value != f32_value);
|
||||||
|
try std.testing.expect(f32_value != f64_value);
|
||||||
|
try std.testing.expect(f64_value != f80_value);
|
||||||
|
try std.testing.expect(f80_value != f128_value);
|
||||||
|
|
||||||
|
try testExpectFmtValue(&ip, f16_value, undefined, "0.25");
|
||||||
|
try testExpectFmtValue(&ip, f32_value, undefined, "0.5");
|
||||||
|
try testExpectFmtValue(&ip, f64_value, undefined, "1");
|
||||||
|
try testExpectFmtValue(&ip, f80_value, undefined, "2");
|
||||||
|
try testExpectFmtValue(&ip, f128_value, undefined, "2.75");
|
||||||
|
}
|
||||||
|
|
||||||
test "pointer type" {
|
test "pointer type" {
|
||||||
const gpa = std.testing.allocator;
|
const gpa = std.testing.allocator;
|
||||||
|
|
||||||
@ -2633,14 +2705,29 @@ test "function type" {
|
|||||||
} });
|
} });
|
||||||
|
|
||||||
var param2 = Function.Param{ .is_comptime = true, .arg_type = type_type };
|
var param2 = Function.Param{ .is_comptime = true, .arg_type = type_type };
|
||||||
var param3 = Function.Param{ .arg_type = i32_type };
|
var param3 = Function.Param{ .is_noalias = true, .arg_type = i32_type };
|
||||||
const @"fn(comptime type, i32) type" = try ip.get(gpa, .{ .function_type = .{
|
const @"fn(comptime type, noalias i32) type" = try ip.get(gpa, .{ .function_type = .{
|
||||||
.return_type = type_type,
|
.return_type = type_type,
|
||||||
.args = &.{ param2, param3 },
|
.args = &.{ param2, param3 },
|
||||||
} });
|
} });
|
||||||
|
|
||||||
|
const @"fn(i32, ...) type" = try ip.get(gpa, .{ .function_type = .{
|
||||||
|
.is_var_args = true,
|
||||||
|
.return_type = type_type,
|
||||||
|
.args = &.{param1},
|
||||||
|
} });
|
||||||
|
|
||||||
|
const @"fn() callconv(.C) align(4) type" = try ip.get(gpa, .{ .function_type = .{
|
||||||
|
.calling_convention = .C,
|
||||||
|
.alignment = 4,
|
||||||
|
.return_type = type_type,
|
||||||
|
.args = &.{},
|
||||||
|
} });
|
||||||
|
|
||||||
try testExpectFmtType(&ip, @"fn(i32) bool", "fn(i32) bool");
|
try testExpectFmtType(&ip, @"fn(i32) bool", "fn(i32) bool");
|
||||||
try testExpectFmtType(&ip, @"fn(comptime type, i32) type", "fn(comptime type, i32) type");
|
try testExpectFmtType(&ip, @"fn(comptime type, noalias i32) type", "fn(comptime type, noalias i32) type");
|
||||||
|
try testExpectFmtType(&ip, @"fn(i32, ...) type", "fn(i32, ...) type");
|
||||||
|
try testExpectFmtType(&ip, @"fn() callconv(.C) align(4) type", "fn() callconv(.C) align(4) type");
|
||||||
}
|
}
|
||||||
|
|
||||||
test "anyframe type" {
|
test "anyframe type" {
|
||||||
@ -2685,6 +2772,40 @@ test "vector type" {
|
|||||||
try testExpectFmtType(&ip, @"@Vector(2,bool)", "@Vector(2,bool)");
|
try testExpectFmtType(&ip, @"@Vector(2,bool)", "@Vector(2,bool)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "bytes value" {
|
||||||
|
if (true) return error.SkipZigTest; // TODO
|
||||||
|
|
||||||
|
const gpa = std.testing.allocator;
|
||||||
|
|
||||||
|
var ip: InternPool = .{};
|
||||||
|
defer ip.deinit(gpa);
|
||||||
|
|
||||||
|
var str1: [43]u8 = "https://www.youtube.com/watch?v=dQw4w9WgXcQ".*;
|
||||||
|
|
||||||
|
const bytes_value1 = try ip.get(gpa, .{ .bytes = &str1 });
|
||||||
|
@memset(&str1, 0, str1.len);
|
||||||
|
|
||||||
|
var str2: [43]u8 = "https://www.youtube.com/watch?v=dQw4w9WgXcQ".*;
|
||||||
|
@memset(&str2, 0, str2.len);
|
||||||
|
|
||||||
|
const bytes_value2 = try ip.get(gpa, .{ .bytes = &str2 });
|
||||||
|
|
||||||
|
var str3: [26]u8 = "https://www.duckduckgo.com".*;
|
||||||
|
const bytes_value3 = try ip.get(gpa, .{ .bytes = &str3 });
|
||||||
|
@memset(&str3, 0, str3.len);
|
||||||
|
|
||||||
|
try std.testing.expect(bytes_value1 == bytes_value2);
|
||||||
|
try std.testing.expect(bytes_value2 != bytes_value3);
|
||||||
|
|
||||||
|
try std.testing.expect(str1 != ip.indexToKey(bytes_value1).bytes);
|
||||||
|
try std.testing.expect(str2 != ip.indexToKey(bytes_value2).bytes);
|
||||||
|
try std.testing.expect(str3 != ip.indexToKey(bytes_value3).bytes);
|
||||||
|
|
||||||
|
try std.testing.expectEqualStrings("https://www.youtube.com/watch?v=dQw4w9WgXcQ", ip.indexToKey(bytes_value1).bytes);
|
||||||
|
try std.testing.expectEqualStrings("https://www.youtube.com/watch?v=dQw4w9WgXcQ", ip.indexToKey(bytes_value2).bytes);
|
||||||
|
try std.testing.expectEqualStrings("https://www.duckduckgo.com", ip.indexToKey(bytes_value3).bytes);
|
||||||
|
}
|
||||||
|
|
||||||
test "resolvePeerTypes" {
|
test "resolvePeerTypes" {
|
||||||
const gpa = std.testing.allocator;
|
const gpa = std.testing.allocator;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user