mirror of
https://github.com/sharkdp/hexyl.git
synced 2026-10-30 09:05:54 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
82c34fe39b | ||
|
|
c4028bb213 | ||
|
|
def066ff92 | ||
|
|
17c2c61bad |
No files matched your search
Generated
+29
-22
@@ -13,8 +13,8 @@ name = "atty"
|
|||||||
version = "0.2.11"
|
version = "0.2.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"termion 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -25,12 +25,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.0.35"
|
version = "1.0.37"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
version = "0.1.7"
|
version = "0.1.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -50,21 +50,21 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ctrlc"
|
name = "ctrlc"
|
||||||
version = "3.1.1"
|
version = "3.1.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"nix 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"nix 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hexyl"
|
name = "hexyl"
|
||||||
version = "0.5.0"
|
version = "0.5.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
"atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"ctrlc 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"ctrlc 3.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -78,21 +78,26 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.51"
|
version = "0.2.55"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nix"
|
name = "nix"
|
||||||
version = "0.11.0"
|
version = "0.13.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"cc 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
"cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "numtoa"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.1.54"
|
version = "0.1.54"
|
||||||
@@ -117,16 +122,17 @@ version = "0.3.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "termion"
|
name = "termion"
|
||||||
version = "1.5.1"
|
version = "1.5.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
"redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
@@ -188,18 +194,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
|
"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
|
||||||
"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652"
|
"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652"
|
||||||
"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
|
"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
|
||||||
"checksum cc 1.0.35 (registry+https://github.com/rust-lang/crates.io-index)" = "5e5f3fee5eeb60324c2781f1e41286bdee933850fff9b3c672587fed5ec58c83"
|
"checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d"
|
||||||
"checksum cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "11d43355396e872eefb45ce6342e4374ed7bc2b3a502d1b28e36d6e23c05d1f4"
|
"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
|
||||||
"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
|
"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
|
||||||
"checksum ctrlc 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "630391922b1b893692c6334369ff528dcc3a9d8061ccf4c803aa8f83cb13db5e"
|
"checksum ctrlc 3.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5531b7f0698d9220b4729f8811931dbe0e91a05be2f7b3245fdc50dd856bae26"
|
||||||
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
|
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
|
||||||
"checksum libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)" = "bedcc7a809076656486ffe045abeeac163da1b558e963a31e29fbfbeba916917"
|
"checksum libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)" = "42914d39aad277d9e176efbdad68acb1d5443ab65afe0e0e4f0d49352a950880"
|
||||||
"checksum nix 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d37e713a259ff641624b6cb20e3b12b2952313ba36b6823c0f16e6cfd9e5de17"
|
"checksum nix 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46f0f3210768d796e8fa79ec70ee6af172dacbe7147f5e69be5240a47778302b"
|
||||||
|
"checksum numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef"
|
||||||
"checksum redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)" = "12229c14a0f65c4f1cb046a3b52047cdd9da1f4b30f8a39c5063c8bae515e252"
|
"checksum redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)" = "12229c14a0f65c4f1cb046a3b52047cdd9da1f4b30f8a39c5063c8bae515e252"
|
||||||
"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
|
"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
|
||||||
"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
|
"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
|
||||||
"checksum term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9e5b9a66db815dcfd2da92db471106457082577c3c278d4138ab3e3b4e189327"
|
"checksum term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9e5b9a66db815dcfd2da92db471106457082577c3c278d4138ab3e3b4e189327"
|
||||||
"checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"
|
"checksum termion 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dde0593aeb8d47accea5392b39350015b5eccb12c0d98044d856983d89548dea"
|
||||||
"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
|
"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
|
||||||
"checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526"
|
"checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526"
|
||||||
"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
|
"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@ license = "MIT/Apache-2.0"
|
|||||||
name = "hexyl"
|
name = "hexyl"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
repository = "https://github.com/sharkdp/hexyl"
|
repository = "https://github.com/sharkdp/hexyl"
|
||||||
version = "0.5.0"
|
version = "0.5.1"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ of bytes (NULL bytes, printable ASCII characters, ASCII whitespace characters, o
|
|||||||
### On Debian-based systems
|
### On Debian-based systems
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
wget "https://github.com/sharkdp/hexyl/releases/download/v0.5.0/hexyl_0.5.0_amd64.deb"
|
wget "https://github.com/sharkdp/hexyl/releases/download/v0.5.1/hexyl_0.5.1_amd64.deb"
|
||||||
sudo dpkg -i hexyl_0.5.0_amd64.deb
|
sudo dpkg -i hexyl_0.5.1_amd64.deb
|
||||||
```
|
```
|
||||||
|
|
||||||
### On Arch Linux
|
### On Arch Linux
|
||||||
|
|||||||
+7
-2
@@ -16,8 +16,8 @@ use clap::{App, AppSettings, Arg};
|
|||||||
use ansi_term::Color;
|
use ansi_term::Color;
|
||||||
use ansi_term::Color::Fixed;
|
use ansi_term::Color::Fixed;
|
||||||
|
|
||||||
use atty::Stream;
|
|
||||||
use crate::squeezer::{SqueezeAction, Squeezer};
|
use crate::squeezer::{SqueezeAction, Squeezer};
|
||||||
|
use atty::Stream;
|
||||||
|
|
||||||
const BUFFER_SIZE: usize = 256;
|
const BUFFER_SIZE: usize = 256;
|
||||||
|
|
||||||
@@ -369,10 +369,15 @@ impl<'a> Printer<'a> {
|
|||||||
SqueezeAction::Print => {
|
SqueezeAction::Print => {
|
||||||
self.buffer_line.clear();
|
self.buffer_line.clear();
|
||||||
let style = COLOR_OFFSET.normal();
|
let style = COLOR_OFFSET.normal();
|
||||||
|
let asterisk = if self.show_color {
|
||||||
|
format!("{}", style.paint("*"))
|
||||||
|
} else {
|
||||||
|
String::from("*")
|
||||||
|
};
|
||||||
let _ = writeln!(
|
let _ = writeln!(
|
||||||
&mut self.buffer_line,
|
&mut self.buffer_line,
|
||||||
"{5}{0}{1:2$}{5}{1:3$}{6}{1:3$}{5}{1:4$}{6}{1:4$}{5}",
|
"{5}{0}{1:2$}{5}{1:3$}{6}{1:3$}{5}{1:4$}{6}{1:4$}{5}",
|
||||||
style.paint("*"),
|
asterisk,
|
||||||
"",
|
"",
|
||||||
7,
|
7,
|
||||||
25,
|
25,
|
||||||
|
|||||||
+174
-35
@@ -54,6 +54,9 @@ impl Squeezer {
|
|||||||
let eq = b == self.byte;
|
let eq = b == self.byte;
|
||||||
|
|
||||||
if i % LSIZE == 0 {
|
if i % LSIZE == 0 {
|
||||||
|
if !eq {
|
||||||
|
self.state = Probe;
|
||||||
|
} else {
|
||||||
self.state = match self.state {
|
self.state = match self.state {
|
||||||
NoSqueeze => Probe,
|
NoSqueeze => Probe,
|
||||||
Probe => SqueezeActiveFirstLine,
|
Probe => SqueezeActiveFirstLine,
|
||||||
@@ -63,8 +66,11 @@ impl Squeezer {
|
|||||||
Squeeze => SqueezeActive,
|
Squeeze => SqueezeActive,
|
||||||
Disabled => Disabled,
|
Disabled => Disabled,
|
||||||
};
|
};
|
||||||
|
}
|
||||||
} else if !eq {
|
} else if !eq {
|
||||||
if (i % LSIZE == 1 && self.state != Probe) || i % LSIZE != 1 {
|
if i % LSIZE == 1 {
|
||||||
|
self.state = Probe;
|
||||||
|
} else if i % LSIZE != 1 {
|
||||||
self.state = NoSqueeze;
|
self.state = NoSqueeze;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,19 +119,23 @@ mod tests {
|
|||||||
SqueezeAction::Delete, // delete reoccurring line
|
SqueezeAction::Delete, // delete reoccurring line
|
||||||
];
|
];
|
||||||
|
|
||||||
for z in 0..LINES {
|
let mut line = 0;
|
||||||
for i in z * LSIZE..(z + 1) * LSIZE {
|
let mut idx = 1;
|
||||||
s.process(v[i], i + 1);
|
for z in v.chunks(LSIZE) {
|
||||||
|
for i in z {
|
||||||
|
s.process(*i, idx);
|
||||||
|
idx += 1;
|
||||||
}
|
}
|
||||||
assert_eq!(s.action(), exp[z]);
|
let action = s.action();
|
||||||
|
assert_eq!(action, exp[line]);
|
||||||
|
line += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn incomplete_while_squeeze() {
|
fn incomplete_while_squeeze() {
|
||||||
const LINES: usize = 3;
|
// fourth line only has 12 bytes and should be printed
|
||||||
// third line only has 12 bytes and should be printed
|
let v = vec![0u8; 3 * LSIZE + 12];
|
||||||
let v = vec![0u8; LINES * LSIZE + 12];
|
|
||||||
let mut s = Squeezer::new(true);
|
let mut s = Squeezer::new(true);
|
||||||
// just initialized
|
// just initialized
|
||||||
assert_eq!(s.action(), SqueezeAction::Ignore);
|
assert_eq!(s.action(), SqueezeAction::Ignore);
|
||||||
@@ -137,23 +147,21 @@ mod tests {
|
|||||||
SqueezeAction::Ignore, // last line only 12 bytes, print it
|
SqueezeAction::Ignore, // last line only 12 bytes, print it
|
||||||
];
|
];
|
||||||
|
|
||||||
for z in 0..LINES {
|
let mut line = 0;
|
||||||
for i in z * LSIZE..(z + 1) * LSIZE {
|
let mut idx = 1;
|
||||||
s.process(v[i], i + 1);
|
for z in v.chunks(LSIZE) {
|
||||||
|
for i in z {
|
||||||
|
s.process(*i, idx);
|
||||||
|
idx += 1;
|
||||||
}
|
}
|
||||||
assert_eq!(s.action(), exp[z]);
|
assert_eq!(s.action(), exp[line]);
|
||||||
|
line += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for i in LSIZE * LINES..LINES * LSIZE + 12 {
|
|
||||||
s.process(v[i], i + 1);
|
|
||||||
}
|
|
||||||
assert_eq!(s.action(), exp[3]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
/// all three lines are different, print all
|
/// all three lines are different, print all
|
||||||
fn three_different_lines() {
|
fn three_different_lines() {
|
||||||
const LINES: usize = 3;
|
|
||||||
let mut v: Vec<u8> = vec![];
|
let mut v: Vec<u8> = vec![];
|
||||||
v.extend(vec![0u8; 16]);
|
v.extend(vec![0u8; 16]);
|
||||||
v.extend(vec![1u8; 16]);
|
v.extend(vec![1u8; 16]);
|
||||||
@@ -169,11 +177,16 @@ mod tests {
|
|||||||
SqueezeAction::Ignore, // different
|
SqueezeAction::Ignore, // different
|
||||||
];
|
];
|
||||||
|
|
||||||
for z in 0..LINES {
|
let mut line = 0;
|
||||||
for i in z * LSIZE..(z + 1) * LSIZE {
|
let mut idx = 1;
|
||||||
s.process(v[i], i + 1);
|
for z in v.chunks(LSIZE) {
|
||||||
|
for i in z {
|
||||||
|
s.process(*i, idx);
|
||||||
|
idx += 1;
|
||||||
}
|
}
|
||||||
assert_eq!(s.action(), exp[z]);
|
let action = s.action();
|
||||||
|
assert_eq!(action, exp[line]);
|
||||||
|
line += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,11 +208,16 @@ mod tests {
|
|||||||
SqueezeAction::Ignore, // different lines, print again
|
SqueezeAction::Ignore, // different lines, print again
|
||||||
];
|
];
|
||||||
|
|
||||||
for z in 0..LINES {
|
let mut line = 0;
|
||||||
for i in z * LSIZE..(z + 1) * LSIZE {
|
let mut idx = 1;
|
||||||
s.process(v[i], i + 1);
|
for z in v.chunks(LSIZE) {
|
||||||
|
for i in z {
|
||||||
|
s.process(*i, idx);
|
||||||
|
idx += 1;
|
||||||
}
|
}
|
||||||
assert_eq!(s.action(), exp[z]);
|
let action = s.action();
|
||||||
|
assert_eq!(action, exp[line]);
|
||||||
|
line += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,18 +238,22 @@ mod tests {
|
|||||||
SqueezeAction::Ignore, // print squeeze symbol
|
SqueezeAction::Ignore, // print squeeze symbol
|
||||||
];
|
];
|
||||||
|
|
||||||
for z in 0..LINES {
|
let mut line = 0;
|
||||||
for i in z * LSIZE..(z + 1) * LSIZE {
|
let mut idx = 1;
|
||||||
s.process(v[i], i + 1);
|
for z in v.chunks(LSIZE) {
|
||||||
|
for i in z {
|
||||||
|
s.process(*i, idx);
|
||||||
|
idx += 1;
|
||||||
}
|
}
|
||||||
assert_eq!(s.action(), exp[z]);
|
let action = s.action();
|
||||||
|
assert_eq!(action, exp[line]);
|
||||||
|
line += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
/// all three lines never become squeeze candidate (diff within line)
|
/// all three lines never become squeeze candidate (diff within line)
|
||||||
fn never_squeeze_candidate() {
|
fn never_squeeze_candidate() {
|
||||||
const LINES: usize = 3;
|
|
||||||
let mut v = vec![];
|
let mut v = vec![];
|
||||||
v.extend(vec![0u8; 8]);
|
v.extend(vec![0u8; 8]);
|
||||||
v.extend(vec![1u8; 8]);
|
v.extend(vec![1u8; 8]);
|
||||||
@@ -250,11 +272,128 @@ mod tests {
|
|||||||
SqueezeAction::Ignore, // print squeeze symbol
|
SqueezeAction::Ignore, // print squeeze symbol
|
||||||
];
|
];
|
||||||
|
|
||||||
for z in 0..LINES {
|
let mut line = 0;
|
||||||
for i in z * LSIZE..(z + 1) * LSIZE {
|
let mut idx = 1;
|
||||||
s.process(v[i], i + 1);
|
for z in v.chunks(LSIZE) {
|
||||||
|
for i in z {
|
||||||
|
s.process(*i, idx);
|
||||||
|
idx += 1;
|
||||||
}
|
}
|
||||||
assert_eq!(s.action(), exp[z]);
|
let action = s.action();
|
||||||
|
assert_eq!(action, exp[line]);
|
||||||
|
line += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn mix_everything() {
|
||||||
|
let mut v = vec![];
|
||||||
|
v.extend(vec![10u8; 16]); // print
|
||||||
|
v.extend(vec![20u8; 16]); // print
|
||||||
|
v.extend(vec![0u8; 16]); // print
|
||||||
|
v.extend(vec![0u8; 16]); // *
|
||||||
|
v.extend(vec![10u8; 16]); // print
|
||||||
|
v.extend(vec![20u8; 16]); // print
|
||||||
|
v.extend(vec![0u8; 16]); // print
|
||||||
|
v.extend(vec![0u8; 16]); // *
|
||||||
|
v.extend(vec![0u8; 16]); // delete
|
||||||
|
v.extend(vec![0u8; 16]); // delete*
|
||||||
|
v.extend(vec![20u8; 16]); // print
|
||||||
|
v.extend(vec![0u8; 12]); // print, only 12 bytes
|
||||||
|
|
||||||
|
let mut s = Squeezer::new(true);
|
||||||
|
// just initialized
|
||||||
|
assert_eq!(s.action(), SqueezeAction::Ignore);
|
||||||
|
|
||||||
|
let exp = vec![
|
||||||
|
SqueezeAction::Ignore,
|
||||||
|
SqueezeAction::Ignore,
|
||||||
|
SqueezeAction::Ignore,
|
||||||
|
SqueezeAction::Print,
|
||||||
|
SqueezeAction::Ignore,
|
||||||
|
SqueezeAction::Ignore,
|
||||||
|
SqueezeAction::Ignore,
|
||||||
|
SqueezeAction::Print,
|
||||||
|
SqueezeAction::Delete,
|
||||||
|
SqueezeAction::Delete,
|
||||||
|
SqueezeAction::Ignore,
|
||||||
|
SqueezeAction::Ignore,
|
||||||
|
];
|
||||||
|
|
||||||
|
let mut line = 0;
|
||||||
|
let mut idx = 1;
|
||||||
|
for z in v.chunks(LSIZE) {
|
||||||
|
for i in z {
|
||||||
|
s.process(*i, idx);
|
||||||
|
idx += 1;
|
||||||
|
}
|
||||||
|
let action = s.action();
|
||||||
|
assert_eq!(action, exp[line]);
|
||||||
|
line += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn last_char_diff() {
|
||||||
|
// see issue #62
|
||||||
|
let mut v = vec![];
|
||||||
|
v.extend(vec![20u8; 16]);
|
||||||
|
v.extend(vec![20u8; 15]);
|
||||||
|
v.push(61);
|
||||||
|
v.extend(vec![20u8; 16]);
|
||||||
|
v.extend(vec![20u8; 16]);
|
||||||
|
|
||||||
|
let mut s = Squeezer::new(true);
|
||||||
|
// just initialized
|
||||||
|
assert_eq!(s.action(), SqueezeAction::Ignore);
|
||||||
|
|
||||||
|
let exp = vec![
|
||||||
|
SqueezeAction::Ignore, // print as is
|
||||||
|
SqueezeAction::Ignore, // print as is
|
||||||
|
SqueezeAction::Ignore, // print as is
|
||||||
|
SqueezeAction::Print, // print '*' char
|
||||||
|
];
|
||||||
|
|
||||||
|
let mut line = 0;
|
||||||
|
let mut idx = 1;
|
||||||
|
for z in v.chunks(LSIZE) {
|
||||||
|
for i in z {
|
||||||
|
s.process(*i, idx);
|
||||||
|
idx += 1;
|
||||||
|
}
|
||||||
|
assert_eq!(s.action(), exp[line]);
|
||||||
|
line += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn first_char_diff() {
|
||||||
|
// see issue #62
|
||||||
|
let mut v = vec![];
|
||||||
|
v.extend(vec![20u8; 16]);
|
||||||
|
v.push(61);
|
||||||
|
v.extend(vec![20u8; 15]);
|
||||||
|
v.extend(vec![20u8; 16]);
|
||||||
|
|
||||||
|
let mut s = Squeezer::new(true);
|
||||||
|
// just initialized
|
||||||
|
assert_eq!(s.action(), SqueezeAction::Ignore);
|
||||||
|
|
||||||
|
let exp = vec![
|
||||||
|
SqueezeAction::Ignore, // print as is
|
||||||
|
SqueezeAction::Ignore, // print as is
|
||||||
|
SqueezeAction::Ignore, // print as is
|
||||||
|
];
|
||||||
|
|
||||||
|
let mut line = 0;
|
||||||
|
let mut idx = 1;
|
||||||
|
for z in v.chunks(LSIZE) {
|
||||||
|
for i in z {
|
||||||
|
s.process(*i, idx);
|
||||||
|
idx += 1;
|
||||||
|
}
|
||||||
|
assert_eq!(s.action(), exp[line]);
|
||||||
|
line += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user