📄 26_twrite.t
字号:
try( 0, 0, 24576); # old=0 , new=<x><x><x>; old < newtry( 0, 6530, 0); # old=<x , new=0 ; old > newtry( 0, 8192, 0); # old=<x> , new=0 ; old > newtry( 0, 14707, 0); # old=<x><x , new=0 ; old > newtry( 0, 16384, 0); # old=<x><x> , new=0 ; old > newtry( 0, 24576, 0); # old=<x><x><x>, new=0 ; old > newtry( 0, 0, 0); # old=0 , new=0 ; old = new# (115-141)# These tests all take place at the end of the file$FLEN = 40960; # Force the file to be exactly 40960 bytes longtry(32768, 8192, 8192); # old=<x> , new=<x ; old = newtry(32768, 8192, 4026); # old=<x> , new=<x ; old > newtry(24576, 16384, 1917); # old=<x><x> , new=<x ; old > newtry(16384, 24576, 3818); # old=<x><x><x>, new=<x ; old > newtry(40960, 0, 2779); # old=0 , new=<x ; old < newtry(32768, 8192, 8192); # old=<x> , new=<x> ; old = newtry(24576, 16384, 8192); # old=<x><x> , new=<x> ; old > newtry(16384, 24576, 8192); # old=<x><x><x>, new=<x> ; old > newtry(40960, 0, 8192); # old=0 , new=<x> ; old < newtry(32768, 8192, 10724); # old=<x> , new=<x><x ; old < newtry(24576, 16384, 12221); # old=<x><x> , new=<x><x ; old > newtry(16384, 24576, 15030); # old=<x><x><x>, new=<x><x ; old > newtry(40960, 0, 11752); # old=0 , new=<x><x ; old < newtry(32768, 8192, 16384); # old=<x> , new=<x><x> ; old < newtry(24576, 16384, 16384); # old=<x><x> , new=<x><x> ; old = newtry(16384, 24576, 16384); # old=<x><x><x>, new=<x><x> ; old > newtry(40960, 0, 16384); # old=0 , new=<x><x> ; old < newtry(32768, 8192, 24576); # old=<x> , new=<x><x><x>; old < newtry(24576, 16384, 24576); # old=<x><x> , new=<x><x><x>; old < newtry(16384, 24576, 24576); # old=<x><x><x>, new=<x><x><x>; old = newtry(40960, 0, 24576); # old=0 , new=<x><x><x>; old < newtry(35973, 4987, 0); # old=x> , new=0 ; old > newtry(32768, 8192, 0); # old=<x> , new=0 ; old > newtry(29932, 11028, 0); # old=x><x> , new=0 ; old > newtry(24576, 16384, 0); # old=<x><x> , new=0 ; old > newtry(16384, 24576, 0); # old=<x><x><x>, new=0 ; old > newtry(40960, 0, 0); # old=0 , new=0 ; old = new# (142-181)# These tests all take place at the end of the file$FLEN = 42000; # Force the file to be exactly 42000 bytes longtry(41275, 725, 4059); # old=x , new=x ; old < newtry(41683, 317, 317); # old=x , new=x ; old = newtry(41225, 775, 405); # old=x , new=x ; old > newtry(35709, 6291, 284); # old=x><x , new=x ; old > newtry(42000, 0, 2434); # old=0 , new=x ; old < newtry(40960, 1040, 1608); # old=<x , new=<x ; old < newtry(40960, 1040, 1040); # old=<x , new=<x ; old = newtry(40960, 1040, 378); # old=<x , new=<x ; old > newtry(32768, 9232, 5604); # old=<x><x , new=<x ; old > newtry(42000, 0, 6637); # old=0 , new=<x ; old < newtry(41022, 978, 8130); # old=x , new=x> ; old < newtry(39994, 2006, 966); # old=x><x , new=x> ; old > newtry(42000, 0, 7152); # old=0 , new=x> ; old < newtry(41613, 387, 10601); # old=x , new=x><x ; old < newtry(38460, 3540, 3938); # old=x><x , new=x><x ; old < newtry(36725, 5275, 5275); # old=x><x , new=x><x ; old = newtry(37990, 4010, 3199); # old=x><x , new=x><x ; old > newtry(42000, 0, 9189); # old=0 , new=x><x ; old < newtry(40960, 1040, 8192); # old=<x , new=<x> ; old < newtry(32768, 9232, 8192); # old=<x><x , new=<x> ; old > newtry(42000, 0, 8192); # old=0 , new=<x> ; old < newtry(40960, 1040, 11778); # old=<x , new=<x><x ; old < newtry(32768, 9232, 13792); # old=<x><x , new=<x><x ; old < newtry(32768, 9232, 9232); # old=<x><x , new=<x><x ; old = newtry(32768, 9232, 8795); # old=<x><x , new=<x><x ; old > newtry(42000, 0, 8578); # old=0 , new=<x><x ; old < newtry(41531, 469, 15813); # old=x , new=x><x> ; old < newtry(39618, 2382, 9534); # old=x><x , new=x><x> ; old < newtry(42000, 0, 15344); # old=0 , new=x><x> ; old < newtry(40960, 1040, 16384); # old=<x , new=<x><x> ; old < newtry(32768, 9232, 16384); # old=<x><x , new=<x><x> ; old < newtry(42000, 0, 16384); # old=0 , new=<x><x> ; old < newtry(40960, 1040, 24576); # old=<x , new=<x><x><x>; old < newtry(32768, 9232, 24576); # old=<x><x , new=<x><x><x>; old < newtry(42000, 0, 24576); # old=0 , new=<x><x><x>; old < newtry(41500, 500, 0); # old=x , new=0 ; old > newtry(40960, 1040, 0); # old=<x , new=0 ; old > newtry(35272, 6728, 0); # old=x><x , new=0 ; old > newtry(32768, 9232, 0); # old=<x><x , new=0 ; old > newtry(42000, 0, 0); # old=0 , new=0 ; old = newsub try { my ($pos, $len, $newlen) = @_; open F, "> $file" or die "Couldn't open file $file: $!"; binmode F; # The record has exactly 17 characters. This will help ensure that # even if _twrite screws up, the data doesn't coincidentally # look good because the remainder accidentally lines up. my $d = substr("0123456789abcdef$:", -17); my $recs = defined($FLEN) ? int($FLEN/length($d))+1 : # enough to make up at least $FLEN int(8192*5/length($d))+1; # at least 5 blocks' worth my $oldfile = $d x $recs; my $flen = defined($FLEN) ? $FLEN : $recs * 17; substr($oldfile, $FLEN) = "" if defined $FLEN; # truncate print F $oldfile; close F; die "wrong length!" unless -s $file == $flen; my $newdata = "-" x $newlen; my $expected = $oldfile; substr($expected, $pos, $len) = $newdata; my $o = tie my @lines, 'Tie::File', $file or die $!; $o->_twrite($newdata, $pos, $len); undef $o; untie @lines; open F, "< $file" or die "Couldn't open file $file: $!"; binmode F; my $actual; { local $/; $actual = <F>; } close F; my ($alen, $xlen) = (length $actual, length $expected); unless ($alen == $xlen) { print "# try(@_) expected file length $xlen, actual $alen!\n"; } print $actual eq $expected ? "ok $N\n" : "not ok $N\n"; $N++;}use POSIX 'SEEK_SET';sub check_contents { my @c = @_; my $x = join $:, @c, ''; local *FH = $o->{fh}; seek FH, 0, SEEK_SET;# my $open = open FH, "< $file"; my $a; { local $/; $a = <FH> } $a = "" unless defined $a; if ($a eq $x) { print "ok $N\n"; } else { ctrlfix($a, $x); print "not ok $N\n# expected <$x>, got <$a>\n"; } $N++; # now check FETCH: my $good = 1; my $msg; for (0.. $#c) { my $aa = $a[$_]; unless ($aa eq "$c[$_]$:") { $msg = "expected <$c[$_]$:>, got <$aa>"; ctrlfix($msg); $good = 0; } } print $good ? "ok $N\n" : "not ok $N # $msg\n"; $N++; print $o->_check_integrity($file, $ENV{INTEGRITY}) ? "ok $N\n" : "not ok $N\n"; $N++;}sub ctrlfix { for (@_) { s/\n/\\n/g; s/\r/\\r/g; }}END { undef $o; untie @a; 1 while unlink $file;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -