| ... | @@ -5,6 +5,7 @@ const assert = std.debug.assert; | ... | @@ -5,6 +5,7 @@ const assert = std.debug.assert; |
| 5 | const math = std.math; | 5 | const math = std.math; |
| 6 | const meta = std.meta; | 6 | const meta = std.meta; |
| 7 | const trait = meta.trait; | 7 | const trait = meta.trait; |
| | 8 | const testing = std.testing; |
| 8 | | 9 | |
| 9 | pub const Packing = enum { | 10 | pub const Packing = enum { |
| 10 | /// Pack data to byte alignment | 11 | /// Pack data to byte alignment |
| ... | @@ -273,7 +274,7 @@ pub fn Serializer(comptime endian: builtin.Endian, comptime packing: Packing, co | ... | @@ -273,7 +274,7 @@ pub fn Serializer(comptime endian: builtin.Endian, comptime packing: Packing, co |
| 273 | if (comptime trait.hasFn("serialize")(T)) return T.serialize(value, self); | 274 | if (comptime trait.hasFn("serialize")(T)) return T.serialize(value, self); |
| 274 | | 275 | |
| 275 | if (comptime trait.isPacked(T) and packing != .Bit) { | 276 | if (comptime trait.isPacked(T) and packing != .Bit) { |
| 276 | var packed_serializer = Serializer(endian, .Bit, Error).init(self.out_stream); | 277 | var packed_serializer = Serializer(endian, .Bit, OutStreamType).init(self.out_stream); |
| 277 | try packed_serializer.serialize(value); | 278 | try packed_serializer.serialize(value); |
| 278 | try packed_serializer.flush(); | 279 | try packed_serializer.flush(); |
| 279 | return; | 280 | return; |
| ... | @@ -364,28 +365,28 @@ fn testIntSerializerDeserializer(comptime endian: builtin.Endian, comptime packi | ... | @@ -364,28 +365,28 @@ fn testIntSerializerDeserializer(comptime endian: builtin.Endian, comptime packi |
| 364 | | 365 | |
| 365 | var data_mem: [total_bytes]u8 = undefined; | 366 | var data_mem: [total_bytes]u8 = undefined; |
| 366 | var out = io.fixedBufferStream(&data_mem); | 367 | var out = io.fixedBufferStream(&data_mem); |
| 367 | var serializer = serializer(endian, packing, out.outStream()); | 368 | var _serializer = serializer(endian, packing, out.outStream()); |
| 368 | | 369 | |
| 369 | var in = io.fixedBufferStream(&data_mem); | 370 | var in = io.fixedBufferStream(&data_mem); |
| 370 | var deserializer = Deserializer(endian, packing, in.inStream()); | 371 | var _deserializer = deserializer(endian, packing, in.inStream()); |
| 371 | | 372 | |
| 372 | comptime var i = 0; | 373 | comptime var i = 0; |
| 373 | inline while (i <= max_test_bitsize) : (i += 1) { | 374 | inline while (i <= max_test_bitsize) : (i += 1) { |
| 374 | const U = std.meta.IntType(false, i); | 375 | const U = std.meta.IntType(false, i); |
| 375 | const S = std.meta.IntType(true, i); | 376 | const S = std.meta.IntType(true, i); |
| 376 | try serializer.serializeInt(@as(U, i)); | 377 | try _serializer.serializeInt(@as(U, i)); |
| 377 | if (i != 0) try serializer.serializeInt(@as(S, -1)) else try serializer.serialize(@as(S, 0)); | 378 | if (i != 0) try _serializer.serializeInt(@as(S, -1)) else try _serializer.serialize(@as(S, 0)); |
| 378 | } | 379 | } |
| 379 | try serializer.flush(); | 380 | try _serializer.flush(); |
| 380 | | 381 | |
| 381 | i = 0; | 382 | i = 0; |
| 382 | inline while (i <= max_test_bitsize) : (i += 1) { | 383 | inline while (i <= max_test_bitsize) : (i += 1) { |
| 383 | const U = std.meta.IntType(false, i); | 384 | const U = std.meta.IntType(false, i); |
| 384 | const S = std.meta.IntType(true, i); | 385 | const S = std.meta.IntType(true, i); |
| 385 | const x = try deserializer.deserializeInt(U); | 386 | const x = try _deserializer.deserializeInt(U); |
| 386 | const y = try deserializer.deserializeInt(S); | 387 | const y = try _deserializer.deserializeInt(S); |
| 387 | expect(x == @as(U, i)); | 388 | testing.expect(x == @as(U, i)); |
| 388 | if (i != 0) expect(y == @as(S, -1)) else expect(y == 0); | 389 | if (i != 0) testing.expect(y == @as(S, -1)) else testing.expect(y == 0); |
| 389 | } | 390 | } |
| 390 | | 391 | |
| 391 | const u8_bit_count = comptime meta.bitCount(u8); | 392 | const u8_bit_count = comptime meta.bitCount(u8); |
| ... | @@ -395,7 +396,7 @@ fn testIntSerializerDeserializer(comptime endian: builtin.Endian, comptime packi | ... | @@ -395,7 +396,7 @@ fn testIntSerializerDeserializer(comptime endian: builtin.Endian, comptime packi |
| 395 | const extra_packed_byte = @boolToInt(total_bits % u8_bit_count > 0); | 396 | const extra_packed_byte = @boolToInt(total_bits % u8_bit_count > 0); |
| 396 | const total_packed_bytes = (total_bits / u8_bit_count) + extra_packed_byte; | 397 | const total_packed_bytes = (total_bits / u8_bit_count) + extra_packed_byte; |
| 397 | | 398 | |
| 398 | expect(in.pos == if (packing == .Bit) total_packed_bytes else total_bytes); | 399 | testing.expect(in.pos == if (packing == .Bit) total_packed_bytes else total_bytes); |
| 399 | | 400 | |
| 400 | //Verify that empty error set works with serializer. | 401 | //Verify that empty error set works with serializer. |
| 401 | //deserializer is covered by FixedBufferStream | 402 | //deserializer is covered by FixedBufferStream |
| ... | @@ -421,35 +422,35 @@ fn testIntSerializerDeserializerInfNaN( | ... | @@ -421,35 +422,35 @@ fn testIntSerializerDeserializerInfNaN( |
| 421 | var data_mem: [mem_size]u8 = undefined; | 422 | var data_mem: [mem_size]u8 = undefined; |
| 422 | | 423 | |
| 423 | var out = io.fixedBufferStream(&data_mem); | 424 | var out = io.fixedBufferStream(&data_mem); |
| 424 | var serializer = serializer(endian, packing, out.outStream()); | 425 | var _serializer = serializer(endian, packing, out.outStream()); |
| 425 | | 426 | |
| 426 | var in = io.fixedBufferStream(&data_mem); | 427 | var in = io.fixedBufferStream(&data_mem); |
| 427 | var deserializer = deserializer(endian, packing, in.inStream()); | 428 | var _deserializer = deserializer(endian, packing, in.inStream()); |
| 428 | | 429 | |
| 429 | //@TODO: isInf/isNan not currently implemented for f128. | 430 | //@TODO: isInf/isNan not currently implemented for f128. |
| 430 | try serializer.serialize(std.math.nan(f16)); | 431 | try _serializer.serialize(std.math.nan(f16)); |
| 431 | try serializer.serialize(std.math.inf(f16)); | 432 | try _serializer.serialize(std.math.inf(f16)); |
| 432 | try serializer.serialize(std.math.nan(f32)); | 433 | try _serializer.serialize(std.math.nan(f32)); |
| 433 | try serializer.serialize(std.math.inf(f32)); | 434 | try _serializer.serialize(std.math.inf(f32)); |
| 434 | try serializer.serialize(std.math.nan(f64)); | 435 | try _serializer.serialize(std.math.nan(f64)); |
| 435 | try serializer.serialize(std.math.inf(f64)); | 436 | try _serializer.serialize(std.math.inf(f64)); |
| 436 | //try serializer.serialize(std.math.nan(f128)); | 437 | //try serializer.serialize(std.math.nan(f128)); |
| 437 | //try serializer.serialize(std.math.inf(f128)); | 438 | //try serializer.serialize(std.math.inf(f128)); |
| 438 | const nan_check_f16 = try deserializer.deserialize(f16); | 439 | const nan_check_f16 = try _deserializer.deserialize(f16); |
| 439 | const inf_check_f16 = try deserializer.deserialize(f16); | 440 | const inf_check_f16 = try _deserializer.deserialize(f16); |
| 440 | const nan_check_f32 = try deserializer.deserialize(f32); | 441 | const nan_check_f32 = try _deserializer.deserialize(f32); |
| 441 | deserializer.alignToByte(); | 442 | _deserializer.alignToByte(); |
| 442 | const inf_check_f32 = try deserializer.deserialize(f32); | 443 | const inf_check_f32 = try _deserializer.deserialize(f32); |
| 443 | const nan_check_f64 = try deserializer.deserialize(f64); | 444 | const nan_check_f64 = try _deserializer.deserialize(f64); |
| 444 | const inf_check_f64 = try deserializer.deserialize(f64); | 445 | const inf_check_f64 = try _deserializer.deserialize(f64); |
| 445 | //const nan_check_f128 = try deserializer.deserialize(f128); | 446 | //const nan_check_f128 = try deserializer.deserialize(f128); |
| 446 | //const inf_check_f128 = try deserializer.deserialize(f128); | 447 | //const inf_check_f128 = try deserializer.deserialize(f128); |
| 447 | expect(std.math.isNan(nan_check_f16)); | 448 | testing.expect(std.math.isNan(nan_check_f16)); |
| 448 | expect(std.math.isInf(inf_check_f16)); | 449 | testing.expect(std.math.isInf(inf_check_f16)); |
| 449 | expect(std.math.isNan(nan_check_f32)); | 450 | testing.expect(std.math.isNan(nan_check_f32)); |
| 450 | expect(std.math.isInf(inf_check_f32)); | 451 | testing.expect(std.math.isInf(inf_check_f32)); |
| 451 | expect(std.math.isNan(nan_check_f64)); | 452 | testing.expect(std.math.isNan(nan_check_f64)); |
| 452 | expect(std.math.isInf(inf_check_f64)); | 453 | testing.expect(std.math.isInf(inf_check_f64)); |
| 453 | //expect(std.math.isNan(nan_check_f128)); | 454 | //expect(std.math.isNan(nan_check_f128)); |
| 454 | //expect(std.math.isInf(inf_check_f128)); | 455 | //expect(std.math.isInf(inf_check_f128)); |
| 455 | } | 456 | } |
| ... | @@ -461,8 +462,8 @@ test "Serializer/Deserializer Int: Inf/NaN" { | ... | @@ -461,8 +462,8 @@ test "Serializer/Deserializer Int: Inf/NaN" { |
| 461 | try testIntSerializerDeserializerInfNaN(.Little, .Bit); | 462 | try testIntSerializerDeserializerInfNaN(.Little, .Bit); |
| 462 | } | 463 | } |
| 463 | | 464 | |
| 464 | fn testAlternateSerializer(self: var, serializer: var) !void { | 465 | fn testAlternateSerializer(self: var, _serializer: var) !void { |
| 465 | try serializer.serialize(self.f_f16); | 466 | try _serializer.serialize(self.f_f16); |
| 466 | } | 467 | } |
| 467 | | 468 | |
| 468 | fn testSerializerDeserializer(comptime endian: builtin.Endian, comptime packing: io.Packing) !void { | 469 | fn testSerializerDeserializer(comptime endian: builtin.Endian, comptime packing: io.Packing) !void { |
| ... | @@ -502,8 +503,8 @@ fn testSerializerDeserializer(comptime endian: builtin.Endian, comptime packing: | ... | @@ -502,8 +503,8 @@ fn testSerializerDeserializer(comptime endian: builtin.Endian, comptime packing: |
| 502 | f_f16: f16, | 503 | f_f16: f16, |
| 503 | f_unused_u32: u32, | 504 | f_unused_u32: u32, |
| 504 | | 505 | |
| 505 | pub fn deserialize(self: *@This(), deserializer: var) !void { | 506 | pub fn deserialize(self: *@This(), _deserializer: var) !void { |
| 506 | try deserializer.deserializeInto(&self.f_f16); | 507 | try _deserializer.deserializeInto(&self.f_f16); |
| 507 | self.f_unused_u32 = 47; | 508 | self.f_unused_u32 = 47; |
| 508 | } | 509 | } |
| 509 | | 510 | |
| ... | @@ -550,15 +551,15 @@ fn testSerializerDeserializer(comptime endian: builtin.Endian, comptime packing: | ... | @@ -550,15 +551,15 @@ fn testSerializerDeserializer(comptime endian: builtin.Endian, comptime packing: |
| 550 | | 551 | |
| 551 | var data_mem: [@sizeOf(MyStruct)]u8 = undefined; | 552 | var data_mem: [@sizeOf(MyStruct)]u8 = undefined; |
| 552 | var out = io.fixedBufferStream(&data_mem); | 553 | var out = io.fixedBufferStream(&data_mem); |
| 553 | var serializer = serializer(endian, packing, out.outStream()); | 554 | var _serializer = serializer(endian, packing, out.outStream()); |
| 554 | | 555 | |
| 555 | var in = io.fixedBufferStream(&data_mem); | 556 | var in = io.fixedBufferStream(&data_mem); |
| 556 | var deserializer = deserializer(endian, packing, in.inStream()); | 557 | var _deserializer = deserializer(endian, packing, in.inStream()); |
| 557 | | 558 | |
| 558 | try serializer.serialize(my_inst); | 559 | try _serializer.serialize(my_inst); |
| 559 | | 560 | |
| 560 | const my_copy = try deserializer.deserialize(MyStruct); | 561 | const my_copy = try _deserializer.deserialize(MyStruct); |
| 561 | expect(meta.eql(my_copy, my_inst)); | 562 | testing.expect(meta.eql(my_copy, my_inst)); |
| 562 | } | 563 | } |
| 563 | | 564 | |
| 564 | test "Serializer/Deserializer generic" { | 565 | test "Serializer/Deserializer generic" { |
| ... | @@ -584,18 +585,18 @@ fn testBadData(comptime endian: builtin.Endian, comptime packing: io.Packing) !v | ... | @@ -584,18 +585,18 @@ fn testBadData(comptime endian: builtin.Endian, comptime packing: io.Packing) !v |
| 584 | }; | 585 | }; |
| 585 | | 586 | |
| 586 | var data_mem: [4]u8 = undefined; | 587 | var data_mem: [4]u8 = undefined; |
| 587 | var out = io.fixedBufferStream.init(&data_mem); | 588 | var out = io.fixedBufferStream(&data_mem); |
| 588 | var serializer = serializer(endian, packing, out.outStream()); | 589 | var _serializer = serializer(endian, packing, out.outStream()); |
| 589 | | 590 | |
| 590 | var in = io.fixedBufferStream(&data_mem); | 591 | var in = io.fixedBufferStream(&data_mem); |
| 591 | var deserializer = deserializer(endian, packing, in.inStream()); | 592 | var _deserializer = deserializer(endian, packing, in.inStream()); |
| 592 | | 593 | |
| 593 | try serializer.serialize(@as(u14, 3)); | 594 | try _serializer.serialize(@as(u14, 3)); |
| 594 | expectError(error.InvalidEnumTag, deserializer.deserialize(A)); | 595 | testing.expectError(error.InvalidEnumTag, _deserializer.deserialize(A)); |
| 595 | out.pos = 0; | 596 | out.pos = 0; |
| 596 | try serializer.serialize(@as(u14, 3)); | 597 | try _serializer.serialize(@as(u14, 3)); |
| 597 | try serializer.serialize(@as(u14, 88)); | 598 | try _serializer.serialize(@as(u14, 88)); |
| 598 | expectError(error.InvalidEnumTag, deserializer.deserialize(C)); | 599 | testing.expectError(error.InvalidEnumTag, _deserializer.deserialize(C)); |
| 599 | } | 600 | } |
| 600 | | 601 | |
| 601 | test "Deserializer bad data" { | 602 | test "Deserializer bad data" { |