| ... | @@ -260,6 +260,54 @@ test "BitOutStream" { | ... | @@ -260,6 +260,54 @@ test "BitOutStream" { |
| 260 | try bit_stream_le.writeBits(u0(0), 0); | 260 | try bit_stream_le.writeBits(u0(0), 0); |
| 261 | } | 261 | } |
| 262 | | 262 | |
| | 263 | test "BitStreams with File Stream" { |
| | 264 | const tmp_file_name = "temp_test_file.txt"; |
| | 265 | { |
| | 266 | var file = try os.File.openWrite(tmp_file_name); |
| | 267 | defer file.close(); |
| | 268 | |
| | 269 | var file_out = file.outStream(); |
| | 270 | var file_out_stream = &file_out.stream; |
| | 271 | const OutError = os.File.WriteError; |
| | 272 | var bit_stream = io.BitOutStream(builtin.endian, OutError).init(file_out_stream); |
| | 273 | |
| | 274 | try bit_stream.writeBits(u2(1), 1); |
| | 275 | try bit_stream.writeBits(u5(2), 2); |
| | 276 | try bit_stream.writeBits(u128(3), 3); |
| | 277 | try bit_stream.writeBits(u8(4), 4); |
| | 278 | try bit_stream.writeBits(u9(5), 5); |
| | 279 | try bit_stream.writeBits(u1(1), 1); |
| | 280 | try bit_stream.flushBits(); |
| | 281 | } |
| | 282 | { |
| | 283 | var file = try os.File.openRead(tmp_file_name); |
| | 284 | defer file.close(); |
| | 285 | |
| | 286 | var file_in = file.inStream(); |
| | 287 | var file_in_stream = &file_in.stream; |
| | 288 | const InError = os.File.ReadError; |
| | 289 | var bit_stream = io.BitInStream(builtin.endian, InError).init(file_in_stream); |
| | 290 | |
| | 291 | var out_bits: usize = undefined; |
| | 292 | |
| | 293 | assert(1 == try bit_stream.readBits(u2, 1, &out_bits)); |
| | 294 | assert(out_bits == 1); |
| | 295 | assert(2 == try bit_stream.readBits(u5, 2, &out_bits)); |
| | 296 | assert(out_bits == 2); |
| | 297 | assert(3 == try bit_stream.readBits(u128, 3, &out_bits)); |
| | 298 | assert(out_bits == 3); |
| | 299 | assert(4 == try bit_stream.readBits(u8, 4, &out_bits)); |
| | 300 | assert(out_bits == 4); |
| | 301 | assert(5 == try bit_stream.readBits(u9, 5, &out_bits)); |
| | 302 | assert(out_bits == 5); |
| | 303 | assert(1 == try bit_stream.readBits(u1, 1, &out_bits)); |
| | 304 | assert(out_bits == 1); |
| | 305 | |
| | 306 | assertError(bit_stream.readBitsNoEof(u1, 1), error.EndOfStream); |
| | 307 | } |
| | 308 | try os.deleteFile(tmp_file_name); |
| | 309 | } |
| | 310 | |
| 263 | fn testIntSerializerDeserializer(comptime endian: builtin.Endian, comptime is_packed: bool) !void { | 311 | fn testIntSerializerDeserializer(comptime endian: builtin.Endian, comptime is_packed: bool) !void { |
| 264 | //@NOTE: if this test is taking too long, reduce the maximum tested bitsize | 312 | //@NOTE: if this test is taking too long, reduce the maximum tested bitsize |
| 265 | const max_test_bitsize = 128; | 313 | const max_test_bitsize = 128; |