fix: clean-up bitrot in buffer tests
This commit is contained in:
		
							parent
							
								
									b70da1918c
								
							
						
					
					
						commit
						a5ebaf6202
					
				
					 2 changed files with 41 additions and 33 deletions
				
			
		|  | @ -1122,9 +1122,9 @@ pub fn load_from_file_and_update(self: *Self, file_path: []const u8) !void { | ||||||
|     self.last_save_eol_mode = eol_mode; |     self.last_save_eol_mode = eol_mode; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub fn store_to_string(self: *const Self, allocator: Allocator) ![]u8 { | pub fn store_to_string(self: *const Self, allocator: Allocator, eol_mode: EolMode) ![]u8 { | ||||||
|     var s = try ArrayList(u8).initCapacity(allocator, self.root.weights_sum().len); |     var s = try ArrayList(u8).initCapacity(allocator, self.root.weights_sum().len); | ||||||
|     try self.root.store(s.writer()); |     try self.root.store(s.writer(), eol_mode); | ||||||
|     return s.toOwnedSlice(); |     return s.toOwnedSlice(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -8,20 +8,21 @@ fn metrics() Buffer.Metrics { | ||||||
|     return .{ |     return .{ | ||||||
|         .ctx = undefined, |         .ctx = undefined, | ||||||
|         .egc_length = struct { |         .egc_length = struct { | ||||||
|             fn f(_: *const anyopaque, _: []const u8, colcount: *c_int, _: usize) usize { |             fn f(_: Buffer.Metrics, _: []const u8, colcount: *c_int, _: usize) usize { | ||||||
|                 colcount.* = 1; |                 colcount.* = 1; | ||||||
|                 return 1; |                 return 1; | ||||||
|             } |             } | ||||||
|         }.f, |         }.f, | ||||||
|         .egc_chunk_width = struct { |         .egc_chunk_width = struct { | ||||||
|             fn f(_: *const anyopaque, chunk_: []const u8, _: usize) usize { |             fn f(_: Buffer.Metrics, chunk_: []const u8, _: usize) usize { | ||||||
|                 return chunk_.len; |                 return chunk_.len; | ||||||
|             } |             } | ||||||
|         }.f, |         }.f, | ||||||
|  |         .tab_width = 1, | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| fn get_big_doc() !*Buffer { | fn get_big_doc(eol_mode: *Buffer.EolMode) !*Buffer { | ||||||
|     const BigDocGen = struct { |     const BigDocGen = struct { | ||||||
|         line_num: usize = 0, |         line_num: usize = 0, | ||||||
|         lines: usize = 10000, |         lines: usize = 10000, | ||||||
|  | @ -65,7 +66,7 @@ fn get_big_doc() !*Buffer { | ||||||
|     try gen.reader().readAllArrayList(&doc, std.math.maxInt(usize)); |     try gen.reader().readAllArrayList(&doc, std.math.maxInt(usize)); | ||||||
|     var buf = try Buffer.create(a); |     var buf = try Buffer.create(a); | ||||||
|     var fis = std.io.fixedBufferStream(doc.items); |     var fis = std.io.fixedBufferStream(doc.items); | ||||||
|     buf.update(try buf.load(fis.reader(), doc.items.len)); |     buf.update(try buf.load(fis.reader(), doc.items.len, eol_mode)); | ||||||
|     return buf; |     return buf; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -84,14 +85,15 @@ test "buffer" { | ||||||
|         \\are belong to |         \\are belong to | ||||||
|         \\us! |         \\us! | ||||||
|     ; |     ; | ||||||
|  |     var eol_mode: Buffer.EolMode = .lf; | ||||||
|     const buffer = try Buffer.create(a); |     const buffer = try Buffer.create(a); | ||||||
|     defer buffer.deinit(); |     defer buffer.deinit(); | ||||||
|     const root = try buffer.load_from_string(doc); |     const root = try buffer.load_from_string(doc, &eol_mode); | ||||||
| 
 | 
 | ||||||
|     try std.testing.expect(root.is_balanced()); |     try std.testing.expect(root.is_balanced()); | ||||||
|     buffer.update(root); |     buffer.update(root); | ||||||
| 
 | 
 | ||||||
|     const result: []const u8 = try buffer.store_to_string(a); |     const result: []const u8 = try buffer.store_to_string(a, eol_mode); | ||||||
|     defer a.free(result); |     defer a.free(result); | ||||||
|     try std.testing.expectEqualDeep(result, doc); |     try std.testing.expectEqualDeep(result, doc); | ||||||
|     try std.testing.expectEqual(doc.len, result.len); |     try std.testing.expectEqual(doc.len, result.len); | ||||||
|  | @ -105,7 +107,8 @@ fn get_line(buf: *const Buffer, line: usize) ![]const u8 { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| test "walk_from_line" { | test "walk_from_line" { | ||||||
|     const buffer = try get_big_doc(); |     var eol_mode: Buffer.EolMode = .lf; | ||||||
|  |     const buffer = try get_big_doc(&eol_mode); | ||||||
|     defer buffer.deinit(); |     defer buffer.deinit(); | ||||||
| 
 | 
 | ||||||
|     const lines = buffer.root.lines(); |     const lines = buffer.root.lines(); | ||||||
|  | @ -143,9 +146,10 @@ test "line_len" { | ||||||
|         \\are belong to |         \\are belong to | ||||||
|         \\us! |         \\us! | ||||||
|     ; |     ; | ||||||
|  |     var eol_mode: Buffer.EolMode = .lf; | ||||||
|     const buffer = try Buffer.create(a); |     const buffer = try Buffer.create(a); | ||||||
|     defer buffer.deinit(); |     defer buffer.deinit(); | ||||||
|     buffer.update(try buffer.load_from_string(doc)); |     buffer.update(try buffer.load_from_string(doc, &eol_mode)); | ||||||
| 
 | 
 | ||||||
|     try std.testing.expectEqual(try buffer.root.line_width(0, metrics()), 8); |     try std.testing.expectEqual(try buffer.root.line_width(0, metrics()), 8); | ||||||
|     try std.testing.expectEqual(try buffer.root.line_width(1, metrics()), 5); |     try std.testing.expectEqual(try buffer.root.line_width(1, metrics()), 5); | ||||||
|  | @ -166,16 +170,17 @@ test "get_byte_pos" { | ||||||
|         \\are belong to |         \\are belong to | ||||||
|         \\us! |         \\us! | ||||||
|     ; |     ; | ||||||
|  |     var eol_mode: Buffer.EolMode = .lf; | ||||||
|     const buffer = try Buffer.create(a); |     const buffer = try Buffer.create(a); | ||||||
|     defer buffer.deinit(); |     defer buffer.deinit(); | ||||||
|     buffer.update(try buffer.load_from_string(doc)); |     buffer.update(try buffer.load_from_string(doc, &eol_mode)); | ||||||
| 
 | 
 | ||||||
|     try std.testing.expectEqual(0, try buffer.root.get_byte_pos(.{ .row = 0, .col = 0 }, metrics())); |     try std.testing.expectEqual(0, try buffer.root.get_byte_pos(.{ .row = 0, .col = 0 }, metrics(), eol_mode)); | ||||||
|     try std.testing.expectEqual(9, try buffer.root.get_byte_pos(.{ .row = 1, .col = 0 }, metrics())); |     try std.testing.expectEqual(9, try buffer.root.get_byte_pos(.{ .row = 1, .col = 0 }, metrics(), eol_mode)); | ||||||
|     try std.testing.expectEqual(11, try buffer.root.get_byte_pos(.{ .row = 1, .col = 2 }, metrics())); |     try std.testing.expectEqual(11, try buffer.root.get_byte_pos(.{ .row = 1, .col = 2 }, metrics(), eol_mode)); | ||||||
|     try std.testing.expectEqual(33, try buffer.root.get_byte_pos(.{ .row = 4, .col = 0 }, metrics())); |     try std.testing.expectEqual(33, try buffer.root.get_byte_pos(.{ .row = 4, .col = 0 }, metrics(), eol_mode)); | ||||||
|     try std.testing.expectEqual(66, try buffer.root.get_byte_pos(.{ .row = 8, .col = 0 }, metrics())); |     try std.testing.expectEqual(66, try buffer.root.get_byte_pos(.{ .row = 8, .col = 0 }, metrics(), eol_mode)); | ||||||
|     try std.testing.expectEqual(97, try buffer.root.get_byte_pos(.{ .row = 11, .col = 2 }, metrics())); |     try std.testing.expectEqual(97, try buffer.root.get_byte_pos(.{ .row = 11, .col = 2 }, metrics(), eol_mode)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| test "del_chars" { | test "del_chars" { | ||||||
|  | @ -193,25 +198,26 @@ test "del_chars" { | ||||||
|         \\are belong to |         \\are belong to | ||||||
|         \\us! |         \\us! | ||||||
|     ; |     ; | ||||||
|  |     var eol_mode: Buffer.EolMode = .lf; | ||||||
|     const buffer = try Buffer.create(a); |     const buffer = try Buffer.create(a); | ||||||
|     defer buffer.deinit(); |     defer buffer.deinit(); | ||||||
|     buffer.update(try buffer.load_from_string(doc)); |     buffer.update(try buffer.load_from_string(doc, &eol_mode)); | ||||||
| 
 | 
 | ||||||
|     buffer.update(try buffer.root.del_chars(3, try buffer.root.line_width(3, metrics()) - 1, 1, buffer.a, metrics())); |     buffer.update(try buffer.root.del_chars(3, try buffer.root.line_width(3, metrics()) - 1, 1, buffer.allocator, metrics())); | ||||||
|     const line3 = try get_line(buffer, 3); |     const line3 = try get_line(buffer, 3); | ||||||
|     defer a.free(line3); |     defer a.free(line3); | ||||||
|     try std.testing.expect(std.mem.eql(u8, line3, "us")); |     try std.testing.expect(std.mem.eql(u8, line3, "us")); | ||||||
| 
 | 
 | ||||||
|     buffer.update(try buffer.root.del_chars(3, 0, 7, buffer.a, metrics())); |     buffer.update(try buffer.root.del_chars(3, 0, 7, buffer.allocator, metrics())); | ||||||
|     const line3_1 = try get_line(buffer, 3); |     const line3_1 = try get_line(buffer, 3); | ||||||
|     defer a.free(line3_1); |     defer a.free(line3_1); | ||||||
|     try std.testing.expect(std.mem.eql(u8, line3_1, "your")); |     try std.testing.expect(std.mem.eql(u8, line3_1, "your")); | ||||||
| 
 | 
 | ||||||
|     try std.testing.expect(buffer.root.is_balanced()); |     try std.testing.expect(buffer.root.is_balanced()); | ||||||
|     buffer.update(try buffer.root.rebalance(buffer.a, buffer.a)); |     buffer.update(try buffer.root.rebalance(buffer.allocator, buffer.allocator)); | ||||||
|     try std.testing.expect(buffer.root.is_balanced()); |     try std.testing.expect(buffer.root.is_balanced()); | ||||||
| 
 | 
 | ||||||
|     buffer.update(try buffer.root.del_chars(0, try buffer.root.line_width(0, metrics()) - 1, 2, buffer.a, metrics())); |     buffer.update(try buffer.root.del_chars(0, try buffer.root.line_width(0, metrics()) - 1, 2, buffer.allocator, metrics())); | ||||||
|     const line0 = try get_line(buffer, 0); |     const line0 = try get_line(buffer, 0); | ||||||
|     defer a.free(line0); |     defer a.free(line0); | ||||||
|     try std.testing.expect(std.mem.eql(u8, line0, "All youropes")); |     try std.testing.expect(std.mem.eql(u8, line0, "All youropes")); | ||||||
|  | @ -238,11 +244,12 @@ test "del_chars2" { | ||||||
|         \\are belong to |         \\are belong to | ||||||
|         \\us! |         \\us! | ||||||
|     ; |     ; | ||||||
|  |     var eol_mode: Buffer.EolMode = .lf; | ||||||
|     const buffer = try Buffer.create(a); |     const buffer = try Buffer.create(a); | ||||||
|     defer buffer.deinit(); |     defer buffer.deinit(); | ||||||
|     buffer.update(try buffer.load_from_string(doc)); |     buffer.update(try buffer.load_from_string(doc, &eol_mode)); | ||||||
| 
 | 
 | ||||||
|     buffer.update(try buffer.root.del_chars(2, try buffer.root.line_width(2, metrics()) - 3, 6, buffer.a, metrics())); |     buffer.update(try buffer.root.del_chars(2, try buffer.root.line_width(2, metrics()) - 3, 6, buffer.allocator, metrics())); | ||||||
| 
 | 
 | ||||||
|     try check_line(buffer, 2, "are belong!"); |     try check_line(buffer, 2, "are belong!"); | ||||||
|     try check_line(buffer, 3, "All your"); |     try check_line(buffer, 3, "All your"); | ||||||
|  | @ -253,64 +260,65 @@ test "insert_chars" { | ||||||
|     const doc: []const u8 = |     const doc: []const u8 = | ||||||
|         \\B |         \\B | ||||||
|     ; |     ; | ||||||
|  |     var eol_mode: Buffer.EolMode = .lf; | ||||||
|     const buffer = try Buffer.create(a); |     const buffer = try Buffer.create(a); | ||||||
|     defer buffer.deinit(); |     defer buffer.deinit(); | ||||||
|     buffer.update(try buffer.load_from_string(doc)); |     buffer.update(try buffer.load_from_string(doc, &eol_mode)); | ||||||
| 
 | 
 | ||||||
|     const line0 = try get_line(buffer, 0); |     const line0 = try get_line(buffer, 0); | ||||||
|     defer a.free(line0); |     defer a.free(line0); | ||||||
|     try std.testing.expect(std.mem.eql(u8, line0, "B")); |     try std.testing.expect(std.mem.eql(u8, line0, "B")); | ||||||
| 
 | 
 | ||||||
|     _, _, var root = try buffer.root.insert_chars(0, 0, "1", buffer.a, metrics()); |     _, _, var root = try buffer.root.insert_chars(0, 0, "1", buffer.allocator, metrics()); | ||||||
|     buffer.update(root); |     buffer.update(root); | ||||||
| 
 | 
 | ||||||
|     const line1 = try get_line(buffer, 0); |     const line1 = try get_line(buffer, 0); | ||||||
|     defer a.free(line1); |     defer a.free(line1); | ||||||
|     try std.testing.expect(std.mem.eql(u8, line1, "1B")); |     try std.testing.expect(std.mem.eql(u8, line1, "1B")); | ||||||
| 
 | 
 | ||||||
|     _, _, root = try root.insert_chars(0, 1, "2", buffer.a, metrics()); |     _, _, root = try root.insert_chars(0, 1, "2", buffer.allocator, metrics()); | ||||||
|     buffer.update(root); |     buffer.update(root); | ||||||
| 
 | 
 | ||||||
|     const line2 = try get_line(buffer, 0); |     const line2 = try get_line(buffer, 0); | ||||||
|     defer a.free(line2); |     defer a.free(line2); | ||||||
|     try std.testing.expect(std.mem.eql(u8, line2, "12B")); |     try std.testing.expect(std.mem.eql(u8, line2, "12B")); | ||||||
| 
 | 
 | ||||||
|     _, _, root = try root.insert_chars(0, 2, "3", buffer.a, metrics()); |     _, _, root = try root.insert_chars(0, 2, "3", buffer.allocator, metrics()); | ||||||
|     buffer.update(root); |     buffer.update(root); | ||||||
| 
 | 
 | ||||||
|     const line3 = try get_line(buffer, 0); |     const line3 = try get_line(buffer, 0); | ||||||
|     defer a.free(line3); |     defer a.free(line3); | ||||||
|     try std.testing.expect(std.mem.eql(u8, line3, "123B")); |     try std.testing.expect(std.mem.eql(u8, line3, "123B")); | ||||||
| 
 | 
 | ||||||
|     _, _, root = try root.insert_chars(0, 3, "4", buffer.a, metrics()); |     _, _, root = try root.insert_chars(0, 3, "4", buffer.allocator, metrics()); | ||||||
|     buffer.update(root); |     buffer.update(root); | ||||||
| 
 | 
 | ||||||
|     const line4 = try get_line(buffer, 0); |     const line4 = try get_line(buffer, 0); | ||||||
|     defer a.free(line4); |     defer a.free(line4); | ||||||
|     try std.testing.expect(std.mem.eql(u8, line4, "1234B")); |     try std.testing.expect(std.mem.eql(u8, line4, "1234B")); | ||||||
| 
 | 
 | ||||||
|     _, _, root = try root.insert_chars(0, 4, "5", buffer.a, metrics()); |     _, _, root = try root.insert_chars(0, 4, "5", buffer.allocator, metrics()); | ||||||
|     buffer.update(root); |     buffer.update(root); | ||||||
| 
 | 
 | ||||||
|     const line5 = try get_line(buffer, 0); |     const line5 = try get_line(buffer, 0); | ||||||
|     defer a.free(line5); |     defer a.free(line5); | ||||||
|     try std.testing.expect(std.mem.eql(u8, line5, "12345B")); |     try std.testing.expect(std.mem.eql(u8, line5, "12345B")); | ||||||
| 
 | 
 | ||||||
|     _, _, root = try root.insert_chars(0, 5, "6", buffer.a, metrics()); |     _, _, root = try root.insert_chars(0, 5, "6", buffer.allocator, metrics()); | ||||||
|     buffer.update(root); |     buffer.update(root); | ||||||
| 
 | 
 | ||||||
|     const line6 = try get_line(buffer, 0); |     const line6 = try get_line(buffer, 0); | ||||||
|     defer a.free(line6); |     defer a.free(line6); | ||||||
|     try std.testing.expect(std.mem.eql(u8, line6, "123456B")); |     try std.testing.expect(std.mem.eql(u8, line6, "123456B")); | ||||||
| 
 | 
 | ||||||
|     _, _, root = try root.insert_chars(0, 6, "7", buffer.a, metrics()); |     _, _, root = try root.insert_chars(0, 6, "7", buffer.allocator, metrics()); | ||||||
|     buffer.update(root); |     buffer.update(root); | ||||||
| 
 | 
 | ||||||
|     const line7 = try get_line(buffer, 0); |     const line7 = try get_line(buffer, 0); | ||||||
|     defer a.free(line7); |     defer a.free(line7); | ||||||
|     try std.testing.expect(std.mem.eql(u8, line7, "1234567B")); |     try std.testing.expect(std.mem.eql(u8, line7, "1234567B")); | ||||||
| 
 | 
 | ||||||
|     const line, const col, root = try buffer.root.insert_chars(0, 7, "8\n9", buffer.a, metrics()); |     const line, const col, root = try buffer.root.insert_chars(0, 7, "8\n9", buffer.allocator, metrics()); | ||||||
|     buffer.update(root); |     buffer.update(root); | ||||||
| 
 | 
 | ||||||
|     const line8 = try get_line(buffer, 0); |     const line8 = try get_line(buffer, 0); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue