From 5c703671161cbfa729024cd607f2460af4307265 Mon Sep 17 00:00:00 2001 From: Nyeogmi Date: Sun, 7 Apr 2024 15:49:37 -0700 Subject: [PATCH] Image is now mapped to a pixel-identical image --- Cargo.lock | 113 +++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/main.rs | 2 +- src/transform.rs | 33 +++++++++++++- 4 files changed, 147 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5bb0f33..d5c2054 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -29,6 +38,16 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "env_logger" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" +dependencies = [ + "log", + "regex", +] + [[package]] name = "fdeflate" version = "0.3.4" @@ -48,6 +67,35 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "getrandom" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06fddc2749e0528d2813f95e050e87e52c8cbbae56223b9babf73b3e53b0cc6" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + [[package]] name = "miniz_oxide" version = "0.7.2" @@ -71,11 +119,70 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "quickcheck" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6" +dependencies = [ + "env_logger", + "log", + "rand", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "regex" +version = "1.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" + [[package]] name = "rximg" version = "0.1.0" dependencies = [ "png", + "quickcheck", ] [[package]] @@ -83,3 +190,9 @@ name = "simd-adler32" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" diff --git a/Cargo.toml b/Cargo.toml index e3b2ca0..f8d7e39 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,3 +7,4 @@ edition = "2021" [dependencies] png = "0.17.13" +quickcheck = "1.0.3" diff --git a/src/main.rs b/src/main.rs index a438137..01027aa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -70,7 +70,7 @@ fn save_image(width: usize, height: usize, image: Vec>) { assert_eq!(image.len(), 3); let mut encoder = png::Encoder::new( - File::create("outputs/avatar2.png").unwrap(), + File::create("outputs/avatar2_out.png").unwrap(), width as u32, height as u32, ); encoder.set_color(ColorType::Rgb); diff --git a/src/transform.rs b/src/transform.rs index 4b35d68..8faeb1c 100644 --- a/src/transform.rs +++ b/src/transform.rs @@ -37,4 +37,35 @@ fn transform(data: &mut [i32], zero: usize, stride: usize, divisor: i32) { for i in 0..TILE_SZ { data[ix(GRAY[i])] = row[i] / divisor; } -} \ No newline at end of file +} + +#[cfg(test)] +mod tests { + use quickcheck::{quickcheck, Arbitrary}; + + use crate::{constants::TILE_SZ, transform::{decode, encode}}; + + #[derive(Clone, Debug)] + struct Encodable { args: [i32; TILE_SZ] } + + impl Arbitrary for Encodable { + fn arbitrary(g: &mut quickcheck::Gen) -> Self { + let mut args = [0; TILE_SZ]; + for i in 0..TILE_SZ { + args[i] = i16::arbitrary(g) as i32; + } + return Encodable { args }; + } + } + + quickcheck! { + fn reversible(xs: Encodable) -> bool { + let orig = xs.args; + let mut enc = orig.clone(); + encode(&mut enc, 0, 1); + let mut dec = enc.clone(); + decode(&mut dec, 0, 1); + orig == dec + } + } +}