diff --git a/Cargo.toml b/Cargo.toml index fa63dc900..98684fceb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,50 +1,46 @@ -[package] -name = "pica" +[workspace] +resolver = "2" +default-members = ["pica-toolkit"] + +members = [ + "pica-lint", + "pica-matcher", + "pica-path", + "pica-record", + "pica-select", + "pica-toolkit" +] + +[workspace.package] version = "0.17.0" authors = ["Nico Wagner "] -edition = "2021" license = "MIT OR Unlicense" -default-run = "pica" +readme = "./README.md" +keywords = ["PICA+", "code4lib"] +edition = "2021" -[dependencies] -arrow2 = { version = "0.17", features = ["io_ipc", "io_ipc_compression"] } -bstr = "1.5" -clap = { version = "4.3", features = ["cargo", "derive", "wrap_help"] } +[workspace.dependencies] +pica-matcher = { version = "0.17", path = "./pica-matcher" } +pica-path = { version = "0.17", path = "./pica-path" } +pica-record = { version = "0.17", path = "./pica-record" } +pica-select = { version = "0.17", path = "./pica-select" } + +anyhow = "1.0" +arrow2 = "0.17" +bstr = "1.6" +chrono = { version = "0.4", default-features = false } +clap = "4.3" clap_complete = "4.3" csv = "1.2" -directories = "5.0" flate2 = "1.0" nom = "7.1" -quick-xml = "0.29" rand = "0.8" -regex = "1.8" -serde = { version = "1.0", features = ["derive"] } +regex = "1.9" +serde = "1.0" serde_json = "1.0" -strsim = "0.10" -termcolor = "1.2" +sha2 = "0.10" +thiserror = "1.0" toml = "0.7" -unicode-normalization = "0.1" - -pica-matcher = { version = "0.1", path = "pica-matcher" } -pica-path = { version = "0.2", path = "pica-path" } -pica-record = { version = "0.1", path = "pica-record" } -pica-select = { version = "0.1", path = "pica-select" } - -[dev-dependencies] -assert_cmd = "2.0" -predicates = "3.0" -quickcheck = "1.0" -quickcheck_macros = "1.0" -tempfile = "3.2" -trycmd = "0.14" - -[lib] -path = "src/lib.rs" -name = "pica" - -[[bin]] -path = "src/bin/pica/main.rs" -name = "pica" [profile.release] codegen-units = 1 @@ -54,12 +50,3 @@ lto = true [profile.dev] debug = 0 -[workspace] - -members = [ - "pica-lint", - "pica-matcher", - "pica-path", - "pica-record", - "pica-select" -] diff --git a/pica-lint/Cargo.toml b/pica-lint/Cargo.toml index 2d6180671..cd128b618 100644 --- a/pica-lint/Cargo.toml +++ b/pica-lint/Cargo.toml @@ -1,23 +1,25 @@ [package] name = "pica-lint" version = "0.1.0" -edition = "2021" -authors = ["Nico Wagner "] -license = "MIT OR Unlicense" +authors.workspace = true +license.workspace = true +readme.workspace = true +keywords.workspace = true +edition.workspace = true [dependencies] -anyhow = "1.0" -bstr = "1.5" -clap = { version = "4.3", features = ["cargo", "derive", "wrap_help"] } -chrono = { version = "0.4", default-features = false, features = ["clock"] } -csv = "1.2" -flate2 = "1.0" -indicatif = "0.17" -once_cell = "1.17" -serde = { version = "1.0", features = ["derive"] } -sophia = "0.7" -toml = "0.7" +anyhow = { workspace = true } +bstr = { workspace = true } +chrono = { workspace = true, features = ["clock"] } +clap = { workspace = true, features = ["cargo", "derive", "wrap_help"] } +csv = { workspace = true } +flate2 = { workspace = true } +indicatif = { version = "0.17" } +once_cell = { version = "1.17" } +pica-matcher = { workspace = true, features = ["serde"] } +pica-path = { workspace = true, features = ["serde"] } +pica-record = { workspace = true } +serde = { workspace = true, features = ["derive"] } +sophia = { version = "0.7" } +toml = { workspace = true } -pica-matcher = { version = "0.1", path = "../pica-matcher", features = ["serde"] } -pica-path = { version = "0.2", path = "../pica-path", features = ["serde"] } -pica-record = { version = "0.1", path = "../pica-record" } diff --git a/pica-matcher/CHANGELOG.md b/pica-matcher/CHANGELOG.md deleted file mode 100644 index e4d809c5f..000000000 --- a/pica-matcher/CHANGELOG.md +++ /dev/null @@ -1,24 +0,0 @@ -# Changelog - -All notable changes to this crate will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [Unreleased] - -### Added - -* #611 Allow negation of a field matcher in curly bracket notation -* #612 Support of double quoted string literals - -## v0.1.0 - -### Added - -* #539 Add `TagMatcher` matcher -* #530 Add `OccurrenceMatcher` matcher -* #541 Add `SubfieldMatcher` matcher -* #547 Add `FieldMatcher` matcher -* #548 Add `RecordMatcher` matcher -* #549 Add `Deserialize` for `RecordMatcher` diff --git a/pica-matcher/Cargo.toml b/pica-matcher/Cargo.toml index ea5479ae2..c788fa070 100644 --- a/pica-matcher/Cargo.toml +++ b/pica-matcher/Cargo.toml @@ -1,20 +1,20 @@ [package] name = "pica-matcher" -version = "0.1.0" -license = "MIT OR Unlicense" -authors = ["Nico Wagner "] -include = ["src/**/*"] -edition = "2021" +version.workspace = true +authors.workspace = true +license.workspace = true +readme.workspace = true +keywords.workspace = true +edition.workspace = true [dependencies] -bstr = "1.5" -nom = "7.1" -regex = "1.8" +bstr = { workspace = true } +nom = { workspace = true } +pica-record = { workspace = true } +regex = { workspace = true } +serde = { workspace = true, optional = true } strsim = "0.10" -thiserror = "1.0" -serde = { version = "1.0", optional = true } - -pica-record = { version = "0.1", path = "../pica-record" } +thiserror = { workspace = true } [dev-dependencies] anyhow = "1.0" diff --git a/pica-matcher/tests/record_matcher.rs b/pica-matcher/tests/record_matcher.rs index 6b5adf71a..4930c8f3b 100644 --- a/pica-matcher/tests/record_matcher.rs +++ b/pica-matcher/tests/record_matcher.rs @@ -10,7 +10,7 @@ fn ada_lovelace() -> &'static [u8] { DATA.get_or_init(|| { let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); let path = Path::new(&manifest_dir) - .join("../tests/data/119232022.dat"); + .join("../pica-toolkit/tests/data/119232022.dat"); eprintln!("{:?}", path); fs::read_to_string(&path).unwrap().as_bytes().to_vec() }) diff --git a/pica-path/CHANGELOG.md b/pica-path/CHANGELOG.md deleted file mode 100644 index 2f686f4ac..000000000 --- a/pica-path/CHANGELOG.md +++ /dev/null @@ -1,29 +0,0 @@ -# Changelog - -All notable changes to this crate will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - - -## [UNRELEASED] - - -## [v0.2.0] - 2023-03-23 - -### Added - -* #577 Allow optional subfield matcher in a path expression -* #596 Add set-builder notation for path expressions - - -## [v0.1.0] - 2023-01-17 - -### Added - -* #550 Add initial `pica-path` crate -* #551 Implement `Deserialize` for `Path` - -### Fixed - -* #555 Use `first()` instead of `iter().next()` diff --git a/pica-path/Cargo.toml b/pica-path/Cargo.toml index ac6256e08..026761684 100644 --- a/pica-path/Cargo.toml +++ b/pica-path/Cargo.toml @@ -1,18 +1,19 @@ [package] name = "pica-path" -version = "0.2.0" -edition = "2021" -authors = ["Nico Wagner "] -license = "MIT OR Unlicense" +version.workspace = true +authors.workspace = true +license.workspace = true +readme.workspace = true +keywords.workspace = true +edition.workspace = true [dependencies] -bstr = "1.5" -nom = "7.1" -thiserror = "1.0" -serde = { version = "1.0", optional = true } - -pica-matcher = { version = "0.1", path = "../pica-matcher" } -pica-record = { version = "0.1", path = "../pica-record" } +bstr = { workspace = true } +nom = { workspace = true } +pica-matcher = { workspace = true } +pica-record = { workspace = true } +serde = { workspace = true, optional = true } +thiserror = { workspace = true } [dev-dependencies] anyhow = "1.0" diff --git a/pica-path/tests/path.rs b/pica-path/tests/path.rs index e14a7e4a8..772e89c9d 100644 --- a/pica-path/tests/path.rs +++ b/pica-path/tests/path.rs @@ -12,7 +12,7 @@ fn ada_lovelace() -> &'static [u8] { DATA.get_or_init(|| { let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); let path = Path::new(&manifest_dir) - .join("../tests/data/119232022.dat"); + .join("../pica-toolkit/tests/data/119232022.dat"); eprintln!("{:?}", path); fs::read_to_string(&path).unwrap().as_bytes().to_vec() }) diff --git a/pica-record/CHANGELOG.md b/pica-record/CHANGELOG.md deleted file mode 100644 index 3a83cbdcb..000000000 --- a/pica-record/CHANGELOG.md +++ /dev/null @@ -1,39 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - - -## [Unreleased] - -### Added - -* #625 Implement `Hash` for `ByteRecord` -* #626 Implement `sha256` for `ByteRecord` - -## v0.1.0 - -### Added - -* #521 Add `RecordRef::write_to` function -* #520 Add `BufReadExt` extension trait -* #528 Add `ByteRecord` writer API -* #530 Add `raw_data` field (`ByteRecord`) -* #562 Add `Reader` and `ReaderBuilder` - -### Fixed - -* #531 Fix wrong assert expression (`WriterBuilder`) - -## 0.1.0 - 2022-10-14 - -### Added - -* #489 Add `ByteRecord` and `StringRecord` -* #485 Add `Field` and `FieldRef` -* #484 Add `OccurenceRef` and `OccurenceRef` -* #487 Add `RecordRef` and `Record` -* #481 Add `SubfieldRef` and `Subfield` -* #483 Add `TagRef` and `Tag` diff --git a/pica-record/Cargo.toml b/pica-record/Cargo.toml index c154145a3..3e9f3ddb1 100644 --- a/pica-record/Cargo.toml +++ b/pica-record/Cargo.toml @@ -1,17 +1,18 @@ [package] name = "pica-record" -version = "0.1.0" -license = "MIT OR Unlicense" -authors = ["Nico Wagner "] -include = ["src/**/*"] -edition = "2021" +version.workspace = true +authors.workspace = true +license.workspace = true +readme.workspace = true +keywords.workspace = true +edition.workspace = true [dependencies] -bstr = "1.5" -flate2 = "1.0" -nom = "7.1" -sha2 = "0.10" -thiserror = "1.0" +bstr = { workspace = true } +flate2 = { workspace = true } +nom = { workspace = true } +sha2 = { workspace = true } +thiserror = { workspace = true } [dev-dependencies] anyhow = "1.0" diff --git a/pica-select/Cargo.toml b/pica-select/Cargo.toml index 61de847f4..be317f1ec 100644 --- a/pica-select/Cargo.toml +++ b/pica-select/Cargo.toml @@ -1,19 +1,20 @@ [package] name = "pica-select" -version = "0.1.0" -authors = ["Nico Wagner "] -edition = "2021" -license = "MIT OR Unlicense" +version.workspace = true +authors.workspace = true +license.workspace = true +readme.workspace = true +keywords.workspace = true +edition.workspace = true [dependencies] -thiserror = "1.0" -nom = "7.1" - -pica-matcher = { version = "0.1", path = "../pica-matcher" } -pica-path = { version = "0.2", path = "../pica-path" } -pica-record = { version = "0.1", path = "../pica-record" } +nom = { workspace = true } +pica-matcher = { workspace = true } +pica-path = { workspace = true } +pica-record = { workspace = true } +thiserror = { workspace = true } [dev-dependencies] -bstr = "1.5" +bstr = { workspace = true } nom-test-helpers = "6.1" -anyhow = "1.0" +anyhow = { workspace = true } diff --git a/pica-toolkit/Cargo.toml b/pica-toolkit/Cargo.toml new file mode 100644 index 000000000..e5248accc --- /dev/null +++ b/pica-toolkit/Cargo.toml @@ -0,0 +1,43 @@ +[package] +name = "pica-toolkit" +version.workspace = true +authors.workspace = true +license.workspace = true +readme.workspace = true +keywords.workspace = true +edition.workspace = true + +[dependencies] +arrow2 = { workspace = true, features = ["io_ipc", "io_ipc_compression"] } +bstr = { workspace = true } +clap = { workspace = true, features = ["cargo", "derive", "wrap_help"] } +clap_complete = { workspace = true } +csv = { workspace = true } +directories = { version = "5.0" } +flate2 = { workspace = true } +nom = { workspace = true } +pica-matcher = { workspace = true } +pica-path = { workspace = true } +pica-record = { workspace = true } +pica-select = { workspace = true } +quick-xml = { version = "0.29" } +rand = { workspace = true } +regex = { workspace = true } +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true } +strsim = { version = "0.10" } +termcolor = { version = "1.2" } +toml = { workspace = true } +unicode-normalization = { version = "0.1" } + +[dev-dependencies] +assert_cmd = "2.0" +predicates = "3.0" +quickcheck = "1.0" +quickcheck_macros = "1.0" +tempfile = "3.2" +trycmd = "0.14" + +[[bin]] +path = "src/main.rs" +name = "pica" diff --git a/src/bin/pica/cli.rs b/pica-toolkit/src/cli.rs similarity index 100% rename from src/bin/pica/cli.rs rename to pica-toolkit/src/cli.rs diff --git a/src/bin/pica/commands/cat.rs b/pica-toolkit/src/commands/cat.rs similarity index 100% rename from src/bin/pica/commands/cat.rs rename to pica-toolkit/src/commands/cat.rs diff --git a/src/bin/pica/commands/completions.rs b/pica-toolkit/src/commands/completions.rs similarity index 100% rename from src/bin/pica/commands/completions.rs rename to pica-toolkit/src/commands/completions.rs diff --git a/src/bin/pica/commands/convert/binary.rs b/pica-toolkit/src/commands/convert/binary.rs similarity index 100% rename from src/bin/pica/commands/convert/binary.rs rename to pica-toolkit/src/commands/convert/binary.rs diff --git a/src/bin/pica/commands/convert/import.rs b/pica-toolkit/src/commands/convert/import.rs similarity index 100% rename from src/bin/pica/commands/convert/import.rs rename to pica-toolkit/src/commands/convert/import.rs diff --git a/src/bin/pica/commands/convert/json.rs b/pica-toolkit/src/commands/convert/json.rs similarity index 100% rename from src/bin/pica/commands/convert/json.rs rename to pica-toolkit/src/commands/convert/json.rs diff --git a/src/bin/pica/commands/convert/mod.rs b/pica-toolkit/src/commands/convert/mod.rs similarity index 100% rename from src/bin/pica/commands/convert/mod.rs rename to pica-toolkit/src/commands/convert/mod.rs diff --git a/src/bin/pica/commands/convert/plain.rs b/pica-toolkit/src/commands/convert/plain.rs similarity index 100% rename from src/bin/pica/commands/convert/plain.rs rename to pica-toolkit/src/commands/convert/plain.rs diff --git a/src/bin/pica/commands/convert/xml.rs b/pica-toolkit/src/commands/convert/xml.rs similarity index 100% rename from src/bin/pica/commands/convert/xml.rs rename to pica-toolkit/src/commands/convert/xml.rs diff --git a/src/bin/pica/commands/count.rs b/pica-toolkit/src/commands/count.rs similarity index 100% rename from src/bin/pica/commands/count.rs rename to pica-toolkit/src/commands/count.rs diff --git a/src/bin/pica/commands/filter.rs b/pica-toolkit/src/commands/filter.rs similarity index 100% rename from src/bin/pica/commands/filter.rs rename to pica-toolkit/src/commands/filter.rs diff --git a/src/bin/pica/commands/frequency.rs b/pica-toolkit/src/commands/frequency.rs similarity index 100% rename from src/bin/pica/commands/frequency.rs rename to pica-toolkit/src/commands/frequency.rs diff --git a/src/bin/pica/commands/hash.rs b/pica-toolkit/src/commands/hash.rs similarity index 100% rename from src/bin/pica/commands/hash.rs rename to pica-toolkit/src/commands/hash.rs diff --git a/src/bin/pica/commands/invalid.rs b/pica-toolkit/src/commands/invalid.rs similarity index 100% rename from src/bin/pica/commands/invalid.rs rename to pica-toolkit/src/commands/invalid.rs diff --git a/src/bin/pica/commands/mod.rs b/pica-toolkit/src/commands/mod.rs similarity index 100% rename from src/bin/pica/commands/mod.rs rename to pica-toolkit/src/commands/mod.rs diff --git a/src/bin/pica/commands/partition.rs b/pica-toolkit/src/commands/partition.rs similarity index 100% rename from src/bin/pica/commands/partition.rs rename to pica-toolkit/src/commands/partition.rs diff --git a/src/bin/pica/commands/print.rs b/pica-toolkit/src/commands/print.rs similarity index 100% rename from src/bin/pica/commands/print.rs rename to pica-toolkit/src/commands/print.rs diff --git a/src/bin/pica/commands/sample.rs b/pica-toolkit/src/commands/sample.rs similarity index 100% rename from src/bin/pica/commands/sample.rs rename to pica-toolkit/src/commands/sample.rs diff --git a/src/bin/pica/commands/select.rs b/pica-toolkit/src/commands/select.rs similarity index 100% rename from src/bin/pica/commands/select.rs rename to pica-toolkit/src/commands/select.rs diff --git a/src/bin/pica/commands/slice.rs b/pica-toolkit/src/commands/slice.rs similarity index 100% rename from src/bin/pica/commands/slice.rs rename to pica-toolkit/src/commands/slice.rs diff --git a/src/bin/pica/commands/split.rs b/pica-toolkit/src/commands/split.rs similarity index 100% rename from src/bin/pica/commands/split.rs rename to pica-toolkit/src/commands/split.rs diff --git a/src/bin/pica/common.rs b/pica-toolkit/src/common.rs similarity index 100% rename from src/bin/pica/common.rs rename to pica-toolkit/src/common.rs diff --git a/src/bin/pica/config.rs b/pica-toolkit/src/config.rs similarity index 100% rename from src/bin/pica/config.rs rename to pica-toolkit/src/config.rs diff --git a/src/bin/pica/macros.rs b/pica-toolkit/src/macros.rs similarity index 100% rename from src/bin/pica/macros.rs rename to pica-toolkit/src/macros.rs diff --git a/src/bin/pica/main.rs b/pica-toolkit/src/main.rs similarity index 100% rename from src/bin/pica/main.rs rename to pica-toolkit/src/main.rs diff --git a/src/bin/pica/translit.rs b/pica-toolkit/src/translit.rs similarity index 100% rename from src/bin/pica/translit.rs rename to pica-toolkit/src/translit.rs diff --git a/src/bin/pica/util.rs b/pica-toolkit/src/util.rs similarity index 100% rename from src/bin/pica/util.rs rename to pica-toolkit/src/util.rs diff --git a/tests/data/000008672.dat b/pica-toolkit/tests/data/000008672.dat similarity index 100% rename from tests/data/000008672.dat rename to pica-toolkit/tests/data/000008672.dat diff --git a/tests/data/000009229.dat b/pica-toolkit/tests/data/000009229.dat similarity index 100% rename from tests/data/000009229.dat rename to pica-toolkit/tests/data/000009229.dat diff --git a/tests/data/000016586.dat b/pica-toolkit/tests/data/000016586.dat similarity index 100% rename from tests/data/000016586.dat rename to pica-toolkit/tests/data/000016586.dat diff --git a/tests/data/000016756.dat b/pica-toolkit/tests/data/000016756.dat similarity index 100% rename from tests/data/000016756.dat rename to pica-toolkit/tests/data/000016756.dat diff --git a/tests/data/004732650-nfc.dat.gz b/pica-toolkit/tests/data/004732650-nfc.dat.gz similarity index 100% rename from tests/data/004732650-nfc.dat.gz rename to pica-toolkit/tests/data/004732650-nfc.dat.gz diff --git a/tests/data/004732650-nfc.json b/pica-toolkit/tests/data/004732650-nfc.json similarity index 100% rename from tests/data/004732650-nfc.json rename to pica-toolkit/tests/data/004732650-nfc.json diff --git a/tests/data/004732650-nfc.txt b/pica-toolkit/tests/data/004732650-nfc.txt similarity index 100% rename from tests/data/004732650-nfc.txt rename to pica-toolkit/tests/data/004732650-nfc.txt diff --git a/tests/data/004732650-nfc.xml b/pica-toolkit/tests/data/004732650-nfc.xml similarity index 100% rename from tests/data/004732650-nfc.xml rename to pica-toolkit/tests/data/004732650-nfc.xml diff --git a/tests/data/004732650-nfd.json b/pica-toolkit/tests/data/004732650-nfd.json similarity index 100% rename from tests/data/004732650-nfd.json rename to pica-toolkit/tests/data/004732650-nfd.json diff --git a/tests/data/004732650-nfd.txt b/pica-toolkit/tests/data/004732650-nfd.txt similarity index 100% rename from tests/data/004732650-nfd.txt rename to pica-toolkit/tests/data/004732650-nfd.txt diff --git a/tests/data/004732650-nfd.xml b/pica-toolkit/tests/data/004732650-nfd.xml similarity index 100% rename from tests/data/004732650-nfd.xml rename to pica-toolkit/tests/data/004732650-nfd.xml diff --git a/tests/data/004732650-reduced.dat.gz b/pica-toolkit/tests/data/004732650-reduced.dat.gz similarity index 100% rename from tests/data/004732650-reduced.dat.gz rename to pica-toolkit/tests/data/004732650-reduced.dat.gz diff --git a/tests/data/004732650.dat.gz b/pica-toolkit/tests/data/004732650.dat.gz similarity index 100% rename from tests/data/004732650.dat.gz rename to pica-toolkit/tests/data/004732650.dat.gz diff --git a/tests/data/004732650.txt b/pica-toolkit/tests/data/004732650.txt similarity index 100% rename from tests/data/004732650.txt rename to pica-toolkit/tests/data/004732650.txt diff --git a/tests/data/1004916019-color1.txt b/pica-toolkit/tests/data/1004916019-color1.txt similarity index 100% rename from tests/data/1004916019-color1.txt rename to pica-toolkit/tests/data/1004916019-color1.txt diff --git a/tests/data/1004916019-color2.txt b/pica-toolkit/tests/data/1004916019-color2.txt similarity index 100% rename from tests/data/1004916019-color2.txt rename to pica-toolkit/tests/data/1004916019-color2.txt diff --git a/tests/data/1004916019-spaces.txt b/pica-toolkit/tests/data/1004916019-spaces.txt similarity index 100% rename from tests/data/1004916019-spaces.txt rename to pica-toolkit/tests/data/1004916019-spaces.txt diff --git a/tests/data/1004916019.dat b/pica-toolkit/tests/data/1004916019.dat similarity index 100% rename from tests/data/1004916019.dat rename to pica-toolkit/tests/data/1004916019.dat diff --git a/tests/data/1004916019.dat.gz b/pica-toolkit/tests/data/1004916019.dat.gz similarity index 100% rename from tests/data/1004916019.dat.gz rename to pica-toolkit/tests/data/1004916019.dat.gz diff --git a/tests/data/1004916019.json b/pica-toolkit/tests/data/1004916019.json similarity index 100% rename from tests/data/1004916019.json rename to pica-toolkit/tests/data/1004916019.json diff --git a/tests/data/1004916019.txt b/pica-toolkit/tests/data/1004916019.txt similarity index 100% rename from tests/data/1004916019.txt rename to pica-toolkit/tests/data/1004916019.txt diff --git a/tests/data/1004916019.xml b/pica-toolkit/tests/data/1004916019.xml similarity index 100% rename from tests/data/1004916019.xml rename to pica-toolkit/tests/data/1004916019.xml diff --git a/tests/data/1004916019_reduced.dat b/pica-toolkit/tests/data/1004916019_reduced.dat similarity index 100% rename from tests/data/1004916019_reduced.dat rename to pica-toolkit/tests/data/1004916019_reduced.dat diff --git a/tests/data/1029350469.dat.gz b/pica-toolkit/tests/data/1029350469.dat.gz similarity index 100% rename from tests/data/1029350469.dat.gz rename to pica-toolkit/tests/data/1029350469.dat.gz diff --git a/tests/data/1029350469_r1.dat b/pica-toolkit/tests/data/1029350469_r1.dat similarity index 100% rename from tests/data/1029350469_r1.dat rename to pica-toolkit/tests/data/1029350469_r1.dat diff --git a/tests/data/1029350469_r2.dat b/pica-toolkit/tests/data/1029350469_r2.dat similarity index 100% rename from tests/data/1029350469_r2.dat rename to pica-toolkit/tests/data/1029350469_r2.dat diff --git a/tests/data/1029350469_r3.dat b/pica-toolkit/tests/data/1029350469_r3.dat similarity index 100% rename from tests/data/1029350469_r3.dat rename to pica-toolkit/tests/data/1029350469_r3.dat diff --git a/tests/data/1029350469_r4.dat b/pica-toolkit/tests/data/1029350469_r4.dat similarity index 100% rename from tests/data/1029350469_r4.dat rename to pica-toolkit/tests/data/1029350469_r4.dat diff --git a/tests/data/118515551.dat b/pica-toolkit/tests/data/118515551.dat similarity index 100% rename from tests/data/118515551.dat rename to pica-toolkit/tests/data/118515551.dat diff --git a/tests/data/118515551.dat.gz b/pica-toolkit/tests/data/118515551.dat.gz similarity index 100% rename from tests/data/118515551.dat.gz rename to pica-toolkit/tests/data/118515551.dat.gz diff --git a/tests/data/119232022.dat b/pica-toolkit/tests/data/119232022.dat similarity index 100% rename from tests/data/119232022.dat rename to pica-toolkit/tests/data/119232022.dat diff --git a/tests/data/119232022.dat.gz b/pica-toolkit/tests/data/119232022.dat.gz similarity index 100% rename from tests/data/119232022.dat.gz rename to pica-toolkit/tests/data/119232022.dat.gz diff --git a/tests/data/121169502.dat b/pica-toolkit/tests/data/121169502.dat similarity index 100% rename from tests/data/121169502.dat rename to pica-toolkit/tests/data/121169502.dat diff --git a/tests/data/algebra.dat.gz b/pica-toolkit/tests/data/algebra.dat.gz similarity index 100% rename from tests/data/algebra.dat.gz rename to pica-toolkit/tests/data/algebra.dat.gz diff --git a/tests/data/allow_list.arrow b/pica-toolkit/tests/data/allow_list.arrow similarity index 100% rename from tests/data/allow_list.arrow rename to pica-toolkit/tests/data/allow_list.arrow diff --git a/tests/data/allow_list.csv b/pica-toolkit/tests/data/allow_list.csv similarity index 100% rename from tests/data/allow_list.csv rename to pica-toolkit/tests/data/allow_list.csv diff --git a/tests/data/deny_list.arrow b/pica-toolkit/tests/data/deny_list.arrow similarity index 100% rename from tests/data/deny_list.arrow rename to pica-toolkit/tests/data/deny_list.arrow diff --git a/tests/data/deny_list.csv b/pica-toolkit/tests/data/deny_list.csv similarity index 100% rename from tests/data/deny_list.csv rename to pica-toolkit/tests/data/deny_list.csv diff --git a/tests/data/dollar.dat b/pica-toolkit/tests/data/dollar.dat similarity index 100% rename from tests/data/dollar.dat rename to pica-toolkit/tests/data/dollar.dat diff --git a/tests/data/dollar.txt b/pica-toolkit/tests/data/dollar.txt similarity index 100% rename from tests/data/dollar.txt rename to pica-toolkit/tests/data/dollar.txt diff --git a/tests/data/dump.csv b/pica-toolkit/tests/data/dump.csv similarity index 100% rename from tests/data/dump.csv rename to pica-toolkit/tests/data/dump.csv diff --git a/tests/data/dump.dat.gz b/pica-toolkit/tests/data/dump.dat.gz similarity index 100% rename from tests/data/dump.dat.gz rename to pica-toolkit/tests/data/dump.dat.gz diff --git a/tests/data/dump.json b/pica-toolkit/tests/data/dump.json similarity index 100% rename from tests/data/dump.json rename to pica-toolkit/tests/data/dump.json diff --git a/tests/data/dump.txt b/pica-toolkit/tests/data/dump.txt similarity index 100% rename from tests/data/dump.txt rename to pica-toolkit/tests/data/dump.txt diff --git a/tests/data/dump.xml b/pica-toolkit/tests/data/dump.xml similarity index 100% rename from tests/data/dump.xml rename to pica-toolkit/tests/data/dump.xml diff --git a/tests/data/dump_cnt.csv b/pica-toolkit/tests/data/dump_cnt.csv similarity index 100% rename from tests/data/dump_cnt.csv rename to pica-toolkit/tests/data/dump_cnt.csv diff --git a/tests/data/dump_cnt.tsv b/pica-toolkit/tests/data/dump_cnt.tsv similarity index 100% rename from tests/data/dump_cnt.tsv rename to pica-toolkit/tests/data/dump_cnt.tsv diff --git a/tests/data/dump_cnt.txt b/pica-toolkit/tests/data/dump_cnt.txt similarity index 100% rename from tests/data/dump_cnt.txt rename to pica-toolkit/tests/data/dump_cnt.txt diff --git a/tests/data/filter.txt b/pica-toolkit/tests/data/filter.txt similarity index 100% rename from tests/data/filter.txt rename to pica-toolkit/tests/data/filter.txt diff --git a/tests/data/invalid.dat b/pica-toolkit/tests/data/invalid.dat similarity index 100% rename from tests/data/invalid.dat rename to pica-toolkit/tests/data/invalid.dat diff --git a/tests/data/invalid.xml b/pica-toolkit/tests/data/invalid.xml similarity index 100% rename from tests/data/invalid.xml rename to pica-toolkit/tests/data/invalid.xml diff --git a/tests/data/invalid_cnt.txt b/pica-toolkit/tests/data/invalid_cnt.txt similarity index 100% rename from tests/data/invalid_cnt.txt rename to pica-toolkit/tests/data/invalid_cnt.txt diff --git a/tests/data/two-records.xml b/pica-toolkit/tests/data/two-records.xml similarity index 100% rename from tests/data/two-records.xml rename to pica-toolkit/tests/data/two-records.xml diff --git a/tests/data/tworecs.json b/pica-toolkit/tests/data/tworecs.json similarity index 100% rename from tests/data/tworecs.json rename to pica-toolkit/tests/data/tworecs.json diff --git a/tests/main.rs b/pica-toolkit/tests/main.rs similarity index 100% rename from tests/main.rs rename to pica-toolkit/tests/main.rs diff --git a/tests/snapshot.rs b/pica-toolkit/tests/snapshot.rs similarity index 100% rename from tests/snapshot.rs rename to pica-toolkit/tests/snapshot.rs diff --git a/tests/snapshot/cat/000-cat-multiple-files-output.in/algebra.dat b/pica-toolkit/tests/snapshot/cat/000-cat-multiple-files-output.in/algebra.dat similarity index 100% rename from tests/snapshot/cat/000-cat-multiple-files-output.in/algebra.dat rename to pica-toolkit/tests/snapshot/cat/000-cat-multiple-files-output.in/algebra.dat diff --git a/tests/snapshot/cat/000-cat-multiple-files-output.in/math.dat.gz b/pica-toolkit/tests/snapshot/cat/000-cat-multiple-files-output.in/math.dat.gz similarity index 100% rename from tests/snapshot/cat/000-cat-multiple-files-output.in/math.dat.gz rename to pica-toolkit/tests/snapshot/cat/000-cat-multiple-files-output.in/math.dat.gz diff --git a/tests/snapshot/cat/000-cat-multiple-files-output.out/out.dat b/pica-toolkit/tests/snapshot/cat/000-cat-multiple-files-output.out/out.dat similarity index 100% rename from tests/snapshot/cat/000-cat-multiple-files-output.out/out.dat rename to pica-toolkit/tests/snapshot/cat/000-cat-multiple-files-output.out/out.dat diff --git a/tests/snapshot/cat/000-cat-multiple-files-output.toml b/pica-toolkit/tests/snapshot/cat/000-cat-multiple-files-output.toml similarity index 100% rename from tests/snapshot/cat/000-cat-multiple-files-output.toml rename to pica-toolkit/tests/snapshot/cat/000-cat-multiple-files-output.toml diff --git a/tests/snapshot/cat/001-cat-multiple-files-stdout.in/algebra.dat b/pica-toolkit/tests/snapshot/cat/001-cat-multiple-files-stdout.in/algebra.dat similarity index 100% rename from tests/snapshot/cat/001-cat-multiple-files-stdout.in/algebra.dat rename to pica-toolkit/tests/snapshot/cat/001-cat-multiple-files-stdout.in/algebra.dat diff --git a/tests/snapshot/cat/001-cat-multiple-files-stdout.in/math.dat.gz b/pica-toolkit/tests/snapshot/cat/001-cat-multiple-files-stdout.in/math.dat.gz similarity index 100% rename from tests/snapshot/cat/001-cat-multiple-files-stdout.in/math.dat.gz rename to pica-toolkit/tests/snapshot/cat/001-cat-multiple-files-stdout.in/math.dat.gz diff --git a/tests/snapshot/cat/001-cat-multiple-files-stdout.stdout b/pica-toolkit/tests/snapshot/cat/001-cat-multiple-files-stdout.stdout similarity index 100% rename from tests/snapshot/cat/001-cat-multiple-files-stdout.stdout rename to pica-toolkit/tests/snapshot/cat/001-cat-multiple-files-stdout.stdout diff --git a/tests/snapshot/cat/001-cat-multiple-files-stdout.toml b/pica-toolkit/tests/snapshot/cat/001-cat-multiple-files-stdout.toml similarity index 100% rename from tests/snapshot/cat/001-cat-multiple-files-stdout.toml rename to pica-toolkit/tests/snapshot/cat/001-cat-multiple-files-stdout.toml diff --git a/tests/snapshot/cat/002-cat-single-file-output.in/math.dat.gz b/pica-toolkit/tests/snapshot/cat/002-cat-single-file-output.in/math.dat.gz similarity index 100% rename from tests/snapshot/cat/002-cat-single-file-output.in/math.dat.gz rename to pica-toolkit/tests/snapshot/cat/002-cat-single-file-output.in/math.dat.gz diff --git a/tests/snapshot/cat/002-cat-single-file-output.out/out.dat b/pica-toolkit/tests/snapshot/cat/002-cat-single-file-output.out/out.dat similarity index 100% rename from tests/snapshot/cat/002-cat-single-file-output.out/out.dat rename to pica-toolkit/tests/snapshot/cat/002-cat-single-file-output.out/out.dat diff --git a/tests/snapshot/cat/002-cat-single-file-output.toml b/pica-toolkit/tests/snapshot/cat/002-cat-single-file-output.toml similarity index 100% rename from tests/snapshot/cat/002-cat-single-file-output.toml rename to pica-toolkit/tests/snapshot/cat/002-cat-single-file-output.toml diff --git a/tests/snapshot/cat/003-cat-single-file-stdout.in/math.dat.gz b/pica-toolkit/tests/snapshot/cat/003-cat-single-file-stdout.in/math.dat.gz similarity index 100% rename from tests/snapshot/cat/003-cat-single-file-stdout.in/math.dat.gz rename to pica-toolkit/tests/snapshot/cat/003-cat-single-file-stdout.in/math.dat.gz diff --git a/tests/snapshot/cat/003-cat-single-file-stdout.stdout b/pica-toolkit/tests/snapshot/cat/003-cat-single-file-stdout.stdout similarity index 100% rename from tests/snapshot/cat/003-cat-single-file-stdout.stdout rename to pica-toolkit/tests/snapshot/cat/003-cat-single-file-stdout.stdout diff --git a/tests/snapshot/cat/003-cat-single-file-stdout.toml b/pica-toolkit/tests/snapshot/cat/003-cat-single-file-stdout.toml similarity index 100% rename from tests/snapshot/cat/003-cat-single-file-stdout.toml rename to pica-toolkit/tests/snapshot/cat/003-cat-single-file-stdout.toml diff --git a/tests/snapshot/cat/004-cat-skip-invalid.in/algebra.dat b/pica-toolkit/tests/snapshot/cat/004-cat-skip-invalid.in/algebra.dat similarity index 100% rename from tests/snapshot/cat/004-cat-skip-invalid.in/algebra.dat rename to pica-toolkit/tests/snapshot/cat/004-cat-skip-invalid.in/algebra.dat diff --git a/tests/snapshot/cat/004-cat-skip-invalid.in/invalid.dat b/pica-toolkit/tests/snapshot/cat/004-cat-skip-invalid.in/invalid.dat similarity index 100% rename from tests/snapshot/cat/004-cat-skip-invalid.in/invalid.dat rename to pica-toolkit/tests/snapshot/cat/004-cat-skip-invalid.in/invalid.dat diff --git a/tests/snapshot/cat/004-cat-skip-invalid.out/out.dat b/pica-toolkit/tests/snapshot/cat/004-cat-skip-invalid.out/out.dat similarity index 100% rename from tests/snapshot/cat/004-cat-skip-invalid.out/out.dat rename to pica-toolkit/tests/snapshot/cat/004-cat-skip-invalid.out/out.dat diff --git a/tests/snapshot/cat/004-cat-skip-invalid.toml b/pica-toolkit/tests/snapshot/cat/004-cat-skip-invalid.toml similarity index 100% rename from tests/snapshot/cat/004-cat-skip-invalid.toml rename to pica-toolkit/tests/snapshot/cat/004-cat-skip-invalid.toml diff --git a/tests/snapshot/cat/005-cat-gzip-output.in/algebra.dat b/pica-toolkit/tests/snapshot/cat/005-cat-gzip-output.in/algebra.dat similarity index 100% rename from tests/snapshot/cat/005-cat-gzip-output.in/algebra.dat rename to pica-toolkit/tests/snapshot/cat/005-cat-gzip-output.in/algebra.dat diff --git a/tests/snapshot/cat/005-cat-gzip-output.out/out.dat.gz b/pica-toolkit/tests/snapshot/cat/005-cat-gzip-output.out/out.dat.gz similarity index 100% rename from tests/snapshot/cat/005-cat-gzip-output.out/out.dat.gz rename to pica-toolkit/tests/snapshot/cat/005-cat-gzip-output.out/out.dat.gz diff --git a/tests/snapshot/cat/005-cat-gzip-output.toml b/pica-toolkit/tests/snapshot/cat/005-cat-gzip-output.toml similarity index 100% rename from tests/snapshot/cat/005-cat-gzip-output.toml rename to pica-toolkit/tests/snapshot/cat/005-cat-gzip-output.toml diff --git a/tests/snapshot/cat/006-cat-gzip-flag.in/algebra.dat b/pica-toolkit/tests/snapshot/cat/006-cat-gzip-flag.in/algebra.dat similarity index 100% rename from tests/snapshot/cat/006-cat-gzip-flag.in/algebra.dat rename to pica-toolkit/tests/snapshot/cat/006-cat-gzip-flag.in/algebra.dat diff --git a/tests/snapshot/cat/006-cat-gzip-flag.out/out.dat b/pica-toolkit/tests/snapshot/cat/006-cat-gzip-flag.out/out.dat similarity index 100% rename from tests/snapshot/cat/006-cat-gzip-flag.out/out.dat rename to pica-toolkit/tests/snapshot/cat/006-cat-gzip-flag.out/out.dat diff --git a/tests/snapshot/cat/006-cat-gzip-flag.toml b/pica-toolkit/tests/snapshot/cat/006-cat-gzip-flag.toml similarity index 100% rename from tests/snapshot/cat/006-cat-gzip-flag.toml rename to pica-toolkit/tests/snapshot/cat/006-cat-gzip-flag.toml diff --git a/tests/snapshot/cat/007-cat-tee-writer.in/algebra.dat b/pica-toolkit/tests/snapshot/cat/007-cat-tee-writer.in/algebra.dat similarity index 100% rename from tests/snapshot/cat/007-cat-tee-writer.in/algebra.dat rename to pica-toolkit/tests/snapshot/cat/007-cat-tee-writer.in/algebra.dat diff --git a/tests/snapshot/cat/007-cat-tee-writer.out/tee.dat b/pica-toolkit/tests/snapshot/cat/007-cat-tee-writer.out/tee.dat similarity index 100% rename from tests/snapshot/cat/007-cat-tee-writer.out/tee.dat rename to pica-toolkit/tests/snapshot/cat/007-cat-tee-writer.out/tee.dat diff --git a/tests/snapshot/cat/007-cat-tee-writer.stdout b/pica-toolkit/tests/snapshot/cat/007-cat-tee-writer.stdout similarity index 100% rename from tests/snapshot/cat/007-cat-tee-writer.stdout rename to pica-toolkit/tests/snapshot/cat/007-cat-tee-writer.stdout diff --git a/tests/snapshot/cat/007-cat-tee-writer.toml b/pica-toolkit/tests/snapshot/cat/007-cat-tee-writer.toml similarity index 100% rename from tests/snapshot/cat/007-cat-tee-writer.toml rename to pica-toolkit/tests/snapshot/cat/007-cat-tee-writer.toml diff --git a/tests/snapshot/cat/008-cat-append-output.in/math.dat.gz b/pica-toolkit/tests/snapshot/cat/008-cat-append-output.in/math.dat.gz similarity index 100% rename from tests/snapshot/cat/008-cat-append-output.in/math.dat.gz rename to pica-toolkit/tests/snapshot/cat/008-cat-append-output.in/math.dat.gz diff --git a/tests/snapshot/cat/008-cat-append-output.in/out.dat b/pica-toolkit/tests/snapshot/cat/008-cat-append-output.in/out.dat similarity index 100% rename from tests/snapshot/cat/008-cat-append-output.in/out.dat rename to pica-toolkit/tests/snapshot/cat/008-cat-append-output.in/out.dat diff --git a/tests/snapshot/cat/008-cat-append-output.out/out.dat b/pica-toolkit/tests/snapshot/cat/008-cat-append-output.out/out.dat similarity index 100% rename from tests/snapshot/cat/008-cat-append-output.out/out.dat rename to pica-toolkit/tests/snapshot/cat/008-cat-append-output.out/out.dat diff --git a/tests/snapshot/cat/008-cat-append-output.toml b/pica-toolkit/tests/snapshot/cat/008-cat-append-output.toml similarity index 100% rename from tests/snapshot/cat/008-cat-append-output.toml rename to pica-toolkit/tests/snapshot/cat/008-cat-append-output.toml diff --git a/tests/snapshot/cat/009-cat-stdin1-stdout.stdin b/pica-toolkit/tests/snapshot/cat/009-cat-stdin1-stdout.stdin similarity index 100% rename from tests/snapshot/cat/009-cat-stdin1-stdout.stdin rename to pica-toolkit/tests/snapshot/cat/009-cat-stdin1-stdout.stdin diff --git a/tests/snapshot/cat/009-cat-stdin1-stdout.stdout b/pica-toolkit/tests/snapshot/cat/009-cat-stdin1-stdout.stdout similarity index 100% rename from tests/snapshot/cat/009-cat-stdin1-stdout.stdout rename to pica-toolkit/tests/snapshot/cat/009-cat-stdin1-stdout.stdout diff --git a/tests/snapshot/cat/009-cat-stdin1-stdout.toml b/pica-toolkit/tests/snapshot/cat/009-cat-stdin1-stdout.toml similarity index 100% rename from tests/snapshot/cat/009-cat-stdin1-stdout.toml rename to pica-toolkit/tests/snapshot/cat/009-cat-stdin1-stdout.toml diff --git a/tests/snapshot/cat/010-cat-stdin2-stdout.stdin b/pica-toolkit/tests/snapshot/cat/010-cat-stdin2-stdout.stdin similarity index 100% rename from tests/snapshot/cat/010-cat-stdin2-stdout.stdin rename to pica-toolkit/tests/snapshot/cat/010-cat-stdin2-stdout.stdin diff --git a/tests/snapshot/cat/010-cat-stdin2-stdout.stdout b/pica-toolkit/tests/snapshot/cat/010-cat-stdin2-stdout.stdout similarity index 100% rename from tests/snapshot/cat/010-cat-stdin2-stdout.stdout rename to pica-toolkit/tests/snapshot/cat/010-cat-stdin2-stdout.stdout diff --git a/tests/snapshot/cat/010-cat-stdin2-stdout.toml b/pica-toolkit/tests/snapshot/cat/010-cat-stdin2-stdout.toml similarity index 100% rename from tests/snapshot/cat/010-cat-stdin2-stdout.toml rename to pica-toolkit/tests/snapshot/cat/010-cat-stdin2-stdout.toml diff --git a/tests/snapshot/cat/011-cat-stdin-file-mixed.in/math.dat.gz b/pica-toolkit/tests/snapshot/cat/011-cat-stdin-file-mixed.in/math.dat.gz similarity index 100% rename from tests/snapshot/cat/011-cat-stdin-file-mixed.in/math.dat.gz rename to pica-toolkit/tests/snapshot/cat/011-cat-stdin-file-mixed.in/math.dat.gz diff --git a/tests/snapshot/cat/011-cat-stdin-file-mixed.out/out.dat.gz b/pica-toolkit/tests/snapshot/cat/011-cat-stdin-file-mixed.out/out.dat.gz similarity index 100% rename from tests/snapshot/cat/011-cat-stdin-file-mixed.out/out.dat.gz rename to pica-toolkit/tests/snapshot/cat/011-cat-stdin-file-mixed.out/out.dat.gz diff --git a/tests/snapshot/cat/011-cat-stdin-file-mixed.stdin b/pica-toolkit/tests/snapshot/cat/011-cat-stdin-file-mixed.stdin similarity index 100% rename from tests/snapshot/cat/011-cat-stdin-file-mixed.stdin rename to pica-toolkit/tests/snapshot/cat/011-cat-stdin-file-mixed.stdin diff --git a/tests/snapshot/cat/011-cat-stdin-file-mixed.toml b/pica-toolkit/tests/snapshot/cat/011-cat-stdin-file-mixed.toml similarity index 100% rename from tests/snapshot/cat/011-cat-stdin-file-mixed.toml rename to pica-toolkit/tests/snapshot/cat/011-cat-stdin-file-mixed.toml diff --git a/tests/snapshot/cat/012-cat-skip-invalid-config1.in/Pica.toml b/pica-toolkit/tests/snapshot/cat/012-cat-skip-invalid-config1.in/Pica.toml similarity index 100% rename from tests/snapshot/cat/012-cat-skip-invalid-config1.in/Pica.toml rename to pica-toolkit/tests/snapshot/cat/012-cat-skip-invalid-config1.in/Pica.toml diff --git a/tests/snapshot/cat/012-cat-skip-invalid-config1.in/algebra.dat b/pica-toolkit/tests/snapshot/cat/012-cat-skip-invalid-config1.in/algebra.dat similarity index 100% rename from tests/snapshot/cat/012-cat-skip-invalid-config1.in/algebra.dat rename to pica-toolkit/tests/snapshot/cat/012-cat-skip-invalid-config1.in/algebra.dat diff --git a/tests/snapshot/cat/012-cat-skip-invalid-config1.in/invalid.dat b/pica-toolkit/tests/snapshot/cat/012-cat-skip-invalid-config1.in/invalid.dat similarity index 100% rename from tests/snapshot/cat/012-cat-skip-invalid-config1.in/invalid.dat rename to pica-toolkit/tests/snapshot/cat/012-cat-skip-invalid-config1.in/invalid.dat diff --git a/tests/snapshot/cat/012-cat-skip-invalid-config1.stdout b/pica-toolkit/tests/snapshot/cat/012-cat-skip-invalid-config1.stdout similarity index 100% rename from tests/snapshot/cat/012-cat-skip-invalid-config1.stdout rename to pica-toolkit/tests/snapshot/cat/012-cat-skip-invalid-config1.stdout diff --git a/tests/snapshot/cat/012-cat-skip-invalid-config1.toml b/pica-toolkit/tests/snapshot/cat/012-cat-skip-invalid-config1.toml similarity index 100% rename from tests/snapshot/cat/012-cat-skip-invalid-config1.toml rename to pica-toolkit/tests/snapshot/cat/012-cat-skip-invalid-config1.toml diff --git a/tests/snapshot/cat/013-cat-skip-invalid-config2.in/Pica.toml b/pica-toolkit/tests/snapshot/cat/013-cat-skip-invalid-config2.in/Pica.toml similarity index 100% rename from tests/snapshot/cat/013-cat-skip-invalid-config2.in/Pica.toml rename to pica-toolkit/tests/snapshot/cat/013-cat-skip-invalid-config2.in/Pica.toml diff --git a/tests/snapshot/cat/013-cat-skip-invalid-config2.in/algebra.dat b/pica-toolkit/tests/snapshot/cat/013-cat-skip-invalid-config2.in/algebra.dat similarity index 100% rename from tests/snapshot/cat/013-cat-skip-invalid-config2.in/algebra.dat rename to pica-toolkit/tests/snapshot/cat/013-cat-skip-invalid-config2.in/algebra.dat diff --git a/tests/snapshot/cat/013-cat-skip-invalid-config2.in/invalid.dat b/pica-toolkit/tests/snapshot/cat/013-cat-skip-invalid-config2.in/invalid.dat similarity index 100% rename from tests/snapshot/cat/013-cat-skip-invalid-config2.in/invalid.dat rename to pica-toolkit/tests/snapshot/cat/013-cat-skip-invalid-config2.in/invalid.dat diff --git a/tests/snapshot/cat/013-cat-skip-invalid-config2.stdout b/pica-toolkit/tests/snapshot/cat/013-cat-skip-invalid-config2.stdout similarity index 100% rename from tests/snapshot/cat/013-cat-skip-invalid-config2.stdout rename to pica-toolkit/tests/snapshot/cat/013-cat-skip-invalid-config2.stdout diff --git a/tests/snapshot/cat/013-cat-skip-invalid-config2.toml b/pica-toolkit/tests/snapshot/cat/013-cat-skip-invalid-config2.toml similarity index 100% rename from tests/snapshot/cat/013-cat-skip-invalid-config2.toml rename to pica-toolkit/tests/snapshot/cat/013-cat-skip-invalid-config2.toml diff --git a/tests/snapshot/cat/014-cat-skip-invalid-config3.in/Pica.toml b/pica-toolkit/tests/snapshot/cat/014-cat-skip-invalid-config3.in/Pica.toml similarity index 100% rename from tests/snapshot/cat/014-cat-skip-invalid-config3.in/Pica.toml rename to pica-toolkit/tests/snapshot/cat/014-cat-skip-invalid-config3.in/Pica.toml diff --git a/tests/snapshot/cat/014-cat-skip-invalid-config3.in/algebra.dat b/pica-toolkit/tests/snapshot/cat/014-cat-skip-invalid-config3.in/algebra.dat similarity index 100% rename from tests/snapshot/cat/014-cat-skip-invalid-config3.in/algebra.dat rename to pica-toolkit/tests/snapshot/cat/014-cat-skip-invalid-config3.in/algebra.dat diff --git a/tests/snapshot/cat/014-cat-skip-invalid-config3.in/invalid.dat b/pica-toolkit/tests/snapshot/cat/014-cat-skip-invalid-config3.in/invalid.dat similarity index 100% rename from tests/snapshot/cat/014-cat-skip-invalid-config3.in/invalid.dat rename to pica-toolkit/tests/snapshot/cat/014-cat-skip-invalid-config3.in/invalid.dat diff --git a/tests/snapshot/cat/014-cat-skip-invalid-config3.stdout b/pica-toolkit/tests/snapshot/cat/014-cat-skip-invalid-config3.stdout similarity index 100% rename from tests/snapshot/cat/014-cat-skip-invalid-config3.stdout rename to pica-toolkit/tests/snapshot/cat/014-cat-skip-invalid-config3.stdout diff --git a/tests/snapshot/cat/014-cat-skip-invalid-config3.toml b/pica-toolkit/tests/snapshot/cat/014-cat-skip-invalid-config3.toml similarity index 100% rename from tests/snapshot/cat/014-cat-skip-invalid-config3.toml rename to pica-toolkit/tests/snapshot/cat/014-cat-skip-invalid-config3.toml diff --git a/tests/snapshot/cat/015-cat-missing-file.toml b/pica-toolkit/tests/snapshot/cat/015-cat-missing-file.toml similarity index 100% rename from tests/snapshot/cat/015-cat-missing-file.toml rename to pica-toolkit/tests/snapshot/cat/015-cat-missing-file.toml diff --git a/tests/snapshot/cat/016-cat-unique-idn.toml b/pica-toolkit/tests/snapshot/cat/016-cat-unique-idn.toml similarity index 100% rename from tests/snapshot/cat/016-cat-unique-idn.toml rename to pica-toolkit/tests/snapshot/cat/016-cat-unique-idn.toml diff --git a/tests/snapshot/cat/017-cat-unique-hash.toml b/pica-toolkit/tests/snapshot/cat/017-cat-unique-hash.toml similarity index 100% rename from tests/snapshot/cat/017-cat-unique-hash.toml rename to pica-toolkit/tests/snapshot/cat/017-cat-unique-hash.toml diff --git a/tests/snapshot/cat/018-cat-unique-no-idn.toml b/pica-toolkit/tests/snapshot/cat/018-cat-unique-no-idn.toml similarity index 100% rename from tests/snapshot/cat/018-cat-unique-no-idn.toml rename to pica-toolkit/tests/snapshot/cat/018-cat-unique-no-idn.toml diff --git a/tests/snapshot/completions/000-completions-bash.toml b/pica-toolkit/tests/snapshot/completions/000-completions-bash.toml similarity index 100% rename from tests/snapshot/completions/000-completions-bash.toml rename to pica-toolkit/tests/snapshot/completions/000-completions-bash.toml diff --git a/tests/snapshot/completions/001-completions-elvish.toml b/pica-toolkit/tests/snapshot/completions/001-completions-elvish.toml similarity index 100% rename from tests/snapshot/completions/001-completions-elvish.toml rename to pica-toolkit/tests/snapshot/completions/001-completions-elvish.toml diff --git a/tests/snapshot/completions/002-completions-fish.toml b/pica-toolkit/tests/snapshot/completions/002-completions-fish.toml similarity index 100% rename from tests/snapshot/completions/002-completions-fish.toml rename to pica-toolkit/tests/snapshot/completions/002-completions-fish.toml diff --git a/tests/snapshot/completions/003-completions-powershell.toml b/pica-toolkit/tests/snapshot/completions/003-completions-powershell.toml similarity index 100% rename from tests/snapshot/completions/003-completions-powershell.toml rename to pica-toolkit/tests/snapshot/completions/003-completions-powershell.toml diff --git a/tests/snapshot/completions/004-completions-zsh.toml b/pica-toolkit/tests/snapshot/completions/004-completions-zsh.toml similarity index 100% rename from tests/snapshot/completions/004-completions-zsh.toml rename to pica-toolkit/tests/snapshot/completions/004-completions-zsh.toml diff --git a/tests/snapshot/completions/005-completions-invalid.toml b/pica-toolkit/tests/snapshot/completions/005-completions-invalid.toml similarity index 100% rename from tests/snapshot/completions/005-completions-invalid.toml rename to pica-toolkit/tests/snapshot/completions/005-completions-invalid.toml diff --git a/tests/snapshot/completions/006-completions-output.out/.keep b/pica-toolkit/tests/snapshot/completions/006-completions-output.out/.keep similarity index 100% rename from tests/snapshot/completions/006-completions-output.out/.keep rename to pica-toolkit/tests/snapshot/completions/006-completions-output.out/.keep diff --git a/tests/snapshot/completions/006-completions-output.toml b/pica-toolkit/tests/snapshot/completions/006-completions-output.toml similarity index 100% rename from tests/snapshot/completions/006-completions-output.toml rename to pica-toolkit/tests/snapshot/completions/006-completions-output.toml diff --git a/tests/snapshot/count/001-count-dump-stdout.in/dump.dat.gz b/pica-toolkit/tests/snapshot/count/001-count-dump-stdout.in/dump.dat.gz similarity index 100% rename from tests/snapshot/count/001-count-dump-stdout.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/count/001-count-dump-stdout.in/dump.dat.gz diff --git a/tests/snapshot/count/001-count-dump-stdout.stdout b/pica-toolkit/tests/snapshot/count/001-count-dump-stdout.stdout similarity index 100% rename from tests/snapshot/count/001-count-dump-stdout.stdout rename to pica-toolkit/tests/snapshot/count/001-count-dump-stdout.stdout diff --git a/tests/snapshot/count/001-count-dump-stdout.toml b/pica-toolkit/tests/snapshot/count/001-count-dump-stdout.toml similarity index 100% rename from tests/snapshot/count/001-count-dump-stdout.toml rename to pica-toolkit/tests/snapshot/count/001-count-dump-stdout.toml diff --git a/tests/snapshot/count/002-count-dump-output.in/dump.dat.gz b/pica-toolkit/tests/snapshot/count/002-count-dump-output.in/dump.dat.gz similarity index 100% rename from tests/snapshot/count/002-count-dump-output.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/count/002-count-dump-output.in/dump.dat.gz diff --git a/tests/snapshot/count/002-count-dump-output.out/count.txt b/pica-toolkit/tests/snapshot/count/002-count-dump-output.out/count.txt similarity index 100% rename from tests/snapshot/count/002-count-dump-output.out/count.txt rename to pica-toolkit/tests/snapshot/count/002-count-dump-output.out/count.txt diff --git a/tests/snapshot/count/002-count-dump-output.toml b/pica-toolkit/tests/snapshot/count/002-count-dump-output.toml similarity index 100% rename from tests/snapshot/count/002-count-dump-output.toml rename to pica-toolkit/tests/snapshot/count/002-count-dump-output.toml diff --git a/tests/snapshot/count/003-count-multiple-files-stdout.in/algebra.dat b/pica-toolkit/tests/snapshot/count/003-count-multiple-files-stdout.in/algebra.dat similarity index 100% rename from tests/snapshot/count/003-count-multiple-files-stdout.in/algebra.dat rename to pica-toolkit/tests/snapshot/count/003-count-multiple-files-stdout.in/algebra.dat diff --git a/tests/snapshot/count/003-count-multiple-files-stdout.in/math.dat.gz b/pica-toolkit/tests/snapshot/count/003-count-multiple-files-stdout.in/math.dat.gz similarity index 100% rename from tests/snapshot/count/003-count-multiple-files-stdout.in/math.dat.gz rename to pica-toolkit/tests/snapshot/count/003-count-multiple-files-stdout.in/math.dat.gz diff --git a/tests/snapshot/count/003-count-multiple-files-stdout.stdout b/pica-toolkit/tests/snapshot/count/003-count-multiple-files-stdout.stdout similarity index 100% rename from tests/snapshot/count/003-count-multiple-files-stdout.stdout rename to pica-toolkit/tests/snapshot/count/003-count-multiple-files-stdout.stdout diff --git a/tests/snapshot/count/003-count-multiple-files-stdout.toml b/pica-toolkit/tests/snapshot/count/003-count-multiple-files-stdout.toml similarity index 100% rename from tests/snapshot/count/003-count-multiple-files-stdout.toml rename to pica-toolkit/tests/snapshot/count/003-count-multiple-files-stdout.toml diff --git a/tests/snapshot/count/004-count-stdin-stdout.stdin b/pica-toolkit/tests/snapshot/count/004-count-stdin-stdout.stdin similarity index 100% rename from tests/snapshot/count/004-count-stdin-stdout.stdin rename to pica-toolkit/tests/snapshot/count/004-count-stdin-stdout.stdin diff --git a/tests/snapshot/count/004-count-stdin-stdout.stdout b/pica-toolkit/tests/snapshot/count/004-count-stdin-stdout.stdout similarity index 100% rename from tests/snapshot/count/004-count-stdin-stdout.stdout rename to pica-toolkit/tests/snapshot/count/004-count-stdin-stdout.stdout diff --git a/tests/snapshot/count/004-count-stdin-stdout.toml b/pica-toolkit/tests/snapshot/count/004-count-stdin-stdout.toml similarity index 100% rename from tests/snapshot/count/004-count-stdin-stdout.toml rename to pica-toolkit/tests/snapshot/count/004-count-stdin-stdout.toml diff --git a/tests/snapshot/count/005-count-file-and-stdin.in/math.dat.gz b/pica-toolkit/tests/snapshot/count/005-count-file-and-stdin.in/math.dat.gz similarity index 100% rename from tests/snapshot/count/005-count-file-and-stdin.in/math.dat.gz rename to pica-toolkit/tests/snapshot/count/005-count-file-and-stdin.in/math.dat.gz diff --git a/tests/snapshot/count/005-count-file-and-stdin.stdin b/pica-toolkit/tests/snapshot/count/005-count-file-and-stdin.stdin similarity index 100% rename from tests/snapshot/count/005-count-file-and-stdin.stdin rename to pica-toolkit/tests/snapshot/count/005-count-file-and-stdin.stdin diff --git a/tests/snapshot/count/005-count-file-and-stdin.stdout b/pica-toolkit/tests/snapshot/count/005-count-file-and-stdin.stdout similarity index 100% rename from tests/snapshot/count/005-count-file-and-stdin.stdout rename to pica-toolkit/tests/snapshot/count/005-count-file-and-stdin.stdout diff --git a/tests/snapshot/count/005-count-file-and-stdin.toml b/pica-toolkit/tests/snapshot/count/005-count-file-and-stdin.toml similarity index 100% rename from tests/snapshot/count/005-count-file-and-stdin.toml rename to pica-toolkit/tests/snapshot/count/005-count-file-and-stdin.toml diff --git a/tests/snapshot/count/006-count-tsv-output.out/.keep b/pica-toolkit/tests/snapshot/count/006-count-tsv-output.out/.keep similarity index 100% rename from tests/snapshot/count/006-count-tsv-output.out/.keep rename to pica-toolkit/tests/snapshot/count/006-count-tsv-output.out/.keep diff --git a/tests/snapshot/count/006-count-tsv-output.stdin b/pica-toolkit/tests/snapshot/count/006-count-tsv-output.stdin similarity index 100% rename from tests/snapshot/count/006-count-tsv-output.stdin rename to pica-toolkit/tests/snapshot/count/006-count-tsv-output.stdin diff --git a/tests/snapshot/count/006-count-tsv-output.stdout b/pica-toolkit/tests/snapshot/count/006-count-tsv-output.stdout similarity index 100% rename from tests/snapshot/count/006-count-tsv-output.stdout rename to pica-toolkit/tests/snapshot/count/006-count-tsv-output.stdout diff --git a/tests/snapshot/count/006-count-tsv-output.toml b/pica-toolkit/tests/snapshot/count/006-count-tsv-output.toml similarity index 100% rename from tests/snapshot/count/006-count-tsv-output.toml rename to pica-toolkit/tests/snapshot/count/006-count-tsv-output.toml diff --git a/tests/snapshot/count/007-count-csv-output.out/.keep b/pica-toolkit/tests/snapshot/count/007-count-csv-output.out/.keep similarity index 100% rename from tests/snapshot/count/007-count-csv-output.out/.keep rename to pica-toolkit/tests/snapshot/count/007-count-csv-output.out/.keep diff --git a/tests/snapshot/count/007-count-csv-output.stdin b/pica-toolkit/tests/snapshot/count/007-count-csv-output.stdin similarity index 100% rename from tests/snapshot/count/007-count-csv-output.stdin rename to pica-toolkit/tests/snapshot/count/007-count-csv-output.stdin diff --git a/tests/snapshot/count/007-count-csv-output.stdout b/pica-toolkit/tests/snapshot/count/007-count-csv-output.stdout similarity index 100% rename from tests/snapshot/count/007-count-csv-output.stdout rename to pica-toolkit/tests/snapshot/count/007-count-csv-output.stdout diff --git a/tests/snapshot/count/007-count-csv-output.toml b/pica-toolkit/tests/snapshot/count/007-count-csv-output.toml similarity index 100% rename from tests/snapshot/count/007-count-csv-output.toml rename to pica-toolkit/tests/snapshot/count/007-count-csv-output.toml diff --git a/tests/snapshot/count/008-count-append-output.in/algebra.dat b/pica-toolkit/tests/snapshot/count/008-count-append-output.in/algebra.dat similarity index 100% rename from tests/snapshot/count/008-count-append-output.in/algebra.dat rename to pica-toolkit/tests/snapshot/count/008-count-append-output.in/algebra.dat diff --git a/tests/snapshot/count/008-count-append-output.in/math.dat.gz b/pica-toolkit/tests/snapshot/count/008-count-append-output.in/math.dat.gz similarity index 100% rename from tests/snapshot/count/008-count-append-output.in/math.dat.gz rename to pica-toolkit/tests/snapshot/count/008-count-append-output.in/math.dat.gz diff --git a/tests/snapshot/count/008-count-append-output.out/count.txt b/pica-toolkit/tests/snapshot/count/008-count-append-output.out/count.txt similarity index 100% rename from tests/snapshot/count/008-count-append-output.out/count.txt rename to pica-toolkit/tests/snapshot/count/008-count-append-output.out/count.txt diff --git a/tests/snapshot/count/008-count-append-output.trycmd b/pica-toolkit/tests/snapshot/count/008-count-append-output.trycmd similarity index 100% rename from tests/snapshot/count/008-count-append-output.trycmd rename to pica-toolkit/tests/snapshot/count/008-count-append-output.trycmd diff --git a/tests/snapshot/count/009-count-no-header.stdin b/pica-toolkit/tests/snapshot/count/009-count-no-header.stdin similarity index 100% rename from tests/snapshot/count/009-count-no-header.stdin rename to pica-toolkit/tests/snapshot/count/009-count-no-header.stdin diff --git a/tests/snapshot/count/009-count-no-header.stdout b/pica-toolkit/tests/snapshot/count/009-count-no-header.stdout similarity index 100% rename from tests/snapshot/count/009-count-no-header.stdout rename to pica-toolkit/tests/snapshot/count/009-count-no-header.stdout diff --git a/tests/snapshot/count/009-count-no-header.toml b/pica-toolkit/tests/snapshot/count/009-count-no-header.toml similarity index 100% rename from tests/snapshot/count/009-count-no-header.toml rename to pica-toolkit/tests/snapshot/count/009-count-no-header.toml diff --git a/tests/snapshot/count/010-count-records.stdin b/pica-toolkit/tests/snapshot/count/010-count-records.stdin similarity index 100% rename from tests/snapshot/count/010-count-records.stdin rename to pica-toolkit/tests/snapshot/count/010-count-records.stdin diff --git a/tests/snapshot/count/010-count-records.toml b/pica-toolkit/tests/snapshot/count/010-count-records.toml similarity index 100% rename from tests/snapshot/count/010-count-records.toml rename to pica-toolkit/tests/snapshot/count/010-count-records.toml diff --git a/tests/snapshot/count/011-count-fields.stdin b/pica-toolkit/tests/snapshot/count/011-count-fields.stdin similarity index 100% rename from tests/snapshot/count/011-count-fields.stdin rename to pica-toolkit/tests/snapshot/count/011-count-fields.stdin diff --git a/tests/snapshot/count/011-count-fields.toml b/pica-toolkit/tests/snapshot/count/011-count-fields.toml similarity index 100% rename from tests/snapshot/count/011-count-fields.toml rename to pica-toolkit/tests/snapshot/count/011-count-fields.toml diff --git a/tests/snapshot/count/012-count-subfields.stdin b/pica-toolkit/tests/snapshot/count/012-count-subfields.stdin similarity index 100% rename from tests/snapshot/count/012-count-subfields.stdin rename to pica-toolkit/tests/snapshot/count/012-count-subfields.stdin diff --git a/tests/snapshot/count/012-count-subfields.toml b/pica-toolkit/tests/snapshot/count/012-count-subfields.toml similarity index 100% rename from tests/snapshot/count/012-count-subfields.toml rename to pica-toolkit/tests/snapshot/count/012-count-subfields.toml diff --git a/tests/snapshot/count/013-count-skip-invalid-flag.stdin b/pica-toolkit/tests/snapshot/count/013-count-skip-invalid-flag.stdin similarity index 100% rename from tests/snapshot/count/013-count-skip-invalid-flag.stdin rename to pica-toolkit/tests/snapshot/count/013-count-skip-invalid-flag.stdin diff --git a/tests/snapshot/count/013-count-skip-invalid-flag.stdout b/pica-toolkit/tests/snapshot/count/013-count-skip-invalid-flag.stdout similarity index 100% rename from tests/snapshot/count/013-count-skip-invalid-flag.stdout rename to pica-toolkit/tests/snapshot/count/013-count-skip-invalid-flag.stdout diff --git a/tests/snapshot/count/013-count-skip-invalid-flag.toml b/pica-toolkit/tests/snapshot/count/013-count-skip-invalid-flag.toml similarity index 100% rename from tests/snapshot/count/013-count-skip-invalid-flag.toml rename to pica-toolkit/tests/snapshot/count/013-count-skip-invalid-flag.toml diff --git a/tests/snapshot/count/014-count-skip-invalid-config1.in/Pica.toml b/pica-toolkit/tests/snapshot/count/014-count-skip-invalid-config1.in/Pica.toml similarity index 100% rename from tests/snapshot/count/014-count-skip-invalid-config1.in/Pica.toml rename to pica-toolkit/tests/snapshot/count/014-count-skip-invalid-config1.in/Pica.toml diff --git a/tests/snapshot/count/014-count-skip-invalid-config1.in/dump.dat.gz b/pica-toolkit/tests/snapshot/count/014-count-skip-invalid-config1.in/dump.dat.gz similarity index 100% rename from tests/snapshot/count/014-count-skip-invalid-config1.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/count/014-count-skip-invalid-config1.in/dump.dat.gz diff --git a/tests/snapshot/count/014-count-skip-invalid-config1.toml b/pica-toolkit/tests/snapshot/count/014-count-skip-invalid-config1.toml similarity index 100% rename from tests/snapshot/count/014-count-skip-invalid-config1.toml rename to pica-toolkit/tests/snapshot/count/014-count-skip-invalid-config1.toml diff --git a/tests/snapshot/count/015-count-skip-invalid-config2.in/Pica.toml b/pica-toolkit/tests/snapshot/count/015-count-skip-invalid-config2.in/Pica.toml similarity index 100% rename from tests/snapshot/count/015-count-skip-invalid-config2.in/Pica.toml rename to pica-toolkit/tests/snapshot/count/015-count-skip-invalid-config2.in/Pica.toml diff --git a/tests/snapshot/count/015-count-skip-invalid-config2.in/dump.dat.gz b/pica-toolkit/tests/snapshot/count/015-count-skip-invalid-config2.in/dump.dat.gz similarity index 100% rename from tests/snapshot/count/015-count-skip-invalid-config2.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/count/015-count-skip-invalid-config2.in/dump.dat.gz diff --git a/tests/snapshot/count/015-count-skip-invalid-config2.toml b/pica-toolkit/tests/snapshot/count/015-count-skip-invalid-config2.toml similarity index 100% rename from tests/snapshot/count/015-count-skip-invalid-config2.toml rename to pica-toolkit/tests/snapshot/count/015-count-skip-invalid-config2.toml diff --git a/tests/snapshot/count/016-count-skip-invalid-config3.in/Pica.toml b/pica-toolkit/tests/snapshot/count/016-count-skip-invalid-config3.in/Pica.toml similarity index 100% rename from tests/snapshot/count/016-count-skip-invalid-config3.in/Pica.toml rename to pica-toolkit/tests/snapshot/count/016-count-skip-invalid-config3.in/Pica.toml diff --git a/tests/snapshot/count/016-count-skip-invalid-config3.in/dump.dat.gz b/pica-toolkit/tests/snapshot/count/016-count-skip-invalid-config3.in/dump.dat.gz similarity index 100% rename from tests/snapshot/count/016-count-skip-invalid-config3.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/count/016-count-skip-invalid-config3.in/dump.dat.gz diff --git a/tests/snapshot/count/016-count-skip-invalid-config3.toml b/pica-toolkit/tests/snapshot/count/016-count-skip-invalid-config3.toml similarity index 100% rename from tests/snapshot/count/016-count-skip-invalid-config3.toml rename to pica-toolkit/tests/snapshot/count/016-count-skip-invalid-config3.toml diff --git a/tests/snapshot/count/017-count-invalid-config4.in/Pica.toml b/pica-toolkit/tests/snapshot/count/017-count-invalid-config4.in/Pica.toml similarity index 100% rename from tests/snapshot/count/017-count-invalid-config4.in/Pica.toml rename to pica-toolkit/tests/snapshot/count/017-count-invalid-config4.in/Pica.toml diff --git a/tests/snapshot/count/017-count-invalid-config4.in/dump.dat.gz b/pica-toolkit/tests/snapshot/count/017-count-invalid-config4.in/dump.dat.gz similarity index 100% rename from tests/snapshot/count/017-count-invalid-config4.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/count/017-count-invalid-config4.in/dump.dat.gz diff --git a/tests/snapshot/count/017-count-invalid-config4.toml b/pica-toolkit/tests/snapshot/count/017-count-invalid-config4.toml similarity index 100% rename from tests/snapshot/count/017-count-invalid-config4.toml rename to pica-toolkit/tests/snapshot/count/017-count-invalid-config4.toml diff --git a/tests/snapshot/data/004732650.dat b/pica-toolkit/tests/snapshot/data/004732650.dat similarity index 100% rename from tests/snapshot/data/004732650.dat rename to pica-toolkit/tests/snapshot/data/004732650.dat diff --git a/tests/snapshot/data/algebra.dat b/pica-toolkit/tests/snapshot/data/algebra.dat similarity index 100% rename from tests/snapshot/data/algebra.dat rename to pica-toolkit/tests/snapshot/data/algebra.dat diff --git a/tests/snapshot/data/dump.dat.gz b/pica-toolkit/tests/snapshot/data/dump.dat.gz similarity index 100% rename from tests/snapshot/data/dump.dat.gz rename to pica-toolkit/tests/snapshot/data/dump.dat.gz diff --git a/tests/snapshot/data/ffm.dat b/pica-toolkit/tests/snapshot/data/ffm.dat similarity index 100% rename from tests/snapshot/data/ffm.dat rename to pica-toolkit/tests/snapshot/data/ffm.dat diff --git a/tests/snapshot/data/invalid.dat b/pica-toolkit/tests/snapshot/data/invalid.dat similarity index 100% rename from tests/snapshot/data/invalid.dat rename to pica-toolkit/tests/snapshot/data/invalid.dat diff --git a/tests/snapshot/data/math.dat.gz b/pica-toolkit/tests/snapshot/data/math.dat.gz similarity index 100% rename from tests/snapshot/data/math.dat.gz rename to pica-toolkit/tests/snapshot/data/math.dat.gz diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-any-f.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-any-f.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-any-f.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-any-f.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-any-t.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-any-t.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-any-t.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-any-t.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-any-t.stdout b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-any-t.stdout similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-any-t.stdout rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-any-t.stdout diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-any-t.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-any-t.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-any-t.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-any-t.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-f.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-f.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-f.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-f.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-f.stdout b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-f.stdout similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-f.stdout rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-f.stdout diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-f.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-f.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-f.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-f.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-f.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-f.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-single-f.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-f.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-f.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-f.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-single-f.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-f.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-t.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-t.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-single-t.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-t.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-t.stdout b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-t.stdout similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-single-t.stdout rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-t.stdout diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-t.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-t.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-single-t.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-single-t.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-t.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-t.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-t.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-t.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-t.stdout b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-t.stdout similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-t.stdout rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-t.stdout diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-curly-t.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-t.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-curly-t.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-curly-t.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-f.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-f.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-f.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-f.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-f.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-f.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-f.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-f.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-t.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-t.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-t.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-t.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-t.stdout b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-t.stdout similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-t.stdout rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-t.stdout diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-t.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-t.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-t.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-pattern-t.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-f.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-f.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-field-simple-f.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-f.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-f.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-f.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-field-simple-f.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-f.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-t.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-t.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-field-simple-t.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-t.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-t.stdout b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-t.stdout similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-field-simple-t.stdout rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-t.stdout diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-t.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-t.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-field-simple-t.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-field-simple-t.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-any-f.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-any-f.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-any-f.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-any-f.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-any-t.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-any-t.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-any-t.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-any-t.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-any-t.stdout b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-any-t.stdout similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-any-t.stdout rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-any-t.stdout diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-any-t.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-any-t.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-any-t.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-any-t.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-f.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-f.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-f.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-f.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-f.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-f.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-f.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-f.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-f.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-f.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-single-f.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-f.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-f.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-f.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-single-f.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-f.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-t.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-t.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-single-t.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-t.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-t.stdout b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-t.stdout similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-single-t.stdout rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-t.stdout diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-t.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-t.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-single-t.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-single-t.toml diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-t.stdin b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-t.stdin similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-t.stdin rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-t.stdin diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-t.stdout b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-t.stdout similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-t.stdout rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-t.stdout diff --git a/tests/snapshot/filter/0100-filter-exists-matcher-simple-t.toml b/pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-t.toml similarity index 100% rename from tests/snapshot/filter/0100-filter-exists-matcher-simple-t.toml rename to pica-toolkit/tests/snapshot/filter/0100-filter-exists-matcher-simple-t.toml diff --git a/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-f.stdin b/pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-f.stdin similarity index 100% rename from tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-f.stdin rename to pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-f.stdin diff --git a/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-f.toml b/pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-f.toml similarity index 100% rename from tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-f.toml rename to pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-f.toml diff --git a/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-t.stdin b/pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-t.stdin similarity index 100% rename from tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-t.stdin rename to pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-t.stdin diff --git a/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-t.stdout b/pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-t.stdout similarity index 100% rename from tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-t.stdout rename to pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-t.stdout diff --git a/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-t.toml b/pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-t.toml similarity index 100% rename from tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-t.toml rename to pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-curly-eq-t.toml diff --git a/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-f.stdin b/pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-f.stdin similarity index 100% rename from tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-f.stdin rename to pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-f.stdin diff --git a/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-f.toml b/pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-f.toml similarity index 100% rename from tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-f.toml rename to pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-f.toml diff --git a/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-t.stdin b/pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-t.stdin similarity index 100% rename from tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-t.stdin rename to pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-t.stdin diff --git a/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-t.stdout b/pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-t.stdout similarity index 100% rename from tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-t.stdout rename to pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-t.stdout diff --git a/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-t.toml b/pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-t.toml similarity index 100% rename from tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-t.toml rename to pica-toolkit/tests/snapshot/filter/0101-filter-relation-matcher-simple-eq-t.toml diff --git a/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-f.stdin b/pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-f.stdin similarity index 100% rename from tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-f.stdin rename to pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-f.stdin diff --git a/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-f.toml b/pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-f.toml similarity index 100% rename from tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-f.toml rename to pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-f.toml diff --git a/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-t.stdin b/pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-t.stdin similarity index 100% rename from tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-t.stdin rename to pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-t.stdin diff --git a/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-t.stdout b/pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-t.stdout similarity index 100% rename from tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-t.stdout rename to pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-t.stdout diff --git a/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-t.toml b/pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-t.toml similarity index 100% rename from tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-t.toml rename to pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-curly-ne-t.toml diff --git a/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-f.stdin b/pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-f.stdin similarity index 100% rename from tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-f.stdin rename to pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-f.stdin diff --git a/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-f.toml b/pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-f.toml similarity index 100% rename from tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-f.toml rename to pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-f.toml diff --git a/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-t.stdin b/pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-t.stdin similarity index 100% rename from tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-t.stdin rename to pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-t.stdin diff --git a/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-t.stdout b/pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-t.stdout similarity index 100% rename from tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-t.stdout rename to pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-t.stdout diff --git a/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-t.toml b/pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-t.toml similarity index 100% rename from tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-t.toml rename to pica-toolkit/tests/snapshot/filter/0102-filter-relation-matcher-simple-ne-t.toml diff --git a/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-f.stdin b/pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-f.stdin similarity index 100% rename from tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-f.stdin rename to pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-f.stdin diff --git a/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-f.toml b/pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-f.toml similarity index 100% rename from tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-f.toml rename to pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-f.toml diff --git a/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-t.stdin b/pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-t.stdin similarity index 100% rename from tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-t.stdin rename to pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-t.stdin diff --git a/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-t.stdout b/pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-t.stdout similarity index 100% rename from tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-t.stdout rename to pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-t.stdout diff --git a/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-t.toml b/pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-t.toml similarity index 100% rename from tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-t.toml rename to pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-curly-starts-with-t.toml diff --git a/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-f.stdin b/pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-f.stdin similarity index 100% rename from tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-f.stdin rename to pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-f.stdin diff --git a/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-f.toml b/pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-f.toml similarity index 100% rename from tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-f.toml rename to pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-f.toml diff --git a/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-t.stdin b/pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-t.stdin similarity index 100% rename from tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-t.stdin rename to pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-t.stdin diff --git a/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-t.stdout b/pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-t.stdout similarity index 100% rename from tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-t.stdout rename to pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-t.stdout diff --git a/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-t.toml b/pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-t.toml similarity index 100% rename from tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-t.toml rename to pica-toolkit/tests/snapshot/filter/0103-filter-relation-matcher-simple-starts-with-t.toml diff --git a/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-f.stdin b/pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-f.stdin similarity index 100% rename from tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-f.stdin rename to pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-f.stdin diff --git a/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-f.toml b/pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-f.toml similarity index 100% rename from tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-f.toml rename to pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-f.toml diff --git a/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-t.stdin b/pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-t.stdin similarity index 100% rename from tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-t.stdin rename to pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-t.stdin diff --git a/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-t.stdout b/pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-t.stdout similarity index 100% rename from tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-t.stdout rename to pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-t.stdout diff --git a/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-t.toml b/pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-t.toml similarity index 100% rename from tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-t.toml rename to pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-curly-ends-with-t.toml diff --git a/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-f.stdin b/pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-f.stdin similarity index 100% rename from tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-f.stdin rename to pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-f.stdin diff --git a/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-f.toml b/pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-f.toml similarity index 100% rename from tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-f.toml rename to pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-f.toml diff --git a/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-t.stdin b/pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-t.stdin similarity index 100% rename from tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-t.stdin rename to pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-t.stdin diff --git a/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-t.stdout b/pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-t.stdout similarity index 100% rename from tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-t.stdout rename to pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-t.stdout diff --git a/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-t.toml b/pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-t.toml similarity index 100% rename from tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-t.toml rename to pica-toolkit/tests/snapshot/filter/0104-filter-relation-matcher-simple-ends-with-t.toml diff --git a/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-f.stdin b/pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-f.stdin similarity index 100% rename from tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-f.stdin rename to pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-f.stdin diff --git a/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-f.toml b/pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-f.toml similarity index 100% rename from tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-f.toml rename to pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-f.toml diff --git a/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-t.stdin b/pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-t.stdin similarity index 100% rename from tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-t.stdin rename to pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-t.stdin diff --git a/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-t.stdout b/pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-t.stdout similarity index 100% rename from tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-t.stdout rename to pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-t.stdout diff --git a/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-t.toml b/pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-t.toml similarity index 100% rename from tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-t.toml rename to pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-curly-similar-t.toml diff --git a/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-f.stdin b/pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-f.stdin similarity index 100% rename from tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-f.stdin rename to pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-f.stdin diff --git a/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-f.toml b/pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-f.toml similarity index 100% rename from tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-f.toml rename to pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-f.toml diff --git a/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-t.stdin b/pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-t.stdin similarity index 100% rename from tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-t.stdin rename to pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-t.stdin diff --git a/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-t.stdout b/pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-t.stdout similarity index 100% rename from tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-t.stdout rename to pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-t.stdout diff --git a/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-t.toml b/pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-t.toml similarity index 100% rename from tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-t.toml rename to pica-toolkit/tests/snapshot/filter/0105-filter-relation-matcher-simple-similar-t.toml diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-ci.stdin b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-ci.stdin similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-ci.stdin rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-ci.stdin diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-ci.stdout b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-ci.stdout similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-ci.stdout rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-ci.stdout diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-ci.toml b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-ci.toml similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-ci.toml rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-ci.toml diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-curly-f.stdin b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-f.stdin similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-curly-f.stdin rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-f.stdin diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-curly-f.toml b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-f.toml similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-curly-f.toml rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-f.toml diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-f.stdin b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-f.stdin similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-f.stdin rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-f.stdin diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-f.toml b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-f.toml similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-f.toml rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-f.toml diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-t.stdin b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-t.stdin similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-t.stdin rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-t.stdin diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-t.stdout b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-t.stdout similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-t.stdout rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-t.stdout diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-t.toml b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-t.toml similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-t.toml rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-invert-t.toml diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-curly-t.stdin b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-t.stdin similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-curly-t.stdin rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-t.stdin diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-curly-t.stdout b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-t.stdout similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-curly-t.stdout rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-t.stdout diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-curly-t.toml b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-t.toml similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-curly-t.toml rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-curly-t.toml diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-invalid.stdin b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-invalid.stdin similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-invalid.stdin rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-invalid.stdin diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-invalid.toml b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-invalid.toml similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-invalid.toml rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-invalid.toml diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-simple-f.stdin b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-f.stdin similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-simple-f.stdin rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-f.stdin diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-simple-f.toml b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-f.toml similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-simple-f.toml rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-f.toml diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-f.stdin b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-f.stdin similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-f.stdin rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-f.stdin diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-f.toml b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-f.toml similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-f.toml rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-f.toml diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-t.stdin b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-t.stdin similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-t.stdin rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-t.stdin diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-t.stdout b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-t.stdout similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-t.stdout rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-t.stdout diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-t.toml b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-t.toml similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-t.toml rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-invert-t.toml diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-simple-t.stdin b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-t.stdin similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-simple-t.stdin rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-t.stdin diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-simple-t.stdout b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-t.stdout similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-simple-t.stdout rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-t.stdout diff --git a/tests/snapshot/filter/0106-filter-regex-matcher-simple-t.toml b/pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-t.toml similarity index 100% rename from tests/snapshot/filter/0106-filter-regex-matcher-simple-t.toml rename to pica-toolkit/tests/snapshot/filter/0106-filter-regex-matcher-simple-t.toml diff --git a/tests/snapshot/filter/0107-filter-in-matcher-curly-f.stdin b/pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-curly-f.stdin similarity index 100% rename from tests/snapshot/filter/0107-filter-in-matcher-curly-f.stdin rename to pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-curly-f.stdin diff --git a/tests/snapshot/filter/0107-filter-in-matcher-curly-f.toml b/pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-curly-f.toml similarity index 100% rename from tests/snapshot/filter/0107-filter-in-matcher-curly-f.toml rename to pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-curly-f.toml diff --git a/tests/snapshot/filter/0107-filter-in-matcher-curly-t.stdin b/pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-curly-t.stdin similarity index 100% rename from tests/snapshot/filter/0107-filter-in-matcher-curly-t.stdin rename to pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-curly-t.stdin diff --git a/tests/snapshot/filter/0107-filter-in-matcher-curly-t.stdout b/pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-curly-t.stdout similarity index 100% rename from tests/snapshot/filter/0107-filter-in-matcher-curly-t.stdout rename to pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-curly-t.stdout diff --git a/tests/snapshot/filter/0107-filter-in-matcher-curly-t.toml b/pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-curly-t.toml similarity index 100% rename from tests/snapshot/filter/0107-filter-in-matcher-curly-t.toml rename to pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-curly-t.toml diff --git a/tests/snapshot/filter/0107-filter-in-matcher-simple-f.stdin b/pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-simple-f.stdin similarity index 100% rename from tests/snapshot/filter/0107-filter-in-matcher-simple-f.stdin rename to pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-simple-f.stdin diff --git a/tests/snapshot/filter/0107-filter-in-matcher-simple-f.toml b/pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-simple-f.toml similarity index 100% rename from tests/snapshot/filter/0107-filter-in-matcher-simple-f.toml rename to pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-simple-f.toml diff --git a/tests/snapshot/filter/0107-filter-in-matcher-simple-t.stdin b/pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-simple-t.stdin similarity index 100% rename from tests/snapshot/filter/0107-filter-in-matcher-simple-t.stdin rename to pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-simple-t.stdin diff --git a/tests/snapshot/filter/0107-filter-in-matcher-simple-t.stdout b/pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-simple-t.stdout similarity index 100% rename from tests/snapshot/filter/0107-filter-in-matcher-simple-t.stdout rename to pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-simple-t.stdout diff --git a/tests/snapshot/filter/0107-filter-in-matcher-simple-t.toml b/pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-simple-t.toml similarity index 100% rename from tests/snapshot/filter/0107-filter-in-matcher-simple-t.toml rename to pica-toolkit/tests/snapshot/filter/0107-filter-in-matcher-simple-t.toml diff --git a/tests/snapshot/filter/0107-filter-not-in-matcher-curly-f.stdin b/pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-curly-f.stdin similarity index 100% rename from tests/snapshot/filter/0107-filter-not-in-matcher-curly-f.stdin rename to pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-curly-f.stdin diff --git a/tests/snapshot/filter/0107-filter-not-in-matcher-curly-f.toml b/pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-curly-f.toml similarity index 100% rename from tests/snapshot/filter/0107-filter-not-in-matcher-curly-f.toml rename to pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-curly-f.toml diff --git a/tests/snapshot/filter/0107-filter-not-in-matcher-curly-t.stdin b/pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-curly-t.stdin similarity index 100% rename from tests/snapshot/filter/0107-filter-not-in-matcher-curly-t.stdin rename to pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-curly-t.stdin diff --git a/tests/snapshot/filter/0107-filter-not-in-matcher-curly-t.stdout b/pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-curly-t.stdout similarity index 100% rename from tests/snapshot/filter/0107-filter-not-in-matcher-curly-t.stdout rename to pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-curly-t.stdout diff --git a/tests/snapshot/filter/0107-filter-not-in-matcher-curly-t.toml b/pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-curly-t.toml similarity index 100% rename from tests/snapshot/filter/0107-filter-not-in-matcher-curly-t.toml rename to pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-curly-t.toml diff --git a/tests/snapshot/filter/0107-filter-not-in-matcher-simple-f.stdin b/pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-simple-f.stdin similarity index 100% rename from tests/snapshot/filter/0107-filter-not-in-matcher-simple-f.stdin rename to pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-simple-f.stdin diff --git a/tests/snapshot/filter/0107-filter-not-in-matcher-simple-f.toml b/pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-simple-f.toml similarity index 100% rename from tests/snapshot/filter/0107-filter-not-in-matcher-simple-f.toml rename to pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-simple-f.toml diff --git a/tests/snapshot/filter/0107-filter-not-in-matcher-simple-t.stdin b/pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-simple-t.stdin similarity index 100% rename from tests/snapshot/filter/0107-filter-not-in-matcher-simple-t.stdin rename to pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-simple-t.stdin diff --git a/tests/snapshot/filter/0107-filter-not-in-matcher-simple-t.stdout b/pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-simple-t.stdout similarity index 100% rename from tests/snapshot/filter/0107-filter-not-in-matcher-simple-t.stdout rename to pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-simple-t.stdout diff --git a/tests/snapshot/filter/0107-filter-not-in-matcher-simple-t.toml b/pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-simple-t.toml similarity index 100% rename from tests/snapshot/filter/0107-filter-not-in-matcher-simple-t.toml rename to pica-toolkit/tests/snapshot/filter/0107-filter-not-in-matcher-simple-t.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-f.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-f.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-f.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-f.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-f.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-f.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-f.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-f.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-t.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-t.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-t.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-t.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-t.stdout b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-t.stdout similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-t.stdout rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-t.stdout diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-t.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-t.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-t.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-eq-t.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-f.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-f.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-f.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-f.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-f.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-f.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-f.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-f.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-t.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-t.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-t.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-t.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-t.stdout b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-t.stdout similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-t.stdout rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-t.stdout diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-t.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-t.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-t.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ge-t.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-f.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-f.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-f.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-f.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-f.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-f.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-f.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-f.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-t.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-t.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-t.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-t.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-t.stdout b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-t.stdout similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-t.stdout rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-t.stdout diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-t.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-t.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-t.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-gt-t.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-invalid.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-invalid.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-invalid.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-invalid.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-f.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-f.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-f.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-f.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-f.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-f.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-f.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-f.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-t.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-t.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-t.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-t.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-t.stdout b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-t.stdout similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-t.stdout rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-t.stdout diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-t.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-t.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-t.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-le-t.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-f.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-f.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-f.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-f.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-f.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-f.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-f.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-f.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-t.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-t.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-t.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-t.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-t.stdout b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-t.stdout similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-t.stdout rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-t.stdout diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-t.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-t.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-t.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-lt-t.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-f.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-f.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-f.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-f.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-f.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-f.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-f.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-f.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-t.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-t.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-t.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-t.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-t.stdout b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-t.stdout similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-t.stdout rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-t.stdout diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-t.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-t.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-t.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-field-ne-t.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-f.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-f.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-f.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-f.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-f.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-f.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-f.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-f.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-t.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-t.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-t.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-t.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-t.stdout b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-t.stdout similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-t.stdout rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-t.stdout diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-t.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-t.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-t.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-eq-t.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-f.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-f.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-f.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-f.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-f.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-f.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-f.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-f.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-t.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-t.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-t.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-t.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-t.stdout b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-t.stdout similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-t.stdout rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-t.stdout diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-t.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-t.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-t.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ge-t.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-f.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-f.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-f.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-f.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-f.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-f.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-f.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-f.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-t.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-t.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-t.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-t.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-t.stdout b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-t.stdout similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-t.stdout rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-t.stdout diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-t.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-t.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-t.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-gt-t.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-invalid.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-invalid.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-invalid.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-invalid.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-f.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-f.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-f.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-f.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-f.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-f.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-f.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-f.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-t.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-t.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-t.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-t.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-t.stdout b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-t.stdout similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-t.stdout rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-t.stdout diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-t.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-t.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-t.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-le-t.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-f.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-f.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-f.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-f.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-f.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-f.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-f.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-f.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-t.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-t.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-t.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-t.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-t.stdout b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-t.stdout similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-t.stdout rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-t.stdout diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-t.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-t.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-t.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-lt-t.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-f.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-f.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-f.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-f.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-f.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-f.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-f.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-f.toml diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-t.stdin b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-t.stdin similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-t.stdin rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-t.stdin diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-t.stdout b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-t.stdout similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-t.stdout rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-t.stdout diff --git a/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-t.toml b/pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-t.toml similarity index 100% rename from tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-t.toml rename to pica-toolkit/tests/snapshot/filter/0108-filter-cardinality-matcher-subfield-ne-t.toml diff --git a/tests/snapshot/filter/0109-filter-group-field-composite-f.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-composite-f.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-composite-f.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-composite-f.stdin diff --git a/tests/snapshot/filter/0109-filter-group-field-composite-f.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-composite-f.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-composite-f.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-composite-f.toml diff --git a/tests/snapshot/filter/0109-filter-group-field-composite-t.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-composite-t.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-composite-t.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-composite-t.stdin diff --git a/tests/snapshot/filter/0109-filter-group-field-composite-t.stdout b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-composite-t.stdout similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-composite-t.stdout rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-composite-t.stdout diff --git a/tests/snapshot/filter/0109-filter-group-field-composite-t.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-composite-t.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-composite-t.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-composite-t.toml diff --git a/tests/snapshot/filter/0109-filter-group-field-group-f.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-group-f.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-group-f.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-group-f.stdin diff --git a/tests/snapshot/filter/0109-filter-group-field-group-f.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-group-f.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-group-f.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-group-f.toml diff --git a/tests/snapshot/filter/0109-filter-group-field-group-t.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-group-t.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-group-t.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-group-t.stdin diff --git a/tests/snapshot/filter/0109-filter-group-field-group-t.stdout b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-group-t.stdout similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-group-t.stdout rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-group-t.stdout diff --git a/tests/snapshot/filter/0109-filter-group-field-group-t.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-group-t.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-group-t.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-group-t.toml diff --git a/tests/snapshot/filter/0109-filter-group-field-not-f.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-not-f.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-not-f.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-not-f.stdin diff --git a/tests/snapshot/filter/0109-filter-group-field-not-f.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-not-f.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-not-f.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-not-f.toml diff --git a/tests/snapshot/filter/0109-filter-group-field-not-t.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-not-t.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-not-t.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-not-t.stdin diff --git a/tests/snapshot/filter/0109-filter-group-field-not-t.stdout b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-not-t.stdout similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-not-t.stdout rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-not-t.stdout diff --git a/tests/snapshot/filter/0109-filter-group-field-not-t.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-not-t.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-not-t.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-not-t.toml diff --git a/tests/snapshot/filter/0109-filter-group-field-singleton-f.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-singleton-f.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-singleton-f.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-singleton-f.stdin diff --git a/tests/snapshot/filter/0109-filter-group-field-singleton-f.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-singleton-f.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-singleton-f.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-singleton-f.toml diff --git a/tests/snapshot/filter/0109-filter-group-field-singleton-t.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-singleton-t.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-singleton-t.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-singleton-t.stdin diff --git a/tests/snapshot/filter/0109-filter-group-field-singleton-t.stdout b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-singleton-t.stdout similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-singleton-t.stdout rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-singleton-t.stdout diff --git a/tests/snapshot/filter/0109-filter-group-field-singleton-t.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-field-singleton-t.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-field-singleton-t.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-field-singleton-t.toml diff --git a/tests/snapshot/filter/0109-filter-group-subfield-composite-f.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-composite-f.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-composite-f.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-composite-f.stdin diff --git a/tests/snapshot/filter/0109-filter-group-subfield-composite-f.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-composite-f.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-composite-f.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-composite-f.toml diff --git a/tests/snapshot/filter/0109-filter-group-subfield-composite-t.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-composite-t.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-composite-t.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-composite-t.stdin diff --git a/tests/snapshot/filter/0109-filter-group-subfield-composite-t.stdout b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-composite-t.stdout similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-composite-t.stdout rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-composite-t.stdout diff --git a/tests/snapshot/filter/0109-filter-group-subfield-composite-t.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-composite-t.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-composite-t.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-composite-t.toml diff --git a/tests/snapshot/filter/0109-filter-group-subfield-group-f.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-group-f.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-group-f.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-group-f.stdin diff --git a/tests/snapshot/filter/0109-filter-group-subfield-group-f.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-group-f.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-group-f.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-group-f.toml diff --git a/tests/snapshot/filter/0109-filter-group-subfield-group-t.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-group-t.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-group-t.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-group-t.stdin diff --git a/tests/snapshot/filter/0109-filter-group-subfield-group-t.stdout b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-group-t.stdout similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-group-t.stdout rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-group-t.stdout diff --git a/tests/snapshot/filter/0109-filter-group-subfield-group-t.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-group-t.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-group-t.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-group-t.toml diff --git a/tests/snapshot/filter/0109-filter-group-subfield-not-f.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-not-f.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-not-f.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-not-f.stdin diff --git a/tests/snapshot/filter/0109-filter-group-subfield-not-f.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-not-f.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-not-f.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-not-f.toml diff --git a/tests/snapshot/filter/0109-filter-group-subfield-not-t.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-not-t.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-not-t.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-not-t.stdin diff --git a/tests/snapshot/filter/0109-filter-group-subfield-not-t.stdout b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-not-t.stdout similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-not-t.stdout rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-not-t.stdout diff --git a/tests/snapshot/filter/0109-filter-group-subfield-not-t.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-not-t.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-not-t.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-not-t.toml diff --git a/tests/snapshot/filter/0109-filter-group-subfield-singleton-f.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-singleton-f.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-singleton-f.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-singleton-f.stdin diff --git a/tests/snapshot/filter/0109-filter-group-subfield-singleton-f.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-singleton-f.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-singleton-f.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-singleton-f.toml diff --git a/tests/snapshot/filter/0109-filter-group-subfield-singleton-t.stdin b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-singleton-t.stdin similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-singleton-t.stdin rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-singleton-t.stdin diff --git a/tests/snapshot/filter/0109-filter-group-subfield-singleton-t.stdout b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-singleton-t.stdout similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-singleton-t.stdout rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-singleton-t.stdout diff --git a/tests/snapshot/filter/0109-filter-group-subfield-singleton-t.toml b/pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-singleton-t.toml similarity index 100% rename from tests/snapshot/filter/0109-filter-group-subfield-singleton-t.toml rename to pica-toolkit/tests/snapshot/filter/0109-filter-group-subfield-singleton-t.toml diff --git a/tests/snapshot/filter/0110-filter-not-field-curly-bracket-f.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-curly-bracket-f.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-curly-bracket-f.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-curly-bracket-f.stdin diff --git a/tests/snapshot/filter/0110-filter-not-field-curly-bracket-f.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-curly-bracket-f.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-curly-bracket-f.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-curly-bracket-f.toml diff --git a/tests/snapshot/filter/0110-filter-not-field-curly-bracket-t.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-curly-bracket-t.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-curly-bracket-t.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-curly-bracket-t.stdin diff --git a/tests/snapshot/filter/0110-filter-not-field-curly-bracket-t.stdout b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-curly-bracket-t.stdout similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-curly-bracket-t.stdout rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-curly-bracket-t.stdout diff --git a/tests/snapshot/filter/0110-filter-not-field-curly-bracket-t.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-curly-bracket-t.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-curly-bracket-t.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-curly-bracket-t.toml diff --git a/tests/snapshot/filter/0110-filter-not-field-exists-f.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-exists-f.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-exists-f.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-exists-f.stdin diff --git a/tests/snapshot/filter/0110-filter-not-field-exists-f.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-exists-f.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-exists-f.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-exists-f.toml diff --git a/tests/snapshot/filter/0110-filter-not-field-exists-t.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-exists-t.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-exists-t.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-exists-t.stdin diff --git a/tests/snapshot/filter/0110-filter-not-field-exists-t.stdout b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-exists-t.stdout similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-exists-t.stdout rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-exists-t.stdout diff --git a/tests/snapshot/filter/0110-filter-not-field-exists-t.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-exists-t.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-exists-t.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-exists-t.toml diff --git a/tests/snapshot/filter/0110-filter-not-field-group-f.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-group-f.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-group-f.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-group-f.stdin diff --git a/tests/snapshot/filter/0110-filter-not-field-group-f.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-group-f.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-group-f.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-group-f.toml diff --git a/tests/snapshot/filter/0110-filter-not-field-group-t.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-group-t.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-group-t.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-group-t.stdin diff --git a/tests/snapshot/filter/0110-filter-not-field-group-t.stdout b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-group-t.stdout similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-group-t.stdout rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-group-t.stdout diff --git a/tests/snapshot/filter/0110-filter-not-field-group-t.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-group-t.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-group-t.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-group-t.toml diff --git a/tests/snapshot/filter/0110-filter-not-field-not-f.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-not-f.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-not-f.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-not-f.stdin diff --git a/tests/snapshot/filter/0110-filter-not-field-not-f.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-not-f.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-not-f.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-not-f.toml diff --git a/tests/snapshot/filter/0110-filter-not-field-not-t.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-not-t.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-not-t.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-not-t.stdin diff --git a/tests/snapshot/filter/0110-filter-not-field-not-t.stdout b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-not-t.stdout similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-not-t.stdout rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-not-t.stdout diff --git a/tests/snapshot/filter/0110-filter-not-field-not-t.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-field-not-t.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-field-not-t.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-field-not-t.toml diff --git a/tests/snapshot/filter/0110-filter-not-subfield-exists-f.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-exists-f.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-exists-f.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-exists-f.stdin diff --git a/tests/snapshot/filter/0110-filter-not-subfield-exists-f.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-exists-f.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-exists-f.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-exists-f.toml diff --git a/tests/snapshot/filter/0110-filter-not-subfield-exists-t.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-exists-t.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-exists-t.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-exists-t.stdin diff --git a/tests/snapshot/filter/0110-filter-not-subfield-exists-t.stdout b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-exists-t.stdout similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-exists-t.stdout rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-exists-t.stdout diff --git a/tests/snapshot/filter/0110-filter-not-subfield-exists-t.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-exists-t.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-exists-t.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-exists-t.toml diff --git a/tests/snapshot/filter/0110-filter-not-subfield-group-f.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-group-f.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-group-f.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-group-f.stdin diff --git a/tests/snapshot/filter/0110-filter-not-subfield-group-f.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-group-f.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-group-f.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-group-f.toml diff --git a/tests/snapshot/filter/0110-filter-not-subfield-group-t.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-group-t.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-group-t.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-group-t.stdin diff --git a/tests/snapshot/filter/0110-filter-not-subfield-group-t.stdout b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-group-t.stdout similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-group-t.stdout rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-group-t.stdout diff --git a/tests/snapshot/filter/0110-filter-not-subfield-group-t.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-group-t.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-group-t.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-group-t.toml diff --git a/tests/snapshot/filter/0110-filter-not-subfield-not-f.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-not-f.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-not-f.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-not-f.stdin diff --git a/tests/snapshot/filter/0110-filter-not-subfield-not-f.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-not-f.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-not-f.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-not-f.toml diff --git a/tests/snapshot/filter/0110-filter-not-subfield-not-t.stdin b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-not-t.stdin similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-not-t.stdin rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-not-t.stdin diff --git a/tests/snapshot/filter/0110-filter-not-subfield-not-t.stdout b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-not-t.stdout similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-not-t.stdout rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-not-t.stdout diff --git a/tests/snapshot/filter/0110-filter-not-subfield-not-t.toml b/pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-not-t.toml similarity index 100% rename from tests/snapshot/filter/0110-filter-not-subfield-not-t.toml rename to pica-toolkit/tests/snapshot/filter/0110-filter-not-subfield-not-t.toml diff --git a/tests/snapshot/filter/0111-filter-and-field-f.stdin b/pica-toolkit/tests/snapshot/filter/0111-filter-and-field-f.stdin similarity index 100% rename from tests/snapshot/filter/0111-filter-and-field-f.stdin rename to pica-toolkit/tests/snapshot/filter/0111-filter-and-field-f.stdin diff --git a/tests/snapshot/filter/0111-filter-and-field-f.toml b/pica-toolkit/tests/snapshot/filter/0111-filter-and-field-f.toml similarity index 100% rename from tests/snapshot/filter/0111-filter-and-field-f.toml rename to pica-toolkit/tests/snapshot/filter/0111-filter-and-field-f.toml diff --git a/tests/snapshot/filter/0111-filter-and-field-t.stdin b/pica-toolkit/tests/snapshot/filter/0111-filter-and-field-t.stdin similarity index 100% rename from tests/snapshot/filter/0111-filter-and-field-t.stdin rename to pica-toolkit/tests/snapshot/filter/0111-filter-and-field-t.stdin diff --git a/tests/snapshot/filter/0111-filter-and-field-t.stdout b/pica-toolkit/tests/snapshot/filter/0111-filter-and-field-t.stdout similarity index 100% rename from tests/snapshot/filter/0111-filter-and-field-t.stdout rename to pica-toolkit/tests/snapshot/filter/0111-filter-and-field-t.stdout diff --git a/tests/snapshot/filter/0111-filter-and-field-t.toml b/pica-toolkit/tests/snapshot/filter/0111-filter-and-field-t.toml similarity index 100% rename from tests/snapshot/filter/0111-filter-and-field-t.toml rename to pica-toolkit/tests/snapshot/filter/0111-filter-and-field-t.toml diff --git a/tests/snapshot/filter/0111-filter-and-subfield-f.stdin b/pica-toolkit/tests/snapshot/filter/0111-filter-and-subfield-f.stdin similarity index 100% rename from tests/snapshot/filter/0111-filter-and-subfield-f.stdin rename to pica-toolkit/tests/snapshot/filter/0111-filter-and-subfield-f.stdin diff --git a/tests/snapshot/filter/0111-filter-and-subfield-f.toml b/pica-toolkit/tests/snapshot/filter/0111-filter-and-subfield-f.toml similarity index 100% rename from tests/snapshot/filter/0111-filter-and-subfield-f.toml rename to pica-toolkit/tests/snapshot/filter/0111-filter-and-subfield-f.toml diff --git a/tests/snapshot/filter/0111-filter-and-subfield-t.stdin b/pica-toolkit/tests/snapshot/filter/0111-filter-and-subfield-t.stdin similarity index 100% rename from tests/snapshot/filter/0111-filter-and-subfield-t.stdin rename to pica-toolkit/tests/snapshot/filter/0111-filter-and-subfield-t.stdin diff --git a/tests/snapshot/filter/0111-filter-and-subfield-t.stdout b/pica-toolkit/tests/snapshot/filter/0111-filter-and-subfield-t.stdout similarity index 100% rename from tests/snapshot/filter/0111-filter-and-subfield-t.stdout rename to pica-toolkit/tests/snapshot/filter/0111-filter-and-subfield-t.stdout diff --git a/tests/snapshot/filter/0111-filter-and-subfield-t.toml b/pica-toolkit/tests/snapshot/filter/0111-filter-and-subfield-t.toml similarity index 100% rename from tests/snapshot/filter/0111-filter-and-subfield-t.toml rename to pica-toolkit/tests/snapshot/filter/0111-filter-and-subfield-t.toml diff --git a/tests/snapshot/filter/0112-filter-or-field-f.stdin b/pica-toolkit/tests/snapshot/filter/0112-filter-or-field-f.stdin similarity index 100% rename from tests/snapshot/filter/0112-filter-or-field-f.stdin rename to pica-toolkit/tests/snapshot/filter/0112-filter-or-field-f.stdin diff --git a/tests/snapshot/filter/0112-filter-or-field-f.toml b/pica-toolkit/tests/snapshot/filter/0112-filter-or-field-f.toml similarity index 100% rename from tests/snapshot/filter/0112-filter-or-field-f.toml rename to pica-toolkit/tests/snapshot/filter/0112-filter-or-field-f.toml diff --git a/tests/snapshot/filter/0112-filter-or-field-t.stdin b/pica-toolkit/tests/snapshot/filter/0112-filter-or-field-t.stdin similarity index 100% rename from tests/snapshot/filter/0112-filter-or-field-t.stdin rename to pica-toolkit/tests/snapshot/filter/0112-filter-or-field-t.stdin diff --git a/tests/snapshot/filter/0112-filter-or-field-t.stdout b/pica-toolkit/tests/snapshot/filter/0112-filter-or-field-t.stdout similarity index 100% rename from tests/snapshot/filter/0112-filter-or-field-t.stdout rename to pica-toolkit/tests/snapshot/filter/0112-filter-or-field-t.stdout diff --git a/tests/snapshot/filter/0112-filter-or-field-t.toml b/pica-toolkit/tests/snapshot/filter/0112-filter-or-field-t.toml similarity index 100% rename from tests/snapshot/filter/0112-filter-or-field-t.toml rename to pica-toolkit/tests/snapshot/filter/0112-filter-or-field-t.toml diff --git a/tests/snapshot/filter/0112-filter-or-subfield-f.stdin b/pica-toolkit/tests/snapshot/filter/0112-filter-or-subfield-f.stdin similarity index 100% rename from tests/snapshot/filter/0112-filter-or-subfield-f.stdin rename to pica-toolkit/tests/snapshot/filter/0112-filter-or-subfield-f.stdin diff --git a/tests/snapshot/filter/0112-filter-or-subfield-f.toml b/pica-toolkit/tests/snapshot/filter/0112-filter-or-subfield-f.toml similarity index 100% rename from tests/snapshot/filter/0112-filter-or-subfield-f.toml rename to pica-toolkit/tests/snapshot/filter/0112-filter-or-subfield-f.toml diff --git a/tests/snapshot/filter/0112-filter-or-subfield-t.stdin b/pica-toolkit/tests/snapshot/filter/0112-filter-or-subfield-t.stdin similarity index 100% rename from tests/snapshot/filter/0112-filter-or-subfield-t.stdin rename to pica-toolkit/tests/snapshot/filter/0112-filter-or-subfield-t.stdin diff --git a/tests/snapshot/filter/0112-filter-or-subfield-t.stdout b/pica-toolkit/tests/snapshot/filter/0112-filter-or-subfield-t.stdout similarity index 100% rename from tests/snapshot/filter/0112-filter-or-subfield-t.stdout rename to pica-toolkit/tests/snapshot/filter/0112-filter-or-subfield-t.stdout diff --git a/tests/snapshot/filter/0112-filter-or-subfield-t.toml b/pica-toolkit/tests/snapshot/filter/0112-filter-or-subfield-t.toml similarity index 100% rename from tests/snapshot/filter/0112-filter-or-subfield-t.toml rename to pica-toolkit/tests/snapshot/filter/0112-filter-or-subfield-t.toml diff --git a/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-f.stdin b/pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-f.stdin similarity index 100% rename from tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-f.stdin rename to pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-f.stdin diff --git a/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-f.toml b/pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-f.toml similarity index 100% rename from tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-f.toml rename to pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-f.toml diff --git a/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-t.stdin b/pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-t.stdin similarity index 100% rename from tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-t.stdin rename to pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-t.stdin diff --git a/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-t.stdout b/pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-t.stdout similarity index 100% rename from tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-t.stdout rename to pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-t.stdout diff --git a/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-t.toml b/pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-t.toml similarity index 100% rename from tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-t.toml rename to pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-curly-starts-not-with-t.toml diff --git a/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-f.stdin b/pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-f.stdin similarity index 100% rename from tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-f.stdin rename to pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-f.stdin diff --git a/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-f.toml b/pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-f.toml similarity index 100% rename from tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-f.toml rename to pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-f.toml diff --git a/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-t.stdin b/pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-t.stdin similarity index 100% rename from tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-t.stdin rename to pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-t.stdin diff --git a/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-t.stdout b/pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-t.stdout similarity index 100% rename from tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-t.stdout rename to pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-t.stdout diff --git a/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-t.toml b/pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-t.toml similarity index 100% rename from tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-t.toml rename to pica-toolkit/tests/snapshot/filter/0113-filter-relation-matcher-simple-starts-not-with-t.toml diff --git a/tests/snapshot/filter/0200-filter-skip-invalid-config1.in/Pica.toml b/pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config1.in/Pica.toml similarity index 100% rename from tests/snapshot/filter/0200-filter-skip-invalid-config1.in/Pica.toml rename to pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config1.in/Pica.toml diff --git a/tests/snapshot/filter/0200-filter-skip-invalid-config1.toml b/pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config1.toml similarity index 100% rename from tests/snapshot/filter/0200-filter-skip-invalid-config1.toml rename to pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config1.toml diff --git a/tests/snapshot/filter/0200-filter-skip-invalid-config2.in/Pica.toml b/pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config2.in/Pica.toml similarity index 100% rename from tests/snapshot/filter/0200-filter-skip-invalid-config2.in/Pica.toml rename to pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config2.in/Pica.toml diff --git a/tests/snapshot/filter/0200-filter-skip-invalid-config2.toml b/pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config2.toml similarity index 100% rename from tests/snapshot/filter/0200-filter-skip-invalid-config2.toml rename to pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config2.toml diff --git a/tests/snapshot/filter/0200-filter-skip-invalid-config3.in/Pica.toml b/pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config3.in/Pica.toml similarity index 100% rename from tests/snapshot/filter/0200-filter-skip-invalid-config3.in/Pica.toml rename to pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config3.in/Pica.toml diff --git a/tests/snapshot/filter/0200-filter-skip-invalid-config3.toml b/pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config3.toml similarity index 100% rename from tests/snapshot/filter/0200-filter-skip-invalid-config3.toml rename to pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config3.toml diff --git a/tests/snapshot/filter/0200-filter-skip-invalid-config4.in/Pica.toml b/pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config4.in/Pica.toml similarity index 100% rename from tests/snapshot/filter/0200-filter-skip-invalid-config4.in/Pica.toml rename to pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config4.in/Pica.toml diff --git a/tests/snapshot/filter/0200-filter-skip-invalid-config4.toml b/pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config4.toml similarity index 100% rename from tests/snapshot/filter/0200-filter-skip-invalid-config4.toml rename to pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-config4.toml diff --git a/tests/snapshot/filter/0200-filter-skip-invalid-f.stdin b/pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-f.stdin similarity index 100% rename from tests/snapshot/filter/0200-filter-skip-invalid-f.stdin rename to pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-f.stdin diff --git a/tests/snapshot/filter/0200-filter-skip-invalid-f.toml b/pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-f.toml similarity index 100% rename from tests/snapshot/filter/0200-filter-skip-invalid-f.toml rename to pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-f.toml diff --git a/tests/snapshot/filter/0200-filter-skip-invalid-t.toml b/pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-t.toml similarity index 100% rename from tests/snapshot/filter/0200-filter-skip-invalid-t.toml rename to pica-toolkit/tests/snapshot/filter/0200-filter-skip-invalid-t.toml diff --git a/tests/snapshot/filter/0201-filter-invert-match-f.stdin b/pica-toolkit/tests/snapshot/filter/0201-filter-invert-match-f.stdin similarity index 100% rename from tests/snapshot/filter/0201-filter-invert-match-f.stdin rename to pica-toolkit/tests/snapshot/filter/0201-filter-invert-match-f.stdin diff --git a/tests/snapshot/filter/0201-filter-invert-match-f.toml b/pica-toolkit/tests/snapshot/filter/0201-filter-invert-match-f.toml similarity index 100% rename from tests/snapshot/filter/0201-filter-invert-match-f.toml rename to pica-toolkit/tests/snapshot/filter/0201-filter-invert-match-f.toml diff --git a/tests/snapshot/filter/0201-filter-invert-match-t.stdin b/pica-toolkit/tests/snapshot/filter/0201-filter-invert-match-t.stdin similarity index 100% rename from tests/snapshot/filter/0201-filter-invert-match-t.stdin rename to pica-toolkit/tests/snapshot/filter/0201-filter-invert-match-t.stdin diff --git a/tests/snapshot/filter/0201-filter-invert-match-t.stdout b/pica-toolkit/tests/snapshot/filter/0201-filter-invert-match-t.stdout similarity index 100% rename from tests/snapshot/filter/0201-filter-invert-match-t.stdout rename to pica-toolkit/tests/snapshot/filter/0201-filter-invert-match-t.stdout diff --git a/tests/snapshot/filter/0201-filter-invert-match-t.toml b/pica-toolkit/tests/snapshot/filter/0201-filter-invert-match-t.toml similarity index 100% rename from tests/snapshot/filter/0201-filter-invert-match-t.toml rename to pica-toolkit/tests/snapshot/filter/0201-filter-invert-match-t.toml diff --git a/tests/snapshot/filter/0202-filter-keep-empty.stdin b/pica-toolkit/tests/snapshot/filter/0202-filter-keep-empty.stdin similarity index 100% rename from tests/snapshot/filter/0202-filter-keep-empty.stdin rename to pica-toolkit/tests/snapshot/filter/0202-filter-keep-empty.stdin diff --git a/tests/snapshot/filter/0202-filter-keep-empty.toml b/pica-toolkit/tests/snapshot/filter/0202-filter-keep-empty.toml similarity index 100% rename from tests/snapshot/filter/0202-filter-keep-empty.toml rename to pica-toolkit/tests/snapshot/filter/0202-filter-keep-empty.toml diff --git a/tests/snapshot/filter/0202-filter-keep.out/out.dat.gz b/pica-toolkit/tests/snapshot/filter/0202-filter-keep.out/out.dat.gz similarity index 100% rename from tests/snapshot/filter/0202-filter-keep.out/out.dat.gz rename to pica-toolkit/tests/snapshot/filter/0202-filter-keep.out/out.dat.gz diff --git a/tests/snapshot/filter/0202-filter-keep.stdin b/pica-toolkit/tests/snapshot/filter/0202-filter-keep.stdin similarity index 100% rename from tests/snapshot/filter/0202-filter-keep.stdin rename to pica-toolkit/tests/snapshot/filter/0202-filter-keep.stdin diff --git a/tests/snapshot/filter/0202-filter-keep.toml b/pica-toolkit/tests/snapshot/filter/0202-filter-keep.toml similarity index 100% rename from tests/snapshot/filter/0202-filter-keep.toml rename to pica-toolkit/tests/snapshot/filter/0202-filter-keep.toml diff --git a/tests/snapshot/filter/0202-filter-retain.out/out.dat.gz b/pica-toolkit/tests/snapshot/filter/0202-filter-retain.out/out.dat.gz similarity index 100% rename from tests/snapshot/filter/0202-filter-retain.out/out.dat.gz rename to pica-toolkit/tests/snapshot/filter/0202-filter-retain.out/out.dat.gz diff --git a/tests/snapshot/filter/0203-filter-discard-empty.stdin b/pica-toolkit/tests/snapshot/filter/0203-filter-discard-empty.stdin similarity index 100% rename from tests/snapshot/filter/0203-filter-discard-empty.stdin rename to pica-toolkit/tests/snapshot/filter/0203-filter-discard-empty.stdin diff --git a/tests/snapshot/filter/0203-filter-discard-empty.toml b/pica-toolkit/tests/snapshot/filter/0203-filter-discard-empty.toml similarity index 100% rename from tests/snapshot/filter/0203-filter-discard-empty.toml rename to pica-toolkit/tests/snapshot/filter/0203-filter-discard-empty.toml diff --git a/tests/snapshot/filter/0203-filter-discard.out/out.dat.gz b/pica-toolkit/tests/snapshot/filter/0203-filter-discard.out/out.dat.gz similarity index 100% rename from tests/snapshot/filter/0203-filter-discard.out/out.dat.gz rename to pica-toolkit/tests/snapshot/filter/0203-filter-discard.out/out.dat.gz diff --git a/tests/snapshot/filter/0203-filter-discard.stdin b/pica-toolkit/tests/snapshot/filter/0203-filter-discard.stdin similarity index 100% rename from tests/snapshot/filter/0203-filter-discard.stdin rename to pica-toolkit/tests/snapshot/filter/0203-filter-discard.stdin diff --git a/tests/snapshot/filter/0203-filter-discard.toml b/pica-toolkit/tests/snapshot/filter/0203-filter-discard.toml similarity index 100% rename from tests/snapshot/filter/0203-filter-discard.toml rename to pica-toolkit/tests/snapshot/filter/0203-filter-discard.toml diff --git a/tests/snapshot/filter/0203-filter-drop.out/out.dat.gz b/pica-toolkit/tests/snapshot/filter/0203-filter-drop.out/out.dat.gz similarity index 100% rename from tests/snapshot/filter/0203-filter-drop.out/out.dat.gz rename to pica-toolkit/tests/snapshot/filter/0203-filter-drop.out/out.dat.gz diff --git a/tests/snapshot/filter/0204-filter-file-f.in/filter.txt b/pica-toolkit/tests/snapshot/filter/0204-filter-file-f.in/filter.txt similarity index 100% rename from tests/snapshot/filter/0204-filter-file-f.in/filter.txt rename to pica-toolkit/tests/snapshot/filter/0204-filter-file-f.in/filter.txt diff --git a/tests/snapshot/filter/0204-filter-file-f.stdin b/pica-toolkit/tests/snapshot/filter/0204-filter-file-f.stdin similarity index 100% rename from tests/snapshot/filter/0204-filter-file-f.stdin rename to pica-toolkit/tests/snapshot/filter/0204-filter-file-f.stdin diff --git a/tests/snapshot/filter/0204-filter-file-f.toml b/pica-toolkit/tests/snapshot/filter/0204-filter-file-f.toml similarity index 100% rename from tests/snapshot/filter/0204-filter-file-f.toml rename to pica-toolkit/tests/snapshot/filter/0204-filter-file-f.toml diff --git a/tests/snapshot/filter/0204-filter-file-t.in/filter.txt b/pica-toolkit/tests/snapshot/filter/0204-filter-file-t.in/filter.txt similarity index 100% rename from tests/snapshot/filter/0204-filter-file-t.in/filter.txt rename to pica-toolkit/tests/snapshot/filter/0204-filter-file-t.in/filter.txt diff --git a/tests/snapshot/filter/0204-filter-file-t.stdin b/pica-toolkit/tests/snapshot/filter/0204-filter-file-t.stdin similarity index 100% rename from tests/snapshot/filter/0204-filter-file-t.stdin rename to pica-toolkit/tests/snapshot/filter/0204-filter-file-t.stdin diff --git a/tests/snapshot/filter/0204-filter-file-t.stdout b/pica-toolkit/tests/snapshot/filter/0204-filter-file-t.stdout similarity index 100% rename from tests/snapshot/filter/0204-filter-file-t.stdout rename to pica-toolkit/tests/snapshot/filter/0204-filter-file-t.stdout diff --git a/tests/snapshot/filter/0204-filter-file-t.toml b/pica-toolkit/tests/snapshot/filter/0204-filter-file-t.toml similarity index 100% rename from tests/snapshot/filter/0204-filter-file-t.toml rename to pica-toolkit/tests/snapshot/filter/0204-filter-file-t.toml diff --git a/tests/snapshot/filter/0205-filter-allow-list.in/allow.csv b/pica-toolkit/tests/snapshot/filter/0205-filter-allow-list.in/allow.csv similarity index 100% rename from tests/snapshot/filter/0205-filter-allow-list.in/allow.csv rename to pica-toolkit/tests/snapshot/filter/0205-filter-allow-list.in/allow.csv diff --git a/tests/snapshot/filter/0205-filter-allow-list.in/dump.dat.gz b/pica-toolkit/tests/snapshot/filter/0205-filter-allow-list.in/dump.dat.gz similarity index 100% rename from tests/snapshot/filter/0205-filter-allow-list.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/filter/0205-filter-allow-list.in/dump.dat.gz diff --git a/tests/snapshot/filter/0205-filter-allow-list.stdout b/pica-toolkit/tests/snapshot/filter/0205-filter-allow-list.stdout similarity index 100% rename from tests/snapshot/filter/0205-filter-allow-list.stdout rename to pica-toolkit/tests/snapshot/filter/0205-filter-allow-list.stdout diff --git a/tests/snapshot/filter/0205-filter-allow-list.toml b/pica-toolkit/tests/snapshot/filter/0205-filter-allow-list.toml similarity index 100% rename from tests/snapshot/filter/0205-filter-allow-list.toml rename to pica-toolkit/tests/snapshot/filter/0205-filter-allow-list.toml diff --git a/tests/snapshot/filter/0206-filter-deny-list.in/deny.csv b/pica-toolkit/tests/snapshot/filter/0206-filter-deny-list.in/deny.csv similarity index 100% rename from tests/snapshot/filter/0206-filter-deny-list.in/deny.csv rename to pica-toolkit/tests/snapshot/filter/0206-filter-deny-list.in/deny.csv diff --git a/tests/snapshot/filter/0206-filter-deny-list.in/dump.dat.gz b/pica-toolkit/tests/snapshot/filter/0206-filter-deny-list.in/dump.dat.gz similarity index 100% rename from tests/snapshot/filter/0206-filter-deny-list.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/filter/0206-filter-deny-list.in/dump.dat.gz diff --git a/tests/snapshot/filter/0206-filter-deny-list.stdout b/pica-toolkit/tests/snapshot/filter/0206-filter-deny-list.stdout similarity index 100% rename from tests/snapshot/filter/0206-filter-deny-list.stdout rename to pica-toolkit/tests/snapshot/filter/0206-filter-deny-list.stdout diff --git a/tests/snapshot/filter/0206-filter-deny-list.toml b/pica-toolkit/tests/snapshot/filter/0206-filter-deny-list.toml similarity index 100% rename from tests/snapshot/filter/0206-filter-deny-list.toml rename to pica-toolkit/tests/snapshot/filter/0206-filter-deny-list.toml diff --git a/tests/snapshot/filter/0207-filter-limit-default.in/dump.dat.gz b/pica-toolkit/tests/snapshot/filter/0207-filter-limit-default.in/dump.dat.gz similarity index 100% rename from tests/snapshot/filter/0207-filter-limit-default.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/filter/0207-filter-limit-default.in/dump.dat.gz diff --git a/tests/snapshot/filter/0207-filter-limit-default.out/out.dat.gz b/pica-toolkit/tests/snapshot/filter/0207-filter-limit-default.out/out.dat.gz similarity index 100% rename from tests/snapshot/filter/0207-filter-limit-default.out/out.dat.gz rename to pica-toolkit/tests/snapshot/filter/0207-filter-limit-default.out/out.dat.gz diff --git a/tests/snapshot/filter/0207-filter-limit-default.toml b/pica-toolkit/tests/snapshot/filter/0207-filter-limit-default.toml similarity index 100% rename from tests/snapshot/filter/0207-filter-limit-default.toml rename to pica-toolkit/tests/snapshot/filter/0207-filter-limit-default.toml diff --git a/tests/snapshot/filter/0207-filter-limit.in/dump.dat.gz b/pica-toolkit/tests/snapshot/filter/0207-filter-limit.in/dump.dat.gz similarity index 100% rename from tests/snapshot/filter/0207-filter-limit.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/filter/0207-filter-limit.in/dump.dat.gz diff --git a/tests/snapshot/filter/0207-filter-limit.out/out.dat.gz b/pica-toolkit/tests/snapshot/filter/0207-filter-limit.out/out.dat.gz similarity index 100% rename from tests/snapshot/filter/0207-filter-limit.out/out.dat.gz rename to pica-toolkit/tests/snapshot/filter/0207-filter-limit.out/out.dat.gz diff --git a/tests/snapshot/filter/0207-filter-limit.toml b/pica-toolkit/tests/snapshot/filter/0207-filter-limit.toml similarity index 100% rename from tests/snapshot/filter/0207-filter-limit.toml rename to pica-toolkit/tests/snapshot/filter/0207-filter-limit.toml diff --git a/tests/snapshot/filter/0208-filter-and-f.stdin b/pica-toolkit/tests/snapshot/filter/0208-filter-and-f.stdin similarity index 100% rename from tests/snapshot/filter/0208-filter-and-f.stdin rename to pica-toolkit/tests/snapshot/filter/0208-filter-and-f.stdin diff --git a/tests/snapshot/filter/0208-filter-and-f.toml b/pica-toolkit/tests/snapshot/filter/0208-filter-and-f.toml similarity index 100% rename from tests/snapshot/filter/0208-filter-and-f.toml rename to pica-toolkit/tests/snapshot/filter/0208-filter-and-f.toml diff --git a/tests/snapshot/filter/0208-filter-and-t.stdin b/pica-toolkit/tests/snapshot/filter/0208-filter-and-t.stdin similarity index 100% rename from tests/snapshot/filter/0208-filter-and-t.stdin rename to pica-toolkit/tests/snapshot/filter/0208-filter-and-t.stdin diff --git a/tests/snapshot/filter/0208-filter-and-t.stdout b/pica-toolkit/tests/snapshot/filter/0208-filter-and-t.stdout similarity index 100% rename from tests/snapshot/filter/0208-filter-and-t.stdout rename to pica-toolkit/tests/snapshot/filter/0208-filter-and-t.stdout diff --git a/tests/snapshot/filter/0208-filter-and-t.toml b/pica-toolkit/tests/snapshot/filter/0208-filter-and-t.toml similarity index 100% rename from tests/snapshot/filter/0208-filter-and-t.toml rename to pica-toolkit/tests/snapshot/filter/0208-filter-and-t.toml diff --git a/tests/snapshot/filter/0209-filter-or-f.stdin b/pica-toolkit/tests/snapshot/filter/0209-filter-or-f.stdin similarity index 100% rename from tests/snapshot/filter/0209-filter-or-f.stdin rename to pica-toolkit/tests/snapshot/filter/0209-filter-or-f.stdin diff --git a/tests/snapshot/filter/0209-filter-or-f.toml b/pica-toolkit/tests/snapshot/filter/0209-filter-or-f.toml similarity index 100% rename from tests/snapshot/filter/0209-filter-or-f.toml rename to pica-toolkit/tests/snapshot/filter/0209-filter-or-f.toml diff --git a/tests/snapshot/filter/0209-filter-or-t.stdin b/pica-toolkit/tests/snapshot/filter/0209-filter-or-t.stdin similarity index 100% rename from tests/snapshot/filter/0209-filter-or-t.stdin rename to pica-toolkit/tests/snapshot/filter/0209-filter-or-t.stdin diff --git a/tests/snapshot/filter/0209-filter-or-t.stdout b/pica-toolkit/tests/snapshot/filter/0209-filter-or-t.stdout similarity index 100% rename from tests/snapshot/filter/0209-filter-or-t.stdout rename to pica-toolkit/tests/snapshot/filter/0209-filter-or-t.stdout diff --git a/tests/snapshot/filter/0209-filter-or-t.toml b/pica-toolkit/tests/snapshot/filter/0209-filter-or-t.toml similarity index 100% rename from tests/snapshot/filter/0209-filter-or-t.toml rename to pica-toolkit/tests/snapshot/filter/0209-filter-or-t.toml diff --git a/tests/snapshot/filter/0210-filter-not-f.stdin b/pica-toolkit/tests/snapshot/filter/0210-filter-not-f.stdin similarity index 100% rename from tests/snapshot/filter/0210-filter-not-f.stdin rename to pica-toolkit/tests/snapshot/filter/0210-filter-not-f.stdin diff --git a/tests/snapshot/filter/0210-filter-not-f.toml b/pica-toolkit/tests/snapshot/filter/0210-filter-not-f.toml similarity index 100% rename from tests/snapshot/filter/0210-filter-not-f.toml rename to pica-toolkit/tests/snapshot/filter/0210-filter-not-f.toml diff --git a/tests/snapshot/filter/0210-filter-not-t.stdin b/pica-toolkit/tests/snapshot/filter/0210-filter-not-t.stdin similarity index 100% rename from tests/snapshot/filter/0210-filter-not-t.stdin rename to pica-toolkit/tests/snapshot/filter/0210-filter-not-t.stdin diff --git a/tests/snapshot/filter/0210-filter-not-t.stdout b/pica-toolkit/tests/snapshot/filter/0210-filter-not-t.stdout similarity index 100% rename from tests/snapshot/filter/0210-filter-not-t.stdout rename to pica-toolkit/tests/snapshot/filter/0210-filter-not-t.stdout diff --git a/tests/snapshot/filter/0210-filter-not-t.toml b/pica-toolkit/tests/snapshot/filter/0210-filter-not-t.toml similarity index 100% rename from tests/snapshot/filter/0210-filter-not-t.toml rename to pica-toolkit/tests/snapshot/filter/0210-filter-not-t.toml diff --git a/tests/snapshot/filter/0211-filter-gzip-config.in/Pica.toml b/pica-toolkit/tests/snapshot/filter/0211-filter-gzip-config.in/Pica.toml similarity index 100% rename from tests/snapshot/filter/0211-filter-gzip-config.in/Pica.toml rename to pica-toolkit/tests/snapshot/filter/0211-filter-gzip-config.in/Pica.toml diff --git a/tests/snapshot/filter/0211-filter-gzip-config.stdin b/pica-toolkit/tests/snapshot/filter/0211-filter-gzip-config.stdin similarity index 100% rename from tests/snapshot/filter/0211-filter-gzip-config.stdin rename to pica-toolkit/tests/snapshot/filter/0211-filter-gzip-config.stdin diff --git a/tests/snapshot/filter/0211-filter-gzip-config.stdout b/pica-toolkit/tests/snapshot/filter/0211-filter-gzip-config.stdout similarity index 100% rename from tests/snapshot/filter/0211-filter-gzip-config.stdout rename to pica-toolkit/tests/snapshot/filter/0211-filter-gzip-config.stdout diff --git a/tests/snapshot/filter/0211-filter-gzip-config.toml b/pica-toolkit/tests/snapshot/filter/0211-filter-gzip-config.toml similarity index 100% rename from tests/snapshot/filter/0211-filter-gzip-config.toml rename to pica-toolkit/tests/snapshot/filter/0211-filter-gzip-config.toml diff --git a/tests/snapshot/filter/0211-filter-gzip-output-ext.out/out.dat.gz b/pica-toolkit/tests/snapshot/filter/0211-filter-gzip-output-ext.out/out.dat.gz similarity index 100% rename from tests/snapshot/filter/0211-filter-gzip-output-ext.out/out.dat.gz rename to pica-toolkit/tests/snapshot/filter/0211-filter-gzip-output-ext.out/out.dat.gz diff --git a/tests/snapshot/filter/0211-filter-gzip-output-ext.stdin b/pica-toolkit/tests/snapshot/filter/0211-filter-gzip-output-ext.stdin similarity index 100% rename from tests/snapshot/filter/0211-filter-gzip-output-ext.stdin rename to pica-toolkit/tests/snapshot/filter/0211-filter-gzip-output-ext.stdin diff --git a/tests/snapshot/filter/0211-filter-gzip-output-ext.toml b/pica-toolkit/tests/snapshot/filter/0211-filter-gzip-output-ext.toml similarity index 100% rename from tests/snapshot/filter/0211-filter-gzip-output-ext.toml rename to pica-toolkit/tests/snapshot/filter/0211-filter-gzip-output-ext.toml diff --git a/tests/snapshot/filter/0211-filter-gzip-output.out/out.dat b/pica-toolkit/tests/snapshot/filter/0211-filter-gzip-output.out/out.dat similarity index 100% rename from tests/snapshot/filter/0211-filter-gzip-output.out/out.dat rename to pica-toolkit/tests/snapshot/filter/0211-filter-gzip-output.out/out.dat diff --git a/tests/snapshot/filter/0211-filter-gzip-output.stdin b/pica-toolkit/tests/snapshot/filter/0211-filter-gzip-output.stdin similarity index 100% rename from tests/snapshot/filter/0211-filter-gzip-output.stdin rename to pica-toolkit/tests/snapshot/filter/0211-filter-gzip-output.stdin diff --git a/tests/snapshot/filter/0211-filter-gzip-output.toml b/pica-toolkit/tests/snapshot/filter/0211-filter-gzip-output.toml similarity index 100% rename from tests/snapshot/filter/0211-filter-gzip-output.toml rename to pica-toolkit/tests/snapshot/filter/0211-filter-gzip-output.toml diff --git a/tests/snapshot/filter/0211-filter-gzip-stdout.stdin b/pica-toolkit/tests/snapshot/filter/0211-filter-gzip-stdout.stdin similarity index 100% rename from tests/snapshot/filter/0211-filter-gzip-stdout.stdin rename to pica-toolkit/tests/snapshot/filter/0211-filter-gzip-stdout.stdin diff --git a/tests/snapshot/filter/0211-filter-gzip-stdout.stdout b/pica-toolkit/tests/snapshot/filter/0211-filter-gzip-stdout.stdout similarity index 100% rename from tests/snapshot/filter/0211-filter-gzip-stdout.stdout rename to pica-toolkit/tests/snapshot/filter/0211-filter-gzip-stdout.stdout diff --git a/tests/snapshot/filter/0211-filter-gzip-stdout.toml b/pica-toolkit/tests/snapshot/filter/0211-filter-gzip-stdout.toml similarity index 100% rename from tests/snapshot/filter/0211-filter-gzip-stdout.toml rename to pica-toolkit/tests/snapshot/filter/0211-filter-gzip-stdout.toml diff --git a/tests/snapshot/filter/0212-filter-append-empty.out/out.dat b/pica-toolkit/tests/snapshot/filter/0212-filter-append-empty.out/out.dat similarity index 100% rename from tests/snapshot/filter/0212-filter-append-empty.out/out.dat rename to pica-toolkit/tests/snapshot/filter/0212-filter-append-empty.out/out.dat diff --git a/tests/snapshot/filter/0212-filter-append-empty.stdin b/pica-toolkit/tests/snapshot/filter/0212-filter-append-empty.stdin similarity index 100% rename from tests/snapshot/filter/0212-filter-append-empty.stdin rename to pica-toolkit/tests/snapshot/filter/0212-filter-append-empty.stdin diff --git a/tests/snapshot/filter/0212-filter-append-empty.toml b/pica-toolkit/tests/snapshot/filter/0212-filter-append-empty.toml similarity index 100% rename from tests/snapshot/filter/0212-filter-append-empty.toml rename to pica-toolkit/tests/snapshot/filter/0212-filter-append-empty.toml diff --git a/tests/snapshot/filter/0212-filter-append.in/out.dat b/pica-toolkit/tests/snapshot/filter/0212-filter-append.in/out.dat similarity index 100% rename from tests/snapshot/filter/0212-filter-append.in/out.dat rename to pica-toolkit/tests/snapshot/filter/0212-filter-append.in/out.dat diff --git a/tests/snapshot/filter/0212-filter-append.out/out.dat b/pica-toolkit/tests/snapshot/filter/0212-filter-append.out/out.dat similarity index 100% rename from tests/snapshot/filter/0212-filter-append.out/out.dat rename to pica-toolkit/tests/snapshot/filter/0212-filter-append.out/out.dat diff --git a/tests/snapshot/filter/0212-filter-append.stdin b/pica-toolkit/tests/snapshot/filter/0212-filter-append.stdin similarity index 100% rename from tests/snapshot/filter/0212-filter-append.stdin rename to pica-toolkit/tests/snapshot/filter/0212-filter-append.stdin diff --git a/tests/snapshot/filter/0212-filter-append.toml b/pica-toolkit/tests/snapshot/filter/0212-filter-append.toml similarity index 100% rename from tests/snapshot/filter/0212-filter-append.toml rename to pica-toolkit/tests/snapshot/filter/0212-filter-append.toml diff --git a/tests/snapshot/filter/0213-filter-tee.out/out.dat b/pica-toolkit/tests/snapshot/filter/0213-filter-tee.out/out.dat similarity index 100% rename from tests/snapshot/filter/0213-filter-tee.out/out.dat rename to pica-toolkit/tests/snapshot/filter/0213-filter-tee.out/out.dat diff --git a/tests/snapshot/filter/0213-filter-tee.stdin b/pica-toolkit/tests/snapshot/filter/0213-filter-tee.stdin similarity index 100% rename from tests/snapshot/filter/0213-filter-tee.stdin rename to pica-toolkit/tests/snapshot/filter/0213-filter-tee.stdin diff --git a/tests/snapshot/filter/0213-filter-tee.stdout b/pica-toolkit/tests/snapshot/filter/0213-filter-tee.stdout similarity index 100% rename from tests/snapshot/filter/0213-filter-tee.stdout rename to pica-toolkit/tests/snapshot/filter/0213-filter-tee.stdout diff --git a/tests/snapshot/filter/0213-filter-tee.toml b/pica-toolkit/tests/snapshot/filter/0213-filter-tee.toml similarity index 100% rename from tests/snapshot/filter/0213-filter-tee.toml rename to pica-toolkit/tests/snapshot/filter/0213-filter-tee.toml diff --git a/tests/snapshot/filter/0214-filter-multiple-files.in/algebra.dat b/pica-toolkit/tests/snapshot/filter/0214-filter-multiple-files.in/algebra.dat similarity index 100% rename from tests/snapshot/filter/0214-filter-multiple-files.in/algebra.dat rename to pica-toolkit/tests/snapshot/filter/0214-filter-multiple-files.in/algebra.dat diff --git a/tests/snapshot/filter/0214-filter-multiple-files.in/math.dat.gz b/pica-toolkit/tests/snapshot/filter/0214-filter-multiple-files.in/math.dat.gz similarity index 100% rename from tests/snapshot/filter/0214-filter-multiple-files.in/math.dat.gz rename to pica-toolkit/tests/snapshot/filter/0214-filter-multiple-files.in/math.dat.gz diff --git a/tests/snapshot/filter/0214-filter-multiple-files.out/out.dat b/pica-toolkit/tests/snapshot/filter/0214-filter-multiple-files.out/out.dat similarity index 100% rename from tests/snapshot/filter/0214-filter-multiple-files.out/out.dat rename to pica-toolkit/tests/snapshot/filter/0214-filter-multiple-files.out/out.dat diff --git a/tests/snapshot/filter/0214-filter-multiple-files.toml b/pica-toolkit/tests/snapshot/filter/0214-filter-multiple-files.toml similarity index 100% rename from tests/snapshot/filter/0214-filter-multiple-files.toml rename to pica-toolkit/tests/snapshot/filter/0214-filter-multiple-files.toml diff --git a/tests/snapshot/filter/0215-filter-translit-filter-f.stdin b/pica-toolkit/tests/snapshot/filter/0215-filter-translit-filter-f.stdin similarity index 100% rename from tests/snapshot/filter/0215-filter-translit-filter-f.stdin rename to pica-toolkit/tests/snapshot/filter/0215-filter-translit-filter-f.stdin diff --git a/tests/snapshot/filter/0215-filter-translit-filter-f.toml b/pica-toolkit/tests/snapshot/filter/0215-filter-translit-filter-f.toml similarity index 100% rename from tests/snapshot/filter/0215-filter-translit-filter-f.toml rename to pica-toolkit/tests/snapshot/filter/0215-filter-translit-filter-f.toml diff --git a/tests/snapshot/filter/0215-filter-translit-filter-t.in/Pica.toml b/pica-toolkit/tests/snapshot/filter/0215-filter-translit-filter-t.in/Pica.toml similarity index 100% rename from tests/snapshot/filter/0215-filter-translit-filter-t.in/Pica.toml rename to pica-toolkit/tests/snapshot/filter/0215-filter-translit-filter-t.in/Pica.toml diff --git a/tests/snapshot/filter/0215-filter-translit-filter-t.stdin b/pica-toolkit/tests/snapshot/filter/0215-filter-translit-filter-t.stdin similarity index 100% rename from tests/snapshot/filter/0215-filter-translit-filter-t.stdin rename to pica-toolkit/tests/snapshot/filter/0215-filter-translit-filter-t.stdin diff --git a/tests/snapshot/filter/0215-filter-translit-filter-t.stdout b/pica-toolkit/tests/snapshot/filter/0215-filter-translit-filter-t.stdout similarity index 100% rename from tests/snapshot/filter/0215-filter-translit-filter-t.stdout rename to pica-toolkit/tests/snapshot/filter/0215-filter-translit-filter-t.stdout diff --git a/tests/snapshot/filter/0215-filter-translit-filter-t.toml b/pica-toolkit/tests/snapshot/filter/0215-filter-translit-filter-t.toml similarity index 100% rename from tests/snapshot/filter/0215-filter-translit-filter-t.toml rename to pica-toolkit/tests/snapshot/filter/0215-filter-translit-filter-t.toml diff --git a/tests/snapshot/filter/0216-filter-invalid-filter.stdin b/pica-toolkit/tests/snapshot/filter/0216-filter-invalid-filter.stdin similarity index 100% rename from tests/snapshot/filter/0216-filter-invalid-filter.stdin rename to pica-toolkit/tests/snapshot/filter/0216-filter-invalid-filter.stdin diff --git a/tests/snapshot/filter/0216-filter-invalid-filter.toml b/pica-toolkit/tests/snapshot/filter/0216-filter-invalid-filter.toml similarity index 100% rename from tests/snapshot/filter/0216-filter-invalid-filter.toml rename to pica-toolkit/tests/snapshot/filter/0216-filter-invalid-filter.toml diff --git a/tests/snapshot/filter/0300-filter-double-quotes.stdin b/pica-toolkit/tests/snapshot/filter/0300-filter-double-quotes.stdin similarity index 100% rename from tests/snapshot/filter/0300-filter-double-quotes.stdin rename to pica-toolkit/tests/snapshot/filter/0300-filter-double-quotes.stdin diff --git a/tests/snapshot/filter/0300-filter-double-quotes.stdout b/pica-toolkit/tests/snapshot/filter/0300-filter-double-quotes.stdout similarity index 100% rename from tests/snapshot/filter/0300-filter-double-quotes.stdout rename to pica-toolkit/tests/snapshot/filter/0300-filter-double-quotes.stdout diff --git a/tests/snapshot/filter/0300-filter-double-quotes.toml b/pica-toolkit/tests/snapshot/filter/0300-filter-double-quotes.toml similarity index 100% rename from tests/snapshot/filter/0300-filter-double-quotes.toml rename to pica-toolkit/tests/snapshot/filter/0300-filter-double-quotes.toml diff --git a/tests/snapshot/frequency/000-frequency-file-gz.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/000-frequency-file-gz.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/000-frequency-file-gz.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/000-frequency-file-gz.in/dump.dat.gz diff --git a/tests/snapshot/frequency/000-frequency-file-gz.toml b/pica-toolkit/tests/snapshot/frequency/000-frequency-file-gz.toml similarity index 100% rename from tests/snapshot/frequency/000-frequency-file-gz.toml rename to pica-toolkit/tests/snapshot/frequency/000-frequency-file-gz.toml diff --git a/tests/snapshot/frequency/001-frequency-stdin.stdin b/pica-toolkit/tests/snapshot/frequency/001-frequency-stdin.stdin similarity index 100% rename from tests/snapshot/frequency/001-frequency-stdin.stdin rename to pica-toolkit/tests/snapshot/frequency/001-frequency-stdin.stdin diff --git a/tests/snapshot/frequency/001-frequency-stdin.toml b/pica-toolkit/tests/snapshot/frequency/001-frequency-stdin.toml similarity index 100% rename from tests/snapshot/frequency/001-frequency-stdin.toml rename to pica-toolkit/tests/snapshot/frequency/001-frequency-stdin.toml diff --git a/tests/snapshot/frequency/002-frequency-multiple-files.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/002-frequency-multiple-files.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/002-frequency-multiple-files.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/002-frequency-multiple-files.in/dump.dat.gz diff --git a/tests/snapshot/frequency/002-frequency-multiple-files.toml b/pica-toolkit/tests/snapshot/frequency/002-frequency-multiple-files.toml similarity index 100% rename from tests/snapshot/frequency/002-frequency-multiple-files.toml rename to pica-toolkit/tests/snapshot/frequency/002-frequency-multiple-files.toml diff --git a/tests/snapshot/frequency/003-frequency-file-stdin.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/003-frequency-file-stdin.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/003-frequency-file-stdin.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/003-frequency-file-stdin.in/dump.dat.gz diff --git a/tests/snapshot/frequency/003-frequency-file-stdin.stdin b/pica-toolkit/tests/snapshot/frequency/003-frequency-file-stdin.stdin similarity index 100% rename from tests/snapshot/frequency/003-frequency-file-stdin.stdin rename to pica-toolkit/tests/snapshot/frequency/003-frequency-file-stdin.stdin diff --git a/tests/snapshot/frequency/003-frequency-file-stdin.toml b/pica-toolkit/tests/snapshot/frequency/003-frequency-file-stdin.toml similarity index 100% rename from tests/snapshot/frequency/003-frequency-file-stdin.toml rename to pica-toolkit/tests/snapshot/frequency/003-frequency-file-stdin.toml diff --git a/tests/snapshot/frequency/004-frequency-reverse.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/004-frequency-reverse.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/004-frequency-reverse.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/004-frequency-reverse.in/dump.dat.gz diff --git a/tests/snapshot/frequency/004-frequency-reverse.toml b/pica-toolkit/tests/snapshot/frequency/004-frequency-reverse.toml similarity index 100% rename from tests/snapshot/frequency/004-frequency-reverse.toml rename to pica-toolkit/tests/snapshot/frequency/004-frequency-reverse.toml diff --git a/tests/snapshot/frequency/005-frequency-limit.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/005-frequency-limit.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/005-frequency-limit.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/005-frequency-limit.in/dump.dat.gz diff --git a/tests/snapshot/frequency/005-frequency-limit.toml b/pica-toolkit/tests/snapshot/frequency/005-frequency-limit.toml similarity index 100% rename from tests/snapshot/frequency/005-frequency-limit.toml rename to pica-toolkit/tests/snapshot/frequency/005-frequency-limit.toml diff --git a/tests/snapshot/frequency/006-frequency-invalid-limit.toml b/pica-toolkit/tests/snapshot/frequency/006-frequency-invalid-limit.toml similarity index 100% rename from tests/snapshot/frequency/006-frequency-invalid-limit.toml rename to pica-toolkit/tests/snapshot/frequency/006-frequency-invalid-limit.toml diff --git a/tests/snapshot/frequency/007-frequency-multiple-subfields.stdin b/pica-toolkit/tests/snapshot/frequency/007-frequency-multiple-subfields.stdin similarity index 100% rename from tests/snapshot/frequency/007-frequency-multiple-subfields.stdin rename to pica-toolkit/tests/snapshot/frequency/007-frequency-multiple-subfields.stdin diff --git a/tests/snapshot/frequency/007-frequency-multiple-subfields.toml b/pica-toolkit/tests/snapshot/frequency/007-frequency-multiple-subfields.toml similarity index 100% rename from tests/snapshot/frequency/007-frequency-multiple-subfields.toml rename to pica-toolkit/tests/snapshot/frequency/007-frequency-multiple-subfields.toml diff --git a/tests/snapshot/frequency/008-frequency-threshold.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/008-frequency-threshold.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/008-frequency-threshold.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/008-frequency-threshold.in/dump.dat.gz diff --git a/tests/snapshot/frequency/008-frequency-threshold.toml b/pica-toolkit/tests/snapshot/frequency/008-frequency-threshold.toml similarity index 100% rename from tests/snapshot/frequency/008-frequency-threshold.toml rename to pica-toolkit/tests/snapshot/frequency/008-frequency-threshold.toml diff --git a/tests/snapshot/frequency/009-frequency-invalid-threshold.toml b/pica-toolkit/tests/snapshot/frequency/009-frequency-invalid-threshold.toml similarity index 100% rename from tests/snapshot/frequency/009-frequency-invalid-threshold.toml rename to pica-toolkit/tests/snapshot/frequency/009-frequency-invalid-threshold.toml diff --git a/tests/snapshot/frequency/010-frequency-empty-result.stdin b/pica-toolkit/tests/snapshot/frequency/010-frequency-empty-result.stdin similarity index 100% rename from tests/snapshot/frequency/010-frequency-empty-result.stdin rename to pica-toolkit/tests/snapshot/frequency/010-frequency-empty-result.stdin diff --git a/tests/snapshot/frequency/010-frequency-empty-result.toml b/pica-toolkit/tests/snapshot/frequency/010-frequency-empty-result.toml similarity index 100% rename from tests/snapshot/frequency/010-frequency-empty-result.toml rename to pica-toolkit/tests/snapshot/frequency/010-frequency-empty-result.toml diff --git a/tests/snapshot/frequency/011-frequency-header.stdin b/pica-toolkit/tests/snapshot/frequency/011-frequency-header.stdin similarity index 100% rename from tests/snapshot/frequency/011-frequency-header.stdin rename to pica-toolkit/tests/snapshot/frequency/011-frequency-header.stdin diff --git a/tests/snapshot/frequency/011-frequency-header.toml b/pica-toolkit/tests/snapshot/frequency/011-frequency-header.toml similarity index 100% rename from tests/snapshot/frequency/011-frequency-header.toml rename to pica-toolkit/tests/snapshot/frequency/011-frequency-header.toml diff --git a/tests/snapshot/frequency/012-frequency-invalid-header.stdin b/pica-toolkit/tests/snapshot/frequency/012-frequency-invalid-header.stdin similarity index 100% rename from tests/snapshot/frequency/012-frequency-invalid-header.stdin rename to pica-toolkit/tests/snapshot/frequency/012-frequency-invalid-header.stdin diff --git a/tests/snapshot/frequency/012-frequency-invalid-header.toml b/pica-toolkit/tests/snapshot/frequency/012-frequency-invalid-header.toml similarity index 100% rename from tests/snapshot/frequency/012-frequency-invalid-header.toml rename to pica-toolkit/tests/snapshot/frequency/012-frequency-invalid-header.toml diff --git a/tests/snapshot/frequency/013-frequency-output.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/013-frequency-output.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/013-frequency-output.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/013-frequency-output.in/dump.dat.gz diff --git a/tests/snapshot/frequency/013-frequency-output.out/freq.csv b/pica-toolkit/tests/snapshot/frequency/013-frequency-output.out/freq.csv similarity index 100% rename from tests/snapshot/frequency/013-frequency-output.out/freq.csv rename to pica-toolkit/tests/snapshot/frequency/013-frequency-output.out/freq.csv diff --git a/tests/snapshot/frequency/013-frequency-output.toml b/pica-toolkit/tests/snapshot/frequency/013-frequency-output.toml similarity index 100% rename from tests/snapshot/frequency/013-frequency-output.toml rename to pica-toolkit/tests/snapshot/frequency/013-frequency-output.toml diff --git a/tests/snapshot/frequency/014-frequency-translit-nfc.stdin b/pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfc.stdin similarity index 100% rename from tests/snapshot/frequency/014-frequency-translit-nfc.stdin rename to pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfc.stdin diff --git a/tests/snapshot/frequency/014-frequency-translit-nfc.toml b/pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfc.toml similarity index 100% rename from tests/snapshot/frequency/014-frequency-translit-nfc.toml rename to pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfc.toml diff --git a/tests/snapshot/frequency/014-frequency-translit-nfd.stdin b/pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfd.stdin similarity index 100% rename from tests/snapshot/frequency/014-frequency-translit-nfd.stdin rename to pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfd.stdin diff --git a/tests/snapshot/frequency/014-frequency-translit-nfd.toml b/pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfd.toml similarity index 100% rename from tests/snapshot/frequency/014-frequency-translit-nfd.toml rename to pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfd.toml diff --git a/tests/snapshot/frequency/014-frequency-translit-nfkc.stdin b/pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfkc.stdin similarity index 100% rename from tests/snapshot/frequency/014-frequency-translit-nfkc.stdin rename to pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfkc.stdin diff --git a/tests/snapshot/frequency/014-frequency-translit-nfkc.toml b/pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfkc.toml similarity index 100% rename from tests/snapshot/frequency/014-frequency-translit-nfkc.toml rename to pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfkc.toml diff --git a/tests/snapshot/frequency/014-frequency-translit-nfkd.stdin b/pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfkd.stdin similarity index 100% rename from tests/snapshot/frequency/014-frequency-translit-nfkd.stdin rename to pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfkd.stdin diff --git a/tests/snapshot/frequency/014-frequency-translit-nfkd.toml b/pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfkd.toml similarity index 100% rename from tests/snapshot/frequency/014-frequency-translit-nfkd.toml rename to pica-toolkit/tests/snapshot/frequency/014-frequency-translit-nfkd.toml diff --git a/tests/snapshot/frequency/015-frequency-invalid-translit.toml b/pica-toolkit/tests/snapshot/frequency/015-frequency-invalid-translit.toml similarity index 100% rename from tests/snapshot/frequency/015-frequency-invalid-translit.toml rename to pica-toolkit/tests/snapshot/frequency/015-frequency-invalid-translit.toml diff --git a/tests/snapshot/frequency/016-frequency-skip-invalid.stdin b/pica-toolkit/tests/snapshot/frequency/016-frequency-skip-invalid.stdin similarity index 100% rename from tests/snapshot/frequency/016-frequency-skip-invalid.stdin rename to pica-toolkit/tests/snapshot/frequency/016-frequency-skip-invalid.stdin diff --git a/tests/snapshot/frequency/016-frequency-skip-invalid.toml b/pica-toolkit/tests/snapshot/frequency/016-frequency-skip-invalid.toml similarity index 100% rename from tests/snapshot/frequency/016-frequency-skip-invalid.toml rename to pica-toolkit/tests/snapshot/frequency/016-frequency-skip-invalid.toml diff --git a/tests/snapshot/frequency/017-frequency-skip-invalid2.stdin b/pica-toolkit/tests/snapshot/frequency/017-frequency-skip-invalid2.stdin similarity index 100% rename from tests/snapshot/frequency/017-frequency-skip-invalid2.stdin rename to pica-toolkit/tests/snapshot/frequency/017-frequency-skip-invalid2.stdin diff --git a/tests/snapshot/frequency/017-frequency-skip-invalid2.toml b/pica-toolkit/tests/snapshot/frequency/017-frequency-skip-invalid2.toml similarity index 100% rename from tests/snapshot/frequency/017-frequency-skip-invalid2.toml rename to pica-toolkit/tests/snapshot/frequency/017-frequency-skip-invalid2.toml diff --git a/tests/snapshot/frequency/018-frequency-skip-config1.in/Pica.toml b/pica-toolkit/tests/snapshot/frequency/018-frequency-skip-config1.in/Pica.toml similarity index 100% rename from tests/snapshot/frequency/018-frequency-skip-config1.in/Pica.toml rename to pica-toolkit/tests/snapshot/frequency/018-frequency-skip-config1.in/Pica.toml diff --git a/tests/snapshot/frequency/018-frequency-skip-config1.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/018-frequency-skip-config1.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/018-frequency-skip-config1.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/018-frequency-skip-config1.in/dump.dat.gz diff --git a/tests/snapshot/frequency/018-frequency-skip-config1.toml b/pica-toolkit/tests/snapshot/frequency/018-frequency-skip-config1.toml similarity index 100% rename from tests/snapshot/frequency/018-frequency-skip-config1.toml rename to pica-toolkit/tests/snapshot/frequency/018-frequency-skip-config1.toml diff --git a/tests/snapshot/frequency/019-frequency-skip-config2.in/Pica.toml b/pica-toolkit/tests/snapshot/frequency/019-frequency-skip-config2.in/Pica.toml similarity index 100% rename from tests/snapshot/frequency/019-frequency-skip-config2.in/Pica.toml rename to pica-toolkit/tests/snapshot/frequency/019-frequency-skip-config2.in/Pica.toml diff --git a/tests/snapshot/frequency/019-frequency-skip-config2.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/019-frequency-skip-config2.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/019-frequency-skip-config2.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/019-frequency-skip-config2.in/dump.dat.gz diff --git a/tests/snapshot/frequency/019-frequency-skip-config2.toml b/pica-toolkit/tests/snapshot/frequency/019-frequency-skip-config2.toml similarity index 100% rename from tests/snapshot/frequency/019-frequency-skip-config2.toml rename to pica-toolkit/tests/snapshot/frequency/019-frequency-skip-config2.toml diff --git a/tests/snapshot/frequency/020-frequency-skip-config3.in/Pica.toml b/pica-toolkit/tests/snapshot/frequency/020-frequency-skip-config3.in/Pica.toml similarity index 100% rename from tests/snapshot/frequency/020-frequency-skip-config3.in/Pica.toml rename to pica-toolkit/tests/snapshot/frequency/020-frequency-skip-config3.in/Pica.toml diff --git a/tests/snapshot/frequency/020-frequency-skip-config3.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/020-frequency-skip-config3.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/020-frequency-skip-config3.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/020-frequency-skip-config3.in/dump.dat.gz diff --git a/tests/snapshot/frequency/020-frequency-skip-config3.toml b/pica-toolkit/tests/snapshot/frequency/020-frequency-skip-config3.toml similarity index 100% rename from tests/snapshot/frequency/020-frequency-skip-config3.toml rename to pica-toolkit/tests/snapshot/frequency/020-frequency-skip-config3.toml diff --git a/tests/snapshot/frequency/021-frequency-skip-config4.in/Pica.toml b/pica-toolkit/tests/snapshot/frequency/021-frequency-skip-config4.in/Pica.toml similarity index 100% rename from tests/snapshot/frequency/021-frequency-skip-config4.in/Pica.toml rename to pica-toolkit/tests/snapshot/frequency/021-frequency-skip-config4.in/Pica.toml diff --git a/tests/snapshot/frequency/021-frequency-skip-config4.stdin b/pica-toolkit/tests/snapshot/frequency/021-frequency-skip-config4.stdin similarity index 100% rename from tests/snapshot/frequency/021-frequency-skip-config4.stdin rename to pica-toolkit/tests/snapshot/frequency/021-frequency-skip-config4.stdin diff --git a/tests/snapshot/frequency/021-frequency-skip-config4.toml b/pica-toolkit/tests/snapshot/frequency/021-frequency-skip-config4.toml similarity index 100% rename from tests/snapshot/frequency/021-frequency-skip-config4.toml rename to pica-toolkit/tests/snapshot/frequency/021-frequency-skip-config4.toml diff --git a/tests/snapshot/frequency/022-frequency-invalid-path.toml b/pica-toolkit/tests/snapshot/frequency/022-frequency-invalid-path.toml similarity index 100% rename from tests/snapshot/frequency/022-frequency-invalid-path.toml rename to pica-toolkit/tests/snapshot/frequency/022-frequency-invalid-path.toml diff --git a/tests/snapshot/frequency/023-frequency-subfield-matcher.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/023-frequency-subfield-matcher.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/023-frequency-subfield-matcher.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/023-frequency-subfield-matcher.in/dump.dat.gz diff --git a/tests/snapshot/frequency/023-frequency-subfield-matcher.toml b/pica-toolkit/tests/snapshot/frequency/023-frequency-subfield-matcher.toml similarity index 100% rename from tests/snapshot/frequency/023-frequency-subfield-matcher.toml rename to pica-toolkit/tests/snapshot/frequency/023-frequency-subfield-matcher.toml diff --git a/tests/snapshot/frequency/024-frequency-subfield-matcher-ci.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/024-frequency-subfield-matcher-ci.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/024-frequency-subfield-matcher-ci.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/024-frequency-subfield-matcher-ci.in/dump.dat.gz diff --git a/tests/snapshot/frequency/024-frequency-subfield-matcher-ci.toml b/pica-toolkit/tests/snapshot/frequency/024-frequency-subfield-matcher-ci.toml similarity index 100% rename from tests/snapshot/frequency/024-frequency-subfield-matcher-ci.toml rename to pica-toolkit/tests/snapshot/frequency/024-frequency-subfield-matcher-ci.toml diff --git a/tests/snapshot/frequency/025-frequency-tsv-output.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/025-frequency-tsv-output.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/025-frequency-tsv-output.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/025-frequency-tsv-output.in/dump.dat.gz diff --git a/tests/snapshot/frequency/025-frequency-tsv-output.toml b/pica-toolkit/tests/snapshot/frequency/025-frequency-tsv-output.toml similarity index 100% rename from tests/snapshot/frequency/025-frequency-tsv-output.toml rename to pica-toolkit/tests/snapshot/frequency/025-frequency-tsv-output.toml diff --git a/tests/snapshot/frequency/026-frequency-subfield-matcher-set-builder.in/dump.dat.gz b/pica-toolkit/tests/snapshot/frequency/026-frequency-subfield-matcher-set-builder.in/dump.dat.gz similarity index 100% rename from tests/snapshot/frequency/026-frequency-subfield-matcher-set-builder.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/frequency/026-frequency-subfield-matcher-set-builder.in/dump.dat.gz diff --git a/tests/snapshot/frequency/026-frequency-subfield-matcher-set-builder.toml b/pica-toolkit/tests/snapshot/frequency/026-frequency-subfield-matcher-set-builder.toml similarity index 100% rename from tests/snapshot/frequency/026-frequency-subfield-matcher-set-builder.toml rename to pica-toolkit/tests/snapshot/frequency/026-frequency-subfield-matcher-set-builder.toml diff --git a/tests/snapshot/frequency/586-frequency-translit-path1.in/Pica.toml b/pica-toolkit/tests/snapshot/frequency/586-frequency-translit-path1.in/Pica.toml similarity index 100% rename from tests/snapshot/frequency/586-frequency-translit-path1.in/Pica.toml rename to pica-toolkit/tests/snapshot/frequency/586-frequency-translit-path1.in/Pica.toml diff --git a/tests/snapshot/frequency/586-frequency-translit-path1.stdin b/pica-toolkit/tests/snapshot/frequency/586-frequency-translit-path1.stdin similarity index 100% rename from tests/snapshot/frequency/586-frequency-translit-path1.stdin rename to pica-toolkit/tests/snapshot/frequency/586-frequency-translit-path1.stdin diff --git a/tests/snapshot/frequency/586-frequency-translit-path1.toml b/pica-toolkit/tests/snapshot/frequency/586-frequency-translit-path1.toml similarity index 100% rename from tests/snapshot/frequency/586-frequency-translit-path1.toml rename to pica-toolkit/tests/snapshot/frequency/586-frequency-translit-path1.toml diff --git a/tests/snapshot/frequency/586-frequency-translit-path2.stdin b/pica-toolkit/tests/snapshot/frequency/586-frequency-translit-path2.stdin similarity index 100% rename from tests/snapshot/frequency/586-frequency-translit-path2.stdin rename to pica-toolkit/tests/snapshot/frequency/586-frequency-translit-path2.stdin diff --git a/tests/snapshot/frequency/586-frequency-translit-path2.toml b/pica-toolkit/tests/snapshot/frequency/586-frequency-translit-path2.toml similarity index 100% rename from tests/snapshot/frequency/586-frequency-translit-path2.toml rename to pica-toolkit/tests/snapshot/frequency/586-frequency-translit-path2.toml diff --git a/tests/snapshot/hash/000-hash-stdin.stdin b/pica-toolkit/tests/snapshot/hash/000-hash-stdin.stdin similarity index 100% rename from tests/snapshot/hash/000-hash-stdin.stdin rename to pica-toolkit/tests/snapshot/hash/000-hash-stdin.stdin diff --git a/tests/snapshot/hash/000-hash-stdin.toml b/pica-toolkit/tests/snapshot/hash/000-hash-stdin.toml similarity index 100% rename from tests/snapshot/hash/000-hash-stdin.toml rename to pica-toolkit/tests/snapshot/hash/000-hash-stdin.toml diff --git a/tests/snapshot/hash/001-hash-single-file.in/algebra.dat b/pica-toolkit/tests/snapshot/hash/001-hash-single-file.in/algebra.dat similarity index 100% rename from tests/snapshot/hash/001-hash-single-file.in/algebra.dat rename to pica-toolkit/tests/snapshot/hash/001-hash-single-file.in/algebra.dat diff --git a/tests/snapshot/hash/001-hash-single-file.toml b/pica-toolkit/tests/snapshot/hash/001-hash-single-file.toml similarity index 100% rename from tests/snapshot/hash/001-hash-single-file.toml rename to pica-toolkit/tests/snapshot/hash/001-hash-single-file.toml diff --git a/tests/snapshot/hash/002-hash-multiple-files.in/algebra.dat b/pica-toolkit/tests/snapshot/hash/002-hash-multiple-files.in/algebra.dat similarity index 100% rename from tests/snapshot/hash/002-hash-multiple-files.in/algebra.dat rename to pica-toolkit/tests/snapshot/hash/002-hash-multiple-files.in/algebra.dat diff --git a/tests/snapshot/hash/002-hash-multiple-files.in/math.dat.gz b/pica-toolkit/tests/snapshot/hash/002-hash-multiple-files.in/math.dat.gz similarity index 100% rename from tests/snapshot/hash/002-hash-multiple-files.in/math.dat.gz rename to pica-toolkit/tests/snapshot/hash/002-hash-multiple-files.in/math.dat.gz diff --git a/tests/snapshot/hash/002-hash-multiple-files.out/hashes.csv b/pica-toolkit/tests/snapshot/hash/002-hash-multiple-files.out/hashes.csv similarity index 100% rename from tests/snapshot/hash/002-hash-multiple-files.out/hashes.csv rename to pica-toolkit/tests/snapshot/hash/002-hash-multiple-files.out/hashes.csv diff --git a/tests/snapshot/hash/002-hash-multiple-files.toml b/pica-toolkit/tests/snapshot/hash/002-hash-multiple-files.toml similarity index 100% rename from tests/snapshot/hash/002-hash-multiple-files.toml rename to pica-toolkit/tests/snapshot/hash/002-hash-multiple-files.toml diff --git a/tests/snapshot/hash/003-hash-tab-separated.in/algebra.dat b/pica-toolkit/tests/snapshot/hash/003-hash-tab-separated.in/algebra.dat similarity index 100% rename from tests/snapshot/hash/003-hash-tab-separated.in/algebra.dat rename to pica-toolkit/tests/snapshot/hash/003-hash-tab-separated.in/algebra.dat diff --git a/tests/snapshot/hash/003-hash-tab-separated.in/math.dat.gz b/pica-toolkit/tests/snapshot/hash/003-hash-tab-separated.in/math.dat.gz similarity index 100% rename from tests/snapshot/hash/003-hash-tab-separated.in/math.dat.gz rename to pica-toolkit/tests/snapshot/hash/003-hash-tab-separated.in/math.dat.gz diff --git a/tests/snapshot/hash/003-hash-tab-separated.out/hashes.tsv b/pica-toolkit/tests/snapshot/hash/003-hash-tab-separated.out/hashes.tsv similarity index 100% rename from tests/snapshot/hash/003-hash-tab-separated.out/hashes.tsv rename to pica-toolkit/tests/snapshot/hash/003-hash-tab-separated.out/hashes.tsv diff --git a/tests/snapshot/hash/003-hash-tab-separated.toml b/pica-toolkit/tests/snapshot/hash/003-hash-tab-separated.toml similarity index 100% rename from tests/snapshot/hash/003-hash-tab-separated.toml rename to pica-toolkit/tests/snapshot/hash/003-hash-tab-separated.toml diff --git a/tests/snapshot/hash/004-hash-multiple-records.in/dump.dat.gz b/pica-toolkit/tests/snapshot/hash/004-hash-multiple-records.in/dump.dat.gz similarity index 100% rename from tests/snapshot/hash/004-hash-multiple-records.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/hash/004-hash-multiple-records.in/dump.dat.gz diff --git a/tests/snapshot/hash/004-hash-multiple-records.out/hashes.csv b/pica-toolkit/tests/snapshot/hash/004-hash-multiple-records.out/hashes.csv similarity index 100% rename from tests/snapshot/hash/004-hash-multiple-records.out/hashes.csv rename to pica-toolkit/tests/snapshot/hash/004-hash-multiple-records.out/hashes.csv diff --git a/tests/snapshot/hash/004-hash-multiple-records.toml b/pica-toolkit/tests/snapshot/hash/004-hash-multiple-records.toml similarity index 100% rename from tests/snapshot/hash/004-hash-multiple-records.toml rename to pica-toolkit/tests/snapshot/hash/004-hash-multiple-records.toml diff --git a/tests/snapshot/hash/005-hash-skip-invalid-config1.in/Pica.toml b/pica-toolkit/tests/snapshot/hash/005-hash-skip-invalid-config1.in/Pica.toml similarity index 100% rename from tests/snapshot/hash/005-hash-skip-invalid-config1.in/Pica.toml rename to pica-toolkit/tests/snapshot/hash/005-hash-skip-invalid-config1.in/Pica.toml diff --git a/tests/snapshot/hash/005-hash-skip-invalid-config1.in/algebra.dat b/pica-toolkit/tests/snapshot/hash/005-hash-skip-invalid-config1.in/algebra.dat similarity index 100% rename from tests/snapshot/hash/005-hash-skip-invalid-config1.in/algebra.dat rename to pica-toolkit/tests/snapshot/hash/005-hash-skip-invalid-config1.in/algebra.dat diff --git a/tests/snapshot/hash/005-hash-skip-invalid-config1.in/invalid.dat b/pica-toolkit/tests/snapshot/hash/005-hash-skip-invalid-config1.in/invalid.dat similarity index 100% rename from tests/snapshot/hash/005-hash-skip-invalid-config1.in/invalid.dat rename to pica-toolkit/tests/snapshot/hash/005-hash-skip-invalid-config1.in/invalid.dat diff --git a/tests/snapshot/hash/005-hash-skip-invalid-config1.toml b/pica-toolkit/tests/snapshot/hash/005-hash-skip-invalid-config1.toml similarity index 100% rename from tests/snapshot/hash/005-hash-skip-invalid-config1.toml rename to pica-toolkit/tests/snapshot/hash/005-hash-skip-invalid-config1.toml diff --git a/tests/snapshot/hash/006-hash-skip-invalid-config2.in/Pica.toml b/pica-toolkit/tests/snapshot/hash/006-hash-skip-invalid-config2.in/Pica.toml similarity index 100% rename from tests/snapshot/hash/006-hash-skip-invalid-config2.in/Pica.toml rename to pica-toolkit/tests/snapshot/hash/006-hash-skip-invalid-config2.in/Pica.toml diff --git a/tests/snapshot/hash/006-hash-skip-invalid-config2.in/algebra.dat b/pica-toolkit/tests/snapshot/hash/006-hash-skip-invalid-config2.in/algebra.dat similarity index 100% rename from tests/snapshot/hash/006-hash-skip-invalid-config2.in/algebra.dat rename to pica-toolkit/tests/snapshot/hash/006-hash-skip-invalid-config2.in/algebra.dat diff --git a/tests/snapshot/hash/006-hash-skip-invalid-config2.in/invalid.dat b/pica-toolkit/tests/snapshot/hash/006-hash-skip-invalid-config2.in/invalid.dat similarity index 100% rename from tests/snapshot/hash/006-hash-skip-invalid-config2.in/invalid.dat rename to pica-toolkit/tests/snapshot/hash/006-hash-skip-invalid-config2.in/invalid.dat diff --git a/tests/snapshot/hash/006-hash-skip-invalid-config2.toml b/pica-toolkit/tests/snapshot/hash/006-hash-skip-invalid-config2.toml similarity index 100% rename from tests/snapshot/hash/006-hash-skip-invalid-config2.toml rename to pica-toolkit/tests/snapshot/hash/006-hash-skip-invalid-config2.toml diff --git a/tests/snapshot/hash/007-hash-skip-invalid-config3.in/Pica.toml b/pica-toolkit/tests/snapshot/hash/007-hash-skip-invalid-config3.in/Pica.toml similarity index 100% rename from tests/snapshot/hash/007-hash-skip-invalid-config3.in/Pica.toml rename to pica-toolkit/tests/snapshot/hash/007-hash-skip-invalid-config3.in/Pica.toml diff --git a/tests/snapshot/hash/007-hash-skip-invalid-config3.in/algebra.dat b/pica-toolkit/tests/snapshot/hash/007-hash-skip-invalid-config3.in/algebra.dat similarity index 100% rename from tests/snapshot/hash/007-hash-skip-invalid-config3.in/algebra.dat rename to pica-toolkit/tests/snapshot/hash/007-hash-skip-invalid-config3.in/algebra.dat diff --git a/tests/snapshot/hash/007-hash-skip-invalid-config3.in/invalid.dat b/pica-toolkit/tests/snapshot/hash/007-hash-skip-invalid-config3.in/invalid.dat similarity index 100% rename from tests/snapshot/hash/007-hash-skip-invalid-config3.in/invalid.dat rename to pica-toolkit/tests/snapshot/hash/007-hash-skip-invalid-config3.in/invalid.dat diff --git a/tests/snapshot/hash/007-hash-skip-invalid-config3.toml b/pica-toolkit/tests/snapshot/hash/007-hash-skip-invalid-config3.toml similarity index 100% rename from tests/snapshot/hash/007-hash-skip-invalid-config3.toml rename to pica-toolkit/tests/snapshot/hash/007-hash-skip-invalid-config3.toml diff --git a/tests/snapshot/hash/008-hash-skip-invalid-config4.in/Pica.toml b/pica-toolkit/tests/snapshot/hash/008-hash-skip-invalid-config4.in/Pica.toml similarity index 100% rename from tests/snapshot/hash/008-hash-skip-invalid-config4.in/Pica.toml rename to pica-toolkit/tests/snapshot/hash/008-hash-skip-invalid-config4.in/Pica.toml diff --git a/tests/snapshot/hash/008-hash-skip-invalid-config4.in/algebra.dat b/pica-toolkit/tests/snapshot/hash/008-hash-skip-invalid-config4.in/algebra.dat similarity index 100% rename from tests/snapshot/hash/008-hash-skip-invalid-config4.in/algebra.dat rename to pica-toolkit/tests/snapshot/hash/008-hash-skip-invalid-config4.in/algebra.dat diff --git a/tests/snapshot/hash/008-hash-skip-invalid-config4.in/invalid.dat b/pica-toolkit/tests/snapshot/hash/008-hash-skip-invalid-config4.in/invalid.dat similarity index 100% rename from tests/snapshot/hash/008-hash-skip-invalid-config4.in/invalid.dat rename to pica-toolkit/tests/snapshot/hash/008-hash-skip-invalid-config4.in/invalid.dat diff --git a/tests/snapshot/hash/008-hash-skip-invalid-config4.toml b/pica-toolkit/tests/snapshot/hash/008-hash-skip-invalid-config4.toml similarity index 100% rename from tests/snapshot/hash/008-hash-skip-invalid-config4.toml rename to pica-toolkit/tests/snapshot/hash/008-hash-skip-invalid-config4.toml diff --git a/tests/snapshot/hash/009-hash-custom-header.stdin b/pica-toolkit/tests/snapshot/hash/009-hash-custom-header.stdin similarity index 100% rename from tests/snapshot/hash/009-hash-custom-header.stdin rename to pica-toolkit/tests/snapshot/hash/009-hash-custom-header.stdin diff --git a/tests/snapshot/hash/009-hash-custom-header.toml b/pica-toolkit/tests/snapshot/hash/009-hash-custom-header.toml similarity index 100% rename from tests/snapshot/hash/009-hash-custom-header.toml rename to pica-toolkit/tests/snapshot/hash/009-hash-custom-header.toml diff --git a/tests/snapshot/invalid/invalid-read-file.in/invalid.dat b/pica-toolkit/tests/snapshot/invalid/invalid-read-file.in/invalid.dat similarity index 100% rename from tests/snapshot/invalid/invalid-read-file.in/invalid.dat rename to pica-toolkit/tests/snapshot/invalid/invalid-read-file.in/invalid.dat diff --git a/tests/snapshot/invalid/invalid-read-file.stdout b/pica-toolkit/tests/snapshot/invalid/invalid-read-file.stdout similarity index 100% rename from tests/snapshot/invalid/invalid-read-file.stdout rename to pica-toolkit/tests/snapshot/invalid/invalid-read-file.stdout diff --git a/tests/snapshot/invalid/invalid-read-file.toml b/pica-toolkit/tests/snapshot/invalid/invalid-read-file.toml similarity index 100% rename from tests/snapshot/invalid/invalid-read-file.toml rename to pica-toolkit/tests/snapshot/invalid/invalid-read-file.toml diff --git a/tests/snapshot/invalid/invalid-read-gzip-file.in/DUMP.dat.gz b/pica-toolkit/tests/snapshot/invalid/invalid-read-gzip-file.in/DUMP.dat.gz similarity index 100% rename from tests/snapshot/invalid/invalid-read-gzip-file.in/DUMP.dat.gz rename to pica-toolkit/tests/snapshot/invalid/invalid-read-gzip-file.in/DUMP.dat.gz diff --git a/tests/snapshot/invalid/invalid-read-gzip-file.stdin b/pica-toolkit/tests/snapshot/invalid/invalid-read-gzip-file.stdin similarity index 100% rename from tests/snapshot/invalid/invalid-read-gzip-file.stdin rename to pica-toolkit/tests/snapshot/invalid/invalid-read-gzip-file.stdin diff --git a/tests/snapshot/invalid/invalid-read-gzip-file.toml b/pica-toolkit/tests/snapshot/invalid/invalid-read-gzip-file.toml similarity index 100% rename from tests/snapshot/invalid/invalid-read-gzip-file.toml rename to pica-toolkit/tests/snapshot/invalid/invalid-read-gzip-file.toml diff --git a/tests/snapshot/invalid/invalid-read-multiple-files.in/118515551.dat.gz b/pica-toolkit/tests/snapshot/invalid/invalid-read-multiple-files.in/118515551.dat.gz similarity index 100% rename from tests/snapshot/invalid/invalid-read-multiple-files.in/118515551.dat.gz rename to pica-toolkit/tests/snapshot/invalid/invalid-read-multiple-files.in/118515551.dat.gz diff --git a/tests/snapshot/invalid/invalid-read-multiple-files.in/invalid.dat b/pica-toolkit/tests/snapshot/invalid/invalid-read-multiple-files.in/invalid.dat similarity index 100% rename from tests/snapshot/invalid/invalid-read-multiple-files.in/invalid.dat rename to pica-toolkit/tests/snapshot/invalid/invalid-read-multiple-files.in/invalid.dat diff --git a/tests/snapshot/invalid/invalid-read-multiple-files.stdout b/pica-toolkit/tests/snapshot/invalid/invalid-read-multiple-files.stdout similarity index 100% rename from tests/snapshot/invalid/invalid-read-multiple-files.stdout rename to pica-toolkit/tests/snapshot/invalid/invalid-read-multiple-files.stdout diff --git a/tests/snapshot/invalid/invalid-read-multiple-files.toml b/pica-toolkit/tests/snapshot/invalid/invalid-read-multiple-files.toml similarity index 100% rename from tests/snapshot/invalid/invalid-read-multiple-files.toml rename to pica-toolkit/tests/snapshot/invalid/invalid-read-multiple-files.toml diff --git a/tests/snapshot/invalid/invalid-read-stdin1.stdin b/pica-toolkit/tests/snapshot/invalid/invalid-read-stdin1.stdin similarity index 100% rename from tests/snapshot/invalid/invalid-read-stdin1.stdin rename to pica-toolkit/tests/snapshot/invalid/invalid-read-stdin1.stdin diff --git a/tests/snapshot/invalid/invalid-read-stdin1.stdout b/pica-toolkit/tests/snapshot/invalid/invalid-read-stdin1.stdout similarity index 100% rename from tests/snapshot/invalid/invalid-read-stdin1.stdout rename to pica-toolkit/tests/snapshot/invalid/invalid-read-stdin1.stdout diff --git a/tests/snapshot/invalid/invalid-read-stdin1.toml b/pica-toolkit/tests/snapshot/invalid/invalid-read-stdin1.toml similarity index 100% rename from tests/snapshot/invalid/invalid-read-stdin1.toml rename to pica-toolkit/tests/snapshot/invalid/invalid-read-stdin1.toml diff --git a/tests/snapshot/invalid/invalid-read-stdin2.in/118515551.dat.gz b/pica-toolkit/tests/snapshot/invalid/invalid-read-stdin2.in/118515551.dat.gz similarity index 100% rename from tests/snapshot/invalid/invalid-read-stdin2.in/118515551.dat.gz rename to pica-toolkit/tests/snapshot/invalid/invalid-read-stdin2.in/118515551.dat.gz diff --git a/tests/snapshot/invalid/invalid-read-stdin2.stdin b/pica-toolkit/tests/snapshot/invalid/invalid-read-stdin2.stdin similarity index 100% rename from tests/snapshot/invalid/invalid-read-stdin2.stdin rename to pica-toolkit/tests/snapshot/invalid/invalid-read-stdin2.stdin diff --git a/tests/snapshot/invalid/invalid-read-stdin2.stdout b/pica-toolkit/tests/snapshot/invalid/invalid-read-stdin2.stdout similarity index 100% rename from tests/snapshot/invalid/invalid-read-stdin2.stdout rename to pica-toolkit/tests/snapshot/invalid/invalid-read-stdin2.stdout diff --git a/tests/snapshot/invalid/invalid-read-stdin2.toml b/pica-toolkit/tests/snapshot/invalid/invalid-read-stdin2.toml similarity index 100% rename from tests/snapshot/invalid/invalid-read-stdin2.toml rename to pica-toolkit/tests/snapshot/invalid/invalid-read-stdin2.toml diff --git a/tests/snapshot/invalid/invalid-write-file.out/out.dat b/pica-toolkit/tests/snapshot/invalid/invalid-write-file.out/out.dat similarity index 100% rename from tests/snapshot/invalid/invalid-write-file.out/out.dat rename to pica-toolkit/tests/snapshot/invalid/invalid-write-file.out/out.dat diff --git a/tests/snapshot/invalid/invalid-write-file.stdin b/pica-toolkit/tests/snapshot/invalid/invalid-write-file.stdin similarity index 100% rename from tests/snapshot/invalid/invalid-write-file.stdin rename to pica-toolkit/tests/snapshot/invalid/invalid-write-file.stdin diff --git a/tests/snapshot/invalid/invalid-write-file.toml b/pica-toolkit/tests/snapshot/invalid/invalid-write-file.toml similarity index 100% rename from tests/snapshot/invalid/invalid-write-file.toml rename to pica-toolkit/tests/snapshot/invalid/invalid-write-file.toml diff --git a/tests/snapshot/partition/0000-partition-bbg.in/dump.dat.gz b/pica-toolkit/tests/snapshot/partition/0000-partition-bbg.in/dump.dat.gz similarity index 100% rename from tests/snapshot/partition/0000-partition-bbg.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/partition/0000-partition-bbg.in/dump.dat.gz diff --git a/tests/snapshot/partition/0000-partition-bbg.out/Tg1.dat b/pica-toolkit/tests/snapshot/partition/0000-partition-bbg.out/Tg1.dat similarity index 100% rename from tests/snapshot/partition/0000-partition-bbg.out/Tg1.dat rename to pica-toolkit/tests/snapshot/partition/0000-partition-bbg.out/Tg1.dat diff --git a/tests/snapshot/partition/0000-partition-bbg.out/Tp1.dat b/pica-toolkit/tests/snapshot/partition/0000-partition-bbg.out/Tp1.dat similarity index 100% rename from tests/snapshot/partition/0000-partition-bbg.out/Tp1.dat rename to pica-toolkit/tests/snapshot/partition/0000-partition-bbg.out/Tp1.dat diff --git a/tests/snapshot/partition/0000-partition-bbg.out/Ts1.dat b/pica-toolkit/tests/snapshot/partition/0000-partition-bbg.out/Ts1.dat similarity index 100% rename from tests/snapshot/partition/0000-partition-bbg.out/Ts1.dat rename to pica-toolkit/tests/snapshot/partition/0000-partition-bbg.out/Ts1.dat diff --git a/tests/snapshot/partition/0000-partition-bbg.out/Tsz.dat b/pica-toolkit/tests/snapshot/partition/0000-partition-bbg.out/Tsz.dat similarity index 100% rename from tests/snapshot/partition/0000-partition-bbg.out/Tsz.dat rename to pica-toolkit/tests/snapshot/partition/0000-partition-bbg.out/Tsz.dat diff --git a/tests/snapshot/partition/0000-partition-bbg.out/Tu1.dat b/pica-toolkit/tests/snapshot/partition/0000-partition-bbg.out/Tu1.dat similarity index 100% rename from tests/snapshot/partition/0000-partition-bbg.out/Tu1.dat rename to pica-toolkit/tests/snapshot/partition/0000-partition-bbg.out/Tu1.dat diff --git a/tests/snapshot/partition/0000-partition-bbg.toml b/pica-toolkit/tests/snapshot/partition/0000-partition-bbg.toml similarity index 100% rename from tests/snapshot/partition/0000-partition-bbg.toml rename to pica-toolkit/tests/snapshot/partition/0000-partition-bbg.toml diff --git a/tests/snapshot/partition/0001-partition-multiple-files.in/algebra.dat b/pica-toolkit/tests/snapshot/partition/0001-partition-multiple-files.in/algebra.dat similarity index 100% rename from tests/snapshot/partition/0001-partition-multiple-files.in/algebra.dat rename to pica-toolkit/tests/snapshot/partition/0001-partition-multiple-files.in/algebra.dat diff --git a/tests/snapshot/partition/0001-partition-multiple-files.in/math.dat.gz b/pica-toolkit/tests/snapshot/partition/0001-partition-multiple-files.in/math.dat.gz similarity index 100% rename from tests/snapshot/partition/0001-partition-multiple-files.in/math.dat.gz rename to pica-toolkit/tests/snapshot/partition/0001-partition-multiple-files.in/math.dat.gz diff --git a/tests/snapshot/partition/0001-partition-multiple-files.out/Ts1.dat b/pica-toolkit/tests/snapshot/partition/0001-partition-multiple-files.out/Ts1.dat similarity index 100% rename from tests/snapshot/partition/0001-partition-multiple-files.out/Ts1.dat rename to pica-toolkit/tests/snapshot/partition/0001-partition-multiple-files.out/Ts1.dat diff --git a/tests/snapshot/partition/0001-partition-multiple-files.out/Tsz.dat b/pica-toolkit/tests/snapshot/partition/0001-partition-multiple-files.out/Tsz.dat similarity index 100% rename from tests/snapshot/partition/0001-partition-multiple-files.out/Tsz.dat rename to pica-toolkit/tests/snapshot/partition/0001-partition-multiple-files.out/Tsz.dat diff --git a/tests/snapshot/partition/0001-partition-multiple-files.toml b/pica-toolkit/tests/snapshot/partition/0001-partition-multiple-files.toml similarity index 100% rename from tests/snapshot/partition/0001-partition-multiple-files.toml rename to pica-toolkit/tests/snapshot/partition/0001-partition-multiple-files.toml diff --git a/tests/snapshot/partition/0002-partition-stdin.out/040011569.dat b/pica-toolkit/tests/snapshot/partition/0002-partition-stdin.out/040011569.dat similarity index 100% rename from tests/snapshot/partition/0002-partition-stdin.out/040011569.dat rename to pica-toolkit/tests/snapshot/partition/0002-partition-stdin.out/040011569.dat diff --git a/tests/snapshot/partition/0002-partition-stdin.stdin b/pica-toolkit/tests/snapshot/partition/0002-partition-stdin.stdin similarity index 100% rename from tests/snapshot/partition/0002-partition-stdin.stdin rename to pica-toolkit/tests/snapshot/partition/0002-partition-stdin.stdin diff --git a/tests/snapshot/partition/0002-partition-stdin.toml b/pica-toolkit/tests/snapshot/partition/0002-partition-stdin.toml similarity index 100% rename from tests/snapshot/partition/0002-partition-stdin.toml rename to pica-toolkit/tests/snapshot/partition/0002-partition-stdin.toml diff --git a/tests/snapshot/partition/0003-partition-template-option.out/bbg_Ts1.dat b/pica-toolkit/tests/snapshot/partition/0003-partition-template-option.out/bbg_Ts1.dat similarity index 100% rename from tests/snapshot/partition/0003-partition-template-option.out/bbg_Ts1.dat rename to pica-toolkit/tests/snapshot/partition/0003-partition-template-option.out/bbg_Ts1.dat diff --git a/tests/snapshot/partition/0003-partition-template-option.stdin b/pica-toolkit/tests/snapshot/partition/0003-partition-template-option.stdin similarity index 100% rename from tests/snapshot/partition/0003-partition-template-option.stdin rename to pica-toolkit/tests/snapshot/partition/0003-partition-template-option.stdin diff --git a/tests/snapshot/partition/0003-partition-template-option.toml b/pica-toolkit/tests/snapshot/partition/0003-partition-template-option.toml similarity index 100% rename from tests/snapshot/partition/0003-partition-template-option.toml rename to pica-toolkit/tests/snapshot/partition/0003-partition-template-option.toml diff --git a/tests/snapshot/partition/0004-partition-template-config.in/Pica.toml b/pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/Pica.toml similarity index 100% rename from tests/snapshot/partition/0004-partition-template-config.in/Pica.toml rename to pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/Pica.toml diff --git a/tests/snapshot/partition/0004-partition-template-config.in/bbg_Tg1.dat b/pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/bbg_Tg1.dat similarity index 100% rename from tests/snapshot/partition/0004-partition-template-config.in/bbg_Tg1.dat rename to pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/bbg_Tg1.dat diff --git a/tests/snapshot/partition/0004-partition-template-config.in/bbg_Tp1.dat b/pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/bbg_Tp1.dat similarity index 100% rename from tests/snapshot/partition/0004-partition-template-config.in/bbg_Tp1.dat rename to pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/bbg_Tp1.dat diff --git a/tests/snapshot/partition/0004-partition-template-config.in/bbg_Ts1.dat b/pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/bbg_Ts1.dat similarity index 100% rename from tests/snapshot/partition/0004-partition-template-config.in/bbg_Ts1.dat rename to pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/bbg_Ts1.dat diff --git a/tests/snapshot/partition/0004-partition-template-config.in/bbg_Tsz.dat b/pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/bbg_Tsz.dat similarity index 100% rename from tests/snapshot/partition/0004-partition-template-config.in/bbg_Tsz.dat rename to pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/bbg_Tsz.dat diff --git a/tests/snapshot/partition/0004-partition-template-config.in/bbg_Tu1.dat b/pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/bbg_Tu1.dat similarity index 100% rename from tests/snapshot/partition/0004-partition-template-config.in/bbg_Tu1.dat rename to pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/bbg_Tu1.dat diff --git a/tests/snapshot/partition/0004-partition-template-config.in/dump.dat.gz b/pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/dump.dat.gz similarity index 100% rename from tests/snapshot/partition/0004-partition-template-config.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/partition/0004-partition-template-config.in/dump.dat.gz diff --git a/tests/snapshot/partition/0004-partition-template-config.toml b/pica-toolkit/tests/snapshot/partition/0004-partition-template-config.toml similarity index 100% rename from tests/snapshot/partition/0004-partition-template-config.toml rename to pica-toolkit/tests/snapshot/partition/0004-partition-template-config.toml diff --git a/tests/snapshot/partition/0005-partition-outdir.out/outdir/Ts1.dat b/pica-toolkit/tests/snapshot/partition/0005-partition-outdir.out/outdir/Ts1.dat similarity index 100% rename from tests/snapshot/partition/0005-partition-outdir.out/outdir/Ts1.dat rename to pica-toolkit/tests/snapshot/partition/0005-partition-outdir.out/outdir/Ts1.dat diff --git a/tests/snapshot/partition/0005-partition-outdir.stdin b/pica-toolkit/tests/snapshot/partition/0005-partition-outdir.stdin similarity index 100% rename from tests/snapshot/partition/0005-partition-outdir.stdin rename to pica-toolkit/tests/snapshot/partition/0005-partition-outdir.stdin diff --git a/tests/snapshot/partition/0005-partition-outdir.toml b/pica-toolkit/tests/snapshot/partition/0005-partition-outdir.toml similarity index 100% rename from tests/snapshot/partition/0005-partition-outdir.toml rename to pica-toolkit/tests/snapshot/partition/0005-partition-outdir.toml diff --git a/tests/snapshot/partition/0006-partition-skip-invalid-option.out/.keep b/pica-toolkit/tests/snapshot/partition/0006-partition-skip-invalid-option.out/.keep similarity index 100% rename from tests/snapshot/partition/0006-partition-skip-invalid-option.out/.keep rename to pica-toolkit/tests/snapshot/partition/0006-partition-skip-invalid-option.out/.keep diff --git a/tests/snapshot/partition/0006-partition-skip-invalid-option.stdin b/pica-toolkit/tests/snapshot/partition/0006-partition-skip-invalid-option.stdin similarity index 100% rename from tests/snapshot/partition/0006-partition-skip-invalid-option.stdin rename to pica-toolkit/tests/snapshot/partition/0006-partition-skip-invalid-option.stdin diff --git a/tests/snapshot/partition/0006-partition-skip-invalid-option.toml b/pica-toolkit/tests/snapshot/partition/0006-partition-skip-invalid-option.toml similarity index 100% rename from tests/snapshot/partition/0006-partition-skip-invalid-option.toml rename to pica-toolkit/tests/snapshot/partition/0006-partition-skip-invalid-option.toml diff --git a/tests/snapshot/partition/0007-partition-skip-invalid-config1.in/Pica.toml b/pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.in/Pica.toml similarity index 100% rename from tests/snapshot/partition/0007-partition-skip-invalid-config1.in/Pica.toml rename to pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.in/Pica.toml diff --git a/tests/snapshot/partition/0007-partition-skip-invalid-config1.in/dump.dat.gz b/pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.in/dump.dat.gz similarity index 100% rename from tests/snapshot/partition/0007-partition-skip-invalid-config1.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.in/dump.dat.gz diff --git a/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tg1.dat b/pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tg1.dat similarity index 100% rename from tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tg1.dat rename to pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tg1.dat diff --git a/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tp1.dat b/pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tp1.dat similarity index 100% rename from tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tp1.dat rename to pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tp1.dat diff --git a/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Ts1.dat b/pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Ts1.dat similarity index 100% rename from tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Ts1.dat rename to pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Ts1.dat diff --git a/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tsz.dat b/pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tsz.dat similarity index 100% rename from tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tsz.dat rename to pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tsz.dat diff --git a/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tu1.dat b/pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tu1.dat similarity index 100% rename from tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tu1.dat rename to pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.out/Tu1.dat diff --git a/tests/snapshot/partition/0007-partition-skip-invalid-config1.toml b/pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.toml similarity index 100% rename from tests/snapshot/partition/0007-partition-skip-invalid-config1.toml rename to pica-toolkit/tests/snapshot/partition/0007-partition-skip-invalid-config1.toml diff --git a/tests/snapshot/partition/0008-partition-skip-invalid-config2.in/Pica.toml b/pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.in/Pica.toml similarity index 100% rename from tests/snapshot/partition/0008-partition-skip-invalid-config2.in/Pica.toml rename to pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.in/Pica.toml diff --git a/tests/snapshot/partition/0008-partition-skip-invalid-config2.in/dump.dat.gz b/pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.in/dump.dat.gz similarity index 100% rename from tests/snapshot/partition/0008-partition-skip-invalid-config2.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.in/dump.dat.gz diff --git a/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tg1.dat b/pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tg1.dat similarity index 100% rename from tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tg1.dat rename to pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tg1.dat diff --git a/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tp1.dat b/pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tp1.dat similarity index 100% rename from tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tp1.dat rename to pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tp1.dat diff --git a/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Ts1.dat b/pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Ts1.dat similarity index 100% rename from tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Ts1.dat rename to pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Ts1.dat diff --git a/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tsz.dat b/pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tsz.dat similarity index 100% rename from tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tsz.dat rename to pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tsz.dat diff --git a/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tu1.dat b/pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tu1.dat similarity index 100% rename from tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tu1.dat rename to pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.out/Tu1.dat diff --git a/tests/snapshot/partition/0008-partition-skip-invalid-config2.toml b/pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.toml similarity index 100% rename from tests/snapshot/partition/0008-partition-skip-invalid-config2.toml rename to pica-toolkit/tests/snapshot/partition/0008-partition-skip-invalid-config2.toml diff --git a/tests/snapshot/partition/0009-partition-skip-invalid-config3.in/Pica.toml b/pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.in/Pica.toml similarity index 100% rename from tests/snapshot/partition/0009-partition-skip-invalid-config3.in/Pica.toml rename to pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.in/Pica.toml diff --git a/tests/snapshot/partition/0009-partition-skip-invalid-config3.in/dump.dat.gz b/pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.in/dump.dat.gz similarity index 100% rename from tests/snapshot/partition/0009-partition-skip-invalid-config3.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.in/dump.dat.gz diff --git a/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tg1.dat b/pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tg1.dat similarity index 100% rename from tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tg1.dat rename to pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tg1.dat diff --git a/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tp1.dat b/pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tp1.dat similarity index 100% rename from tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tp1.dat rename to pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tp1.dat diff --git a/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Ts1.dat b/pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Ts1.dat similarity index 100% rename from tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Ts1.dat rename to pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Ts1.dat diff --git a/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tsz.dat b/pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tsz.dat similarity index 100% rename from tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tsz.dat rename to pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tsz.dat diff --git a/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tu1.dat b/pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tu1.dat similarity index 100% rename from tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tu1.dat rename to pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.out/Tu1.dat diff --git a/tests/snapshot/partition/0009-partition-skip-invalid-config3.toml b/pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.toml similarity index 100% rename from tests/snapshot/partition/0009-partition-skip-invalid-config3.toml rename to pica-toolkit/tests/snapshot/partition/0009-partition-skip-invalid-config3.toml diff --git a/tests/snapshot/partition/0010-partition-skip-invalid-config4.in/Pica.toml b/pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.in/Pica.toml similarity index 100% rename from tests/snapshot/partition/0010-partition-skip-invalid-config4.in/Pica.toml rename to pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.in/Pica.toml diff --git a/tests/snapshot/partition/0010-partition-skip-invalid-config4.in/dump.dat.gz b/pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.in/dump.dat.gz similarity index 100% rename from tests/snapshot/partition/0010-partition-skip-invalid-config4.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.in/dump.dat.gz diff --git a/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tg1.dat b/pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tg1.dat similarity index 100% rename from tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tg1.dat rename to pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tg1.dat diff --git a/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tp1.dat b/pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tp1.dat similarity index 100% rename from tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tp1.dat rename to pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tp1.dat diff --git a/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Ts1.dat b/pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Ts1.dat similarity index 100% rename from tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Ts1.dat rename to pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Ts1.dat diff --git a/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tsz.dat b/pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tsz.dat similarity index 100% rename from tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tsz.dat rename to pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tsz.dat diff --git a/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tu1.dat b/pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tu1.dat similarity index 100% rename from tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tu1.dat rename to pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.out/Tu1.dat diff --git a/tests/snapshot/partition/0010-partition-skip-invalid-config4.toml b/pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.toml similarity index 100% rename from tests/snapshot/partition/0010-partition-skip-invalid-config4.toml rename to pica-toolkit/tests/snapshot/partition/0010-partition-skip-invalid-config4.toml diff --git a/tests/snapshot/partition/0011-partition-gzip-flag.in/dump.dat.gz b/pica-toolkit/tests/snapshot/partition/0011-partition-gzip-flag.in/dump.dat.gz similarity index 100% rename from tests/snapshot/partition/0011-partition-gzip-flag.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/partition/0011-partition-gzip-flag.in/dump.dat.gz diff --git a/tests/snapshot/partition/0011-partition-gzip-flag.out/Tb1.dat.gz b/pica-toolkit/tests/snapshot/partition/0011-partition-gzip-flag.out/Tb1.dat.gz similarity index 100% rename from tests/snapshot/partition/0011-partition-gzip-flag.out/Tb1.dat.gz rename to pica-toolkit/tests/snapshot/partition/0011-partition-gzip-flag.out/Tb1.dat.gz diff --git a/tests/snapshot/partition/0011-partition-gzip-flag.out/Tp1.dat.gz b/pica-toolkit/tests/snapshot/partition/0011-partition-gzip-flag.out/Tp1.dat.gz similarity index 100% rename from tests/snapshot/partition/0011-partition-gzip-flag.out/Tp1.dat.gz rename to pica-toolkit/tests/snapshot/partition/0011-partition-gzip-flag.out/Tp1.dat.gz diff --git a/tests/snapshot/partition/0011-partition-gzip-flag.out/Ts1.dat.gz b/pica-toolkit/tests/snapshot/partition/0011-partition-gzip-flag.out/Ts1.dat.gz similarity index 100% rename from tests/snapshot/partition/0011-partition-gzip-flag.out/Ts1.dat.gz rename to pica-toolkit/tests/snapshot/partition/0011-partition-gzip-flag.out/Ts1.dat.gz diff --git a/tests/snapshot/partition/0011-partition-gzip-flag.toml b/pica-toolkit/tests/snapshot/partition/0011-partition-gzip-flag.toml similarity index 100% rename from tests/snapshot/partition/0011-partition-gzip-flag.toml rename to pica-toolkit/tests/snapshot/partition/0011-partition-gzip-flag.toml diff --git a/tests/snapshot/partition/0012-partition-gzip-config.in/Pica.toml b/pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.in/Pica.toml similarity index 100% rename from tests/snapshot/partition/0012-partition-gzip-config.in/Pica.toml rename to pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.in/Pica.toml diff --git a/tests/snapshot/partition/0012-partition-gzip-config.in/dump.dat.gz b/pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.in/dump.dat.gz similarity index 100% rename from tests/snapshot/partition/0012-partition-gzip-config.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.in/dump.dat.gz diff --git a/tests/snapshot/partition/0012-partition-gzip-config.out/Tg1.dat.gz b/pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.out/Tg1.dat.gz similarity index 100% rename from tests/snapshot/partition/0012-partition-gzip-config.out/Tg1.dat.gz rename to pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.out/Tg1.dat.gz diff --git a/tests/snapshot/partition/0012-partition-gzip-config.out/Tp1.dat.gz b/pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.out/Tp1.dat.gz similarity index 100% rename from tests/snapshot/partition/0012-partition-gzip-config.out/Tp1.dat.gz rename to pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.out/Tp1.dat.gz diff --git a/tests/snapshot/partition/0012-partition-gzip-config.out/Ts1.dat.gz b/pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.out/Ts1.dat.gz similarity index 100% rename from tests/snapshot/partition/0012-partition-gzip-config.out/Ts1.dat.gz rename to pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.out/Ts1.dat.gz diff --git a/tests/snapshot/partition/0012-partition-gzip-config.out/Tsz.dat.gz b/pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.out/Tsz.dat.gz similarity index 100% rename from tests/snapshot/partition/0012-partition-gzip-config.out/Tsz.dat.gz rename to pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.out/Tsz.dat.gz diff --git a/tests/snapshot/partition/0012-partition-gzip-config.out/Tu1.dat.gz b/pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.out/Tu1.dat.gz similarity index 100% rename from tests/snapshot/partition/0012-partition-gzip-config.out/Tu1.dat.gz rename to pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.out/Tu1.dat.gz diff --git a/tests/snapshot/partition/0012-partition-gzip-config.toml b/pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.toml similarity index 100% rename from tests/snapshot/partition/0012-partition-gzip-config.toml rename to pica-toolkit/tests/snapshot/partition/0012-partition-gzip-config.toml diff --git a/tests/snapshot/print/000-print-stdin.toml b/pica-toolkit/tests/snapshot/print/000-print-stdin.toml similarity index 100% rename from tests/snapshot/print/000-print-stdin.toml rename to pica-toolkit/tests/snapshot/print/000-print-stdin.toml diff --git a/tests/snapshot/print/001-print-color-always.stdout b/pica-toolkit/tests/snapshot/print/001-print-color-always.stdout similarity index 100% rename from tests/snapshot/print/001-print-color-always.stdout rename to pica-toolkit/tests/snapshot/print/001-print-color-always.stdout diff --git a/tests/snapshot/print/001-print-color-always.toml b/pica-toolkit/tests/snapshot/print/001-print-color-always.toml similarity index 100% rename from tests/snapshot/print/001-print-color-always.toml rename to pica-toolkit/tests/snapshot/print/001-print-color-always.toml diff --git a/tests/snapshot/print/002-print-color-never.stdout b/pica-toolkit/tests/snapshot/print/002-print-color-never.stdout similarity index 100% rename from tests/snapshot/print/002-print-color-never.stdout rename to pica-toolkit/tests/snapshot/print/002-print-color-never.stdout diff --git a/tests/snapshot/print/002-print-color-never.toml b/pica-toolkit/tests/snapshot/print/002-print-color-never.toml similarity index 100% rename from tests/snapshot/print/002-print-color-never.toml rename to pica-toolkit/tests/snapshot/print/002-print-color-never.toml diff --git a/tests/snapshot/print/003-print-color-ansi.stdout b/pica-toolkit/tests/snapshot/print/003-print-color-ansi.stdout similarity index 100% rename from tests/snapshot/print/003-print-color-ansi.stdout rename to pica-toolkit/tests/snapshot/print/003-print-color-ansi.stdout diff --git a/tests/snapshot/print/003-print-color-ansi.toml b/pica-toolkit/tests/snapshot/print/003-print-color-ansi.toml similarity index 100% rename from tests/snapshot/print/003-print-color-ansi.toml rename to pica-toolkit/tests/snapshot/print/003-print-color-ansi.toml diff --git a/tests/snapshot/print/004-print-color-auto.stdout b/pica-toolkit/tests/snapshot/print/004-print-color-auto.stdout similarity index 100% rename from tests/snapshot/print/004-print-color-auto.stdout rename to pica-toolkit/tests/snapshot/print/004-print-color-auto.stdout diff --git a/tests/snapshot/print/004-print-color-auto.toml b/pica-toolkit/tests/snapshot/print/004-print-color-auto.toml similarity index 100% rename from tests/snapshot/print/004-print-color-auto.toml rename to pica-toolkit/tests/snapshot/print/004-print-color-auto.toml diff --git a/tests/snapshot/print/005-print-limit.in/dump.dat.gz b/pica-toolkit/tests/snapshot/print/005-print-limit.in/dump.dat.gz similarity index 100% rename from tests/snapshot/print/005-print-limit.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/print/005-print-limit.in/dump.dat.gz diff --git a/tests/snapshot/print/005-print-limit.stdout b/pica-toolkit/tests/snapshot/print/005-print-limit.stdout similarity index 100% rename from tests/snapshot/print/005-print-limit.stdout rename to pica-toolkit/tests/snapshot/print/005-print-limit.stdout diff --git a/tests/snapshot/print/005-print-limit.toml b/pica-toolkit/tests/snapshot/print/005-print-limit.toml similarity index 100% rename from tests/snapshot/print/005-print-limit.toml rename to pica-toolkit/tests/snapshot/print/005-print-limit.toml diff --git a/tests/snapshot/print/006-print-output.out/out.txt b/pica-toolkit/tests/snapshot/print/006-print-output.out/out.txt similarity index 100% rename from tests/snapshot/print/006-print-output.out/out.txt rename to pica-toolkit/tests/snapshot/print/006-print-output.out/out.txt diff --git a/tests/snapshot/print/006-print-output.toml b/pica-toolkit/tests/snapshot/print/006-print-output.toml similarity index 100% rename from tests/snapshot/print/006-print-output.toml rename to pica-toolkit/tests/snapshot/print/006-print-output.toml diff --git a/tests/snapshot/print/007-print-skip-invalid-config1.in/Pica.toml b/pica-toolkit/tests/snapshot/print/007-print-skip-invalid-config1.in/Pica.toml similarity index 100% rename from tests/snapshot/print/007-print-skip-invalid-config1.in/Pica.toml rename to pica-toolkit/tests/snapshot/print/007-print-skip-invalid-config1.in/Pica.toml diff --git a/tests/snapshot/print/007-print-skip-invalid-config1.in/dump.dat.gz b/pica-toolkit/tests/snapshot/print/007-print-skip-invalid-config1.in/dump.dat.gz similarity index 100% rename from tests/snapshot/print/007-print-skip-invalid-config1.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/print/007-print-skip-invalid-config1.in/dump.dat.gz diff --git a/tests/snapshot/print/007-print-skip-invalid-config1.out/out.txt b/pica-toolkit/tests/snapshot/print/007-print-skip-invalid-config1.out/out.txt similarity index 100% rename from tests/snapshot/print/007-print-skip-invalid-config1.out/out.txt rename to pica-toolkit/tests/snapshot/print/007-print-skip-invalid-config1.out/out.txt diff --git a/tests/snapshot/print/007-print-skip-invalid-config1.toml b/pica-toolkit/tests/snapshot/print/007-print-skip-invalid-config1.toml similarity index 100% rename from tests/snapshot/print/007-print-skip-invalid-config1.toml rename to pica-toolkit/tests/snapshot/print/007-print-skip-invalid-config1.toml diff --git a/tests/snapshot/print/008-print-skip-invalid-config2.in/Pica.toml b/pica-toolkit/tests/snapshot/print/008-print-skip-invalid-config2.in/Pica.toml similarity index 100% rename from tests/snapshot/print/008-print-skip-invalid-config2.in/Pica.toml rename to pica-toolkit/tests/snapshot/print/008-print-skip-invalid-config2.in/Pica.toml diff --git a/tests/snapshot/print/008-print-skip-invalid-config2.in/dump.dat.gz b/pica-toolkit/tests/snapshot/print/008-print-skip-invalid-config2.in/dump.dat.gz similarity index 100% rename from tests/snapshot/print/008-print-skip-invalid-config2.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/print/008-print-skip-invalid-config2.in/dump.dat.gz diff --git a/tests/snapshot/print/008-print-skip-invalid-config2.out/out.txt b/pica-toolkit/tests/snapshot/print/008-print-skip-invalid-config2.out/out.txt similarity index 100% rename from tests/snapshot/print/008-print-skip-invalid-config2.out/out.txt rename to pica-toolkit/tests/snapshot/print/008-print-skip-invalid-config2.out/out.txt diff --git a/tests/snapshot/print/008-print-skip-invalid-config2.toml b/pica-toolkit/tests/snapshot/print/008-print-skip-invalid-config2.toml similarity index 100% rename from tests/snapshot/print/008-print-skip-invalid-config2.toml rename to pica-toolkit/tests/snapshot/print/008-print-skip-invalid-config2.toml diff --git a/tests/snapshot/print/009-print-skip-invalid-config3.in/Pica.toml b/pica-toolkit/tests/snapshot/print/009-print-skip-invalid-config3.in/Pica.toml similarity index 100% rename from tests/snapshot/print/009-print-skip-invalid-config3.in/Pica.toml rename to pica-toolkit/tests/snapshot/print/009-print-skip-invalid-config3.in/Pica.toml diff --git a/tests/snapshot/print/009-print-skip-invalid-config3.in/dump.dat.gz b/pica-toolkit/tests/snapshot/print/009-print-skip-invalid-config3.in/dump.dat.gz similarity index 100% rename from tests/snapshot/print/009-print-skip-invalid-config3.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/print/009-print-skip-invalid-config3.in/dump.dat.gz diff --git a/tests/snapshot/print/009-print-skip-invalid-config3.out/out.txt b/pica-toolkit/tests/snapshot/print/009-print-skip-invalid-config3.out/out.txt similarity index 100% rename from tests/snapshot/print/009-print-skip-invalid-config3.out/out.txt rename to pica-toolkit/tests/snapshot/print/009-print-skip-invalid-config3.out/out.txt diff --git a/tests/snapshot/print/009-print-skip-invalid-config3.toml b/pica-toolkit/tests/snapshot/print/009-print-skip-invalid-config3.toml similarity index 100% rename from tests/snapshot/print/009-print-skip-invalid-config3.toml rename to pica-toolkit/tests/snapshot/print/009-print-skip-invalid-config3.toml diff --git a/tests/snapshot/print/010-print-skip-invalid-config4.in/Pica.toml b/pica-toolkit/tests/snapshot/print/010-print-skip-invalid-config4.in/Pica.toml similarity index 100% rename from tests/snapshot/print/010-print-skip-invalid-config4.in/Pica.toml rename to pica-toolkit/tests/snapshot/print/010-print-skip-invalid-config4.in/Pica.toml diff --git a/tests/snapshot/print/010-print-skip-invalid-config4.in/dump.dat.gz b/pica-toolkit/tests/snapshot/print/010-print-skip-invalid-config4.in/dump.dat.gz similarity index 100% rename from tests/snapshot/print/010-print-skip-invalid-config4.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/print/010-print-skip-invalid-config4.in/dump.dat.gz diff --git a/tests/snapshot/print/010-print-skip-invalid-config4.out/out.txt b/pica-toolkit/tests/snapshot/print/010-print-skip-invalid-config4.out/out.txt similarity index 100% rename from tests/snapshot/print/010-print-skip-invalid-config4.out/out.txt rename to pica-toolkit/tests/snapshot/print/010-print-skip-invalid-config4.out/out.txt diff --git a/tests/snapshot/print/010-print-skip-invalid-config4.toml b/pica-toolkit/tests/snapshot/print/010-print-skip-invalid-config4.toml similarity index 100% rename from tests/snapshot/print/010-print-skip-invalid-config4.toml rename to pica-toolkit/tests/snapshot/print/010-print-skip-invalid-config4.toml diff --git a/tests/snapshot/print/011-print-translit-nfd.stdin b/pica-toolkit/tests/snapshot/print/011-print-translit-nfd.stdin similarity index 100% rename from tests/snapshot/print/011-print-translit-nfd.stdin rename to pica-toolkit/tests/snapshot/print/011-print-translit-nfd.stdin diff --git a/tests/snapshot/print/011-print-translit-nfd.stdout b/pica-toolkit/tests/snapshot/print/011-print-translit-nfd.stdout similarity index 100% rename from tests/snapshot/print/011-print-translit-nfd.stdout rename to pica-toolkit/tests/snapshot/print/011-print-translit-nfd.stdout diff --git a/tests/snapshot/print/011-print-translit-nfd.toml b/pica-toolkit/tests/snapshot/print/011-print-translit-nfd.toml similarity index 100% rename from tests/snapshot/print/011-print-translit-nfd.toml rename to pica-toolkit/tests/snapshot/print/011-print-translit-nfd.toml diff --git a/tests/snapshot/print/012-print-translit-nfkd.stdin b/pica-toolkit/tests/snapshot/print/012-print-translit-nfkd.stdin similarity index 100% rename from tests/snapshot/print/012-print-translit-nfkd.stdin rename to pica-toolkit/tests/snapshot/print/012-print-translit-nfkd.stdin diff --git a/tests/snapshot/print/012-print-translit-nfkd.stdout b/pica-toolkit/tests/snapshot/print/012-print-translit-nfkd.stdout similarity index 100% rename from tests/snapshot/print/012-print-translit-nfkd.stdout rename to pica-toolkit/tests/snapshot/print/012-print-translit-nfkd.stdout diff --git a/tests/snapshot/print/012-print-translit-nfkd.toml b/pica-toolkit/tests/snapshot/print/012-print-translit-nfkd.toml similarity index 100% rename from tests/snapshot/print/012-print-translit-nfkd.toml rename to pica-toolkit/tests/snapshot/print/012-print-translit-nfkd.toml diff --git a/tests/snapshot/print/013-print-translit-nfc.stdin b/pica-toolkit/tests/snapshot/print/013-print-translit-nfc.stdin similarity index 100% rename from tests/snapshot/print/013-print-translit-nfc.stdin rename to pica-toolkit/tests/snapshot/print/013-print-translit-nfc.stdin diff --git a/tests/snapshot/print/013-print-translit-nfc.stdout b/pica-toolkit/tests/snapshot/print/013-print-translit-nfc.stdout similarity index 100% rename from tests/snapshot/print/013-print-translit-nfc.stdout rename to pica-toolkit/tests/snapshot/print/013-print-translit-nfc.stdout diff --git a/tests/snapshot/print/013-print-translit-nfc.toml b/pica-toolkit/tests/snapshot/print/013-print-translit-nfc.toml similarity index 100% rename from tests/snapshot/print/013-print-translit-nfc.toml rename to pica-toolkit/tests/snapshot/print/013-print-translit-nfc.toml diff --git a/tests/snapshot/print/014-print-translit-nfkc.stdin b/pica-toolkit/tests/snapshot/print/014-print-translit-nfkc.stdin similarity index 100% rename from tests/snapshot/print/014-print-translit-nfkc.stdin rename to pica-toolkit/tests/snapshot/print/014-print-translit-nfkc.stdin diff --git a/tests/snapshot/print/014-print-translit-nfkc.stdout b/pica-toolkit/tests/snapshot/print/014-print-translit-nfkc.stdout similarity index 100% rename from tests/snapshot/print/014-print-translit-nfkc.stdout rename to pica-toolkit/tests/snapshot/print/014-print-translit-nfkc.stdout diff --git a/tests/snapshot/print/014-print-translit-nfkc.toml b/pica-toolkit/tests/snapshot/print/014-print-translit-nfkc.toml similarity index 100% rename from tests/snapshot/print/014-print-translit-nfkc.toml rename to pica-toolkit/tests/snapshot/print/014-print-translit-nfkc.toml diff --git a/tests/snapshot/sample/000-sample-single-record.toml b/pica-toolkit/tests/snapshot/sample/000-sample-single-record.toml similarity index 100% rename from tests/snapshot/sample/000-sample-single-record.toml rename to pica-toolkit/tests/snapshot/sample/000-sample-single-record.toml diff --git a/tests/snapshot/sample/001-sample-seed-rng.in/dump.dat.gz b/pica-toolkit/tests/snapshot/sample/001-sample-seed-rng.in/dump.dat.gz similarity index 100% rename from tests/snapshot/sample/001-sample-seed-rng.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/sample/001-sample-seed-rng.in/dump.dat.gz diff --git a/tests/snapshot/sample/001-sample-seed-rng.out/samples.dat b/pica-toolkit/tests/snapshot/sample/001-sample-seed-rng.out/samples.dat similarity index 100% rename from tests/snapshot/sample/001-sample-seed-rng.out/samples.dat rename to pica-toolkit/tests/snapshot/sample/001-sample-seed-rng.out/samples.dat diff --git a/tests/snapshot/sample/001-sample-seed-rng.toml b/pica-toolkit/tests/snapshot/sample/001-sample-seed-rng.toml similarity index 100% rename from tests/snapshot/sample/001-sample-seed-rng.toml rename to pica-toolkit/tests/snapshot/sample/001-sample-seed-rng.toml diff --git a/tests/snapshot/sample/002-sample-skip-invalid-config1.in/Pica.toml b/pica-toolkit/tests/snapshot/sample/002-sample-skip-invalid-config1.in/Pica.toml similarity index 100% rename from tests/snapshot/sample/002-sample-skip-invalid-config1.in/Pica.toml rename to pica-toolkit/tests/snapshot/sample/002-sample-skip-invalid-config1.in/Pica.toml diff --git a/tests/snapshot/sample/002-sample-skip-invalid-config1.in/dump.dat.gz b/pica-toolkit/tests/snapshot/sample/002-sample-skip-invalid-config1.in/dump.dat.gz similarity index 100% rename from tests/snapshot/sample/002-sample-skip-invalid-config1.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/sample/002-sample-skip-invalid-config1.in/dump.dat.gz diff --git a/tests/snapshot/sample/002-sample-skip-invalid-config1.out/samples.dat b/pica-toolkit/tests/snapshot/sample/002-sample-skip-invalid-config1.out/samples.dat similarity index 100% rename from tests/snapshot/sample/002-sample-skip-invalid-config1.out/samples.dat rename to pica-toolkit/tests/snapshot/sample/002-sample-skip-invalid-config1.out/samples.dat diff --git a/tests/snapshot/sample/002-sample-skip-invalid-config1.toml b/pica-toolkit/tests/snapshot/sample/002-sample-skip-invalid-config1.toml similarity index 100% rename from tests/snapshot/sample/002-sample-skip-invalid-config1.toml rename to pica-toolkit/tests/snapshot/sample/002-sample-skip-invalid-config1.toml diff --git a/tests/snapshot/sample/003-sample-skip-invalid-config2.in/Pica.toml b/pica-toolkit/tests/snapshot/sample/003-sample-skip-invalid-config2.in/Pica.toml similarity index 100% rename from tests/snapshot/sample/003-sample-skip-invalid-config2.in/Pica.toml rename to pica-toolkit/tests/snapshot/sample/003-sample-skip-invalid-config2.in/Pica.toml diff --git a/tests/snapshot/sample/003-sample-skip-invalid-config2.in/dump.dat.gz b/pica-toolkit/tests/snapshot/sample/003-sample-skip-invalid-config2.in/dump.dat.gz similarity index 100% rename from tests/snapshot/sample/003-sample-skip-invalid-config2.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/sample/003-sample-skip-invalid-config2.in/dump.dat.gz diff --git a/tests/snapshot/sample/003-sample-skip-invalid-config2.out/samples.dat b/pica-toolkit/tests/snapshot/sample/003-sample-skip-invalid-config2.out/samples.dat similarity index 100% rename from tests/snapshot/sample/003-sample-skip-invalid-config2.out/samples.dat rename to pica-toolkit/tests/snapshot/sample/003-sample-skip-invalid-config2.out/samples.dat diff --git a/tests/snapshot/sample/003-sample-skip-invalid-config2.toml b/pica-toolkit/tests/snapshot/sample/003-sample-skip-invalid-config2.toml similarity index 100% rename from tests/snapshot/sample/003-sample-skip-invalid-config2.toml rename to pica-toolkit/tests/snapshot/sample/003-sample-skip-invalid-config2.toml diff --git a/tests/snapshot/sample/004-sample-skip-invalid-config3.in/Pica.toml b/pica-toolkit/tests/snapshot/sample/004-sample-skip-invalid-config3.in/Pica.toml similarity index 100% rename from tests/snapshot/sample/004-sample-skip-invalid-config3.in/Pica.toml rename to pica-toolkit/tests/snapshot/sample/004-sample-skip-invalid-config3.in/Pica.toml diff --git a/tests/snapshot/sample/004-sample-skip-invalid-config3.in/dump.dat.gz b/pica-toolkit/tests/snapshot/sample/004-sample-skip-invalid-config3.in/dump.dat.gz similarity index 100% rename from tests/snapshot/sample/004-sample-skip-invalid-config3.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/sample/004-sample-skip-invalid-config3.in/dump.dat.gz diff --git a/tests/snapshot/sample/004-sample-skip-invalid-config3.out/samples.dat b/pica-toolkit/tests/snapshot/sample/004-sample-skip-invalid-config3.out/samples.dat similarity index 100% rename from tests/snapshot/sample/004-sample-skip-invalid-config3.out/samples.dat rename to pica-toolkit/tests/snapshot/sample/004-sample-skip-invalid-config3.out/samples.dat diff --git a/tests/snapshot/sample/004-sample-skip-invalid-config3.toml b/pica-toolkit/tests/snapshot/sample/004-sample-skip-invalid-config3.toml similarity index 100% rename from tests/snapshot/sample/004-sample-skip-invalid-config3.toml rename to pica-toolkit/tests/snapshot/sample/004-sample-skip-invalid-config3.toml diff --git a/tests/snapshot/sample/005-sample-skip-invalid-config4.in/Pica.toml b/pica-toolkit/tests/snapshot/sample/005-sample-skip-invalid-config4.in/Pica.toml similarity index 100% rename from tests/snapshot/sample/005-sample-skip-invalid-config4.in/Pica.toml rename to pica-toolkit/tests/snapshot/sample/005-sample-skip-invalid-config4.in/Pica.toml diff --git a/tests/snapshot/sample/005-sample-skip-invalid-config4.in/dump.dat.gz b/pica-toolkit/tests/snapshot/sample/005-sample-skip-invalid-config4.in/dump.dat.gz similarity index 100% rename from tests/snapshot/sample/005-sample-skip-invalid-config4.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/sample/005-sample-skip-invalid-config4.in/dump.dat.gz diff --git a/tests/snapshot/sample/005-sample-skip-invalid-config4.out/samples.dat b/pica-toolkit/tests/snapshot/sample/005-sample-skip-invalid-config4.out/samples.dat similarity index 100% rename from tests/snapshot/sample/005-sample-skip-invalid-config4.out/samples.dat rename to pica-toolkit/tests/snapshot/sample/005-sample-skip-invalid-config4.out/samples.dat diff --git a/tests/snapshot/sample/005-sample-skip-invalid-config4.toml b/pica-toolkit/tests/snapshot/sample/005-sample-skip-invalid-config4.toml similarity index 100% rename from tests/snapshot/sample/005-sample-skip-invalid-config4.toml rename to pica-toolkit/tests/snapshot/sample/005-sample-skip-invalid-config4.toml diff --git a/tests/snapshot/sample/006-sample-gzip-output.in/dump.dat.gz b/pica-toolkit/tests/snapshot/sample/006-sample-gzip-output.in/dump.dat.gz similarity index 100% rename from tests/snapshot/sample/006-sample-gzip-output.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/sample/006-sample-gzip-output.in/dump.dat.gz diff --git a/tests/snapshot/sample/006-sample-gzip-output.out/samples.dat b/pica-toolkit/tests/snapshot/sample/006-sample-gzip-output.out/samples.dat similarity index 100% rename from tests/snapshot/sample/006-sample-gzip-output.out/samples.dat rename to pica-toolkit/tests/snapshot/sample/006-sample-gzip-output.out/samples.dat diff --git a/tests/snapshot/sample/006-sample-gzip-output.toml b/pica-toolkit/tests/snapshot/sample/006-sample-gzip-output.toml similarity index 100% rename from tests/snapshot/sample/006-sample-gzip-output.toml rename to pica-toolkit/tests/snapshot/sample/006-sample-gzip-output.toml diff --git a/tests/snapshot/select/000-select-missing-field.toml b/pica-toolkit/tests/snapshot/select/000-select-missing-field.toml similarity index 100% rename from tests/snapshot/select/000-select-missing-field.toml rename to pica-toolkit/tests/snapshot/select/000-select-missing-field.toml diff --git a/tests/snapshot/select/001-select-single-value.toml b/pica-toolkit/tests/snapshot/select/001-select-single-value.toml similarity index 100% rename from tests/snapshot/select/001-select-single-value.toml rename to pica-toolkit/tests/snapshot/select/001-select-single-value.toml diff --git a/tests/snapshot/select/002-select-repeated-subfield.toml b/pica-toolkit/tests/snapshot/select/002-select-repeated-subfield.toml similarity index 100% rename from tests/snapshot/select/002-select-repeated-subfield.toml rename to pica-toolkit/tests/snapshot/select/002-select-repeated-subfield.toml diff --git a/tests/snapshot/select/003-select-repeated-field.toml b/pica-toolkit/tests/snapshot/select/003-select-repeated-field.toml similarity index 100% rename from tests/snapshot/select/003-select-repeated-field.toml rename to pica-toolkit/tests/snapshot/select/003-select-repeated-field.toml diff --git a/tests/snapshot/select/004-select-repeated-field-subfield.toml b/pica-toolkit/tests/snapshot/select/004-select-repeated-field-subfield.toml similarity index 100% rename from tests/snapshot/select/004-select-repeated-field-subfield.toml rename to pica-toolkit/tests/snapshot/select/004-select-repeated-field-subfield.toml diff --git a/tests/snapshot/select/005-select-const-string1.toml b/pica-toolkit/tests/snapshot/select/005-select-const-string1.toml similarity index 100% rename from tests/snapshot/select/005-select-const-string1.toml rename to pica-toolkit/tests/snapshot/select/005-select-const-string1.toml diff --git a/tests/snapshot/select/006-select-const-string2.toml b/pica-toolkit/tests/snapshot/select/006-select-const-string2.toml similarity index 100% rename from tests/snapshot/select/006-select-const-string2.toml rename to pica-toolkit/tests/snapshot/select/006-select-const-string2.toml diff --git a/tests/snapshot/select/007-select-field-with-predicate.toml b/pica-toolkit/tests/snapshot/select/007-select-field-with-predicate.toml similarity index 100% rename from tests/snapshot/select/007-select-field-with-predicate.toml rename to pica-toolkit/tests/snapshot/select/007-select-field-with-predicate.toml diff --git a/tests/snapshot/select/008-select-field-tuple.toml b/pica-toolkit/tests/snapshot/select/008-select-field-tuple.toml similarity index 100% rename from tests/snapshot/select/008-select-field-tuple.toml rename to pica-toolkit/tests/snapshot/select/008-select-field-tuple.toml diff --git a/tests/snapshot/select/009-select-one-column.in/dump.dat.gz b/pica-toolkit/tests/snapshot/select/009-select-one-column.in/dump.dat.gz similarity index 100% rename from tests/snapshot/select/009-select-one-column.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/select/009-select-one-column.in/dump.dat.gz diff --git a/tests/snapshot/select/009-select-one-column.out/out.csv b/pica-toolkit/tests/snapshot/select/009-select-one-column.out/out.csv similarity index 100% rename from tests/snapshot/select/009-select-one-column.out/out.csv rename to pica-toolkit/tests/snapshot/select/009-select-one-column.out/out.csv diff --git a/tests/snapshot/select/009-select-one-column.toml b/pica-toolkit/tests/snapshot/select/009-select-one-column.toml similarity index 100% rename from tests/snapshot/select/009-select-one-column.toml rename to pica-toolkit/tests/snapshot/select/009-select-one-column.toml diff --git a/tests/snapshot/select/010-select-two-columns.in/dump.dat.gz b/pica-toolkit/tests/snapshot/select/010-select-two-columns.in/dump.dat.gz similarity index 100% rename from tests/snapshot/select/010-select-two-columns.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/select/010-select-two-columns.in/dump.dat.gz diff --git a/tests/snapshot/select/010-select-two-columns.out/out.csv b/pica-toolkit/tests/snapshot/select/010-select-two-columns.out/out.csv similarity index 100% rename from tests/snapshot/select/010-select-two-columns.out/out.csv rename to pica-toolkit/tests/snapshot/select/010-select-two-columns.out/out.csv diff --git a/tests/snapshot/select/010-select-two-columns.toml b/pica-toolkit/tests/snapshot/select/010-select-two-columns.toml similarity index 100% rename from tests/snapshot/select/010-select-two-columns.toml rename to pica-toolkit/tests/snapshot/select/010-select-two-columns.toml diff --git a/tests/snapshot/select/011-select-cart-product.out/out.csv b/pica-toolkit/tests/snapshot/select/011-select-cart-product.out/out.csv similarity index 100% rename from tests/snapshot/select/011-select-cart-product.out/out.csv rename to pica-toolkit/tests/snapshot/select/011-select-cart-product.out/out.csv diff --git a/tests/snapshot/select/011-select-cart-product.stdin b/pica-toolkit/tests/snapshot/select/011-select-cart-product.stdin similarity index 100% rename from tests/snapshot/select/011-select-cart-product.stdin rename to pica-toolkit/tests/snapshot/select/011-select-cart-product.stdin diff --git a/tests/snapshot/select/011-select-cart-product.toml b/pica-toolkit/tests/snapshot/select/011-select-cart-product.toml similarity index 100% rename from tests/snapshot/select/011-select-cart-product.toml rename to pica-toolkit/tests/snapshot/select/011-select-cart-product.toml diff --git a/tests/snapshot/select/012-select-empty-row.stdin b/pica-toolkit/tests/snapshot/select/012-select-empty-row.stdin similarity index 100% rename from tests/snapshot/select/012-select-empty-row.stdin rename to pica-toolkit/tests/snapshot/select/012-select-empty-row.stdin diff --git a/tests/snapshot/select/012-select-empty-row.toml b/pica-toolkit/tests/snapshot/select/012-select-empty-row.toml similarity index 100% rename from tests/snapshot/select/012-select-empty-row.toml rename to pica-toolkit/tests/snapshot/select/012-select-empty-row.toml diff --git a/tests/snapshot/select/013-select-predicate.stdin b/pica-toolkit/tests/snapshot/select/013-select-predicate.stdin similarity index 100% rename from tests/snapshot/select/013-select-predicate.stdin rename to pica-toolkit/tests/snapshot/select/013-select-predicate.stdin diff --git a/tests/snapshot/select/013-select-predicate.toml b/pica-toolkit/tests/snapshot/select/013-select-predicate.toml similarity index 100% rename from tests/snapshot/select/013-select-predicate.toml rename to pica-toolkit/tests/snapshot/select/013-select-predicate.toml diff --git a/tests/snapshot/select/014-select-occurrence-wildcard.stdin b/pica-toolkit/tests/snapshot/select/014-select-occurrence-wildcard.stdin similarity index 100% rename from tests/snapshot/select/014-select-occurrence-wildcard.stdin rename to pica-toolkit/tests/snapshot/select/014-select-occurrence-wildcard.stdin diff --git a/tests/snapshot/select/014-select-occurrence-wildcard.toml b/pica-toolkit/tests/snapshot/select/014-select-occurrence-wildcard.toml similarity index 100% rename from tests/snapshot/select/014-select-occurrence-wildcard.toml rename to pica-toolkit/tests/snapshot/select/014-select-occurrence-wildcard.toml diff --git a/tests/snapshot/select/015-select-occurrence-explict.stdin b/pica-toolkit/tests/snapshot/select/015-select-occurrence-explict.stdin similarity index 100% rename from tests/snapshot/select/015-select-occurrence-explict.stdin rename to pica-toolkit/tests/snapshot/select/015-select-occurrence-explict.stdin diff --git a/tests/snapshot/select/015-select-occurrence-explict.toml b/pica-toolkit/tests/snapshot/select/015-select-occurrence-explict.toml similarity index 100% rename from tests/snapshot/select/015-select-occurrence-explict.toml rename to pica-toolkit/tests/snapshot/select/015-select-occurrence-explict.toml diff --git a/tests/snapshot/select/016-select-occurrence-range.stdin b/pica-toolkit/tests/snapshot/select/016-select-occurrence-range.stdin similarity index 100% rename from tests/snapshot/select/016-select-occurrence-range.stdin rename to pica-toolkit/tests/snapshot/select/016-select-occurrence-range.stdin diff --git a/tests/snapshot/select/016-select-occurrence-range.toml b/pica-toolkit/tests/snapshot/select/016-select-occurrence-range.toml similarity index 100% rename from tests/snapshot/select/016-select-occurrence-range.toml rename to pica-toolkit/tests/snapshot/select/016-select-occurrence-range.toml diff --git a/tests/snapshot/select/017-select-tag-pattern.stdin b/pica-toolkit/tests/snapshot/select/017-select-tag-pattern.stdin similarity index 100% rename from tests/snapshot/select/017-select-tag-pattern.stdin rename to pica-toolkit/tests/snapshot/select/017-select-tag-pattern.stdin diff --git a/tests/snapshot/select/017-select-tag-pattern.toml b/pica-toolkit/tests/snapshot/select/017-select-tag-pattern.toml similarity index 100% rename from tests/snapshot/select/017-select-tag-pattern.toml rename to pica-toolkit/tests/snapshot/select/017-select-tag-pattern.toml diff --git a/tests/snapshot/select/018-select-header.in/dump.dat.gz b/pica-toolkit/tests/snapshot/select/018-select-header.in/dump.dat.gz similarity index 100% rename from tests/snapshot/select/018-select-header.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/select/018-select-header.in/dump.dat.gz diff --git a/tests/snapshot/select/018-select-header.out/out.csv b/pica-toolkit/tests/snapshot/select/018-select-header.out/out.csv similarity index 100% rename from tests/snapshot/select/018-select-header.out/out.csv rename to pica-toolkit/tests/snapshot/select/018-select-header.out/out.csv diff --git a/tests/snapshot/select/018-select-header.toml b/pica-toolkit/tests/snapshot/select/018-select-header.toml similarity index 100% rename from tests/snapshot/select/018-select-header.toml rename to pica-toolkit/tests/snapshot/select/018-select-header.toml diff --git a/tests/snapshot/select/019-select-tab-separated.in/dump.dat.gz b/pica-toolkit/tests/snapshot/select/019-select-tab-separated.in/dump.dat.gz similarity index 100% rename from tests/snapshot/select/019-select-tab-separated.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/select/019-select-tab-separated.in/dump.dat.gz diff --git a/tests/snapshot/select/019-select-tab-separated.out/out.tsv b/pica-toolkit/tests/snapshot/select/019-select-tab-separated.out/out.tsv similarity index 100% rename from tests/snapshot/select/019-select-tab-separated.out/out.tsv rename to pica-toolkit/tests/snapshot/select/019-select-tab-separated.out/out.tsv diff --git a/tests/snapshot/select/019-select-tab-separated.toml b/pica-toolkit/tests/snapshot/select/019-select-tab-separated.toml similarity index 100% rename from tests/snapshot/select/019-select-tab-separated.toml rename to pica-toolkit/tests/snapshot/select/019-select-tab-separated.toml diff --git a/tests/snapshot/select/020-select-no-empty-columns.stdin b/pica-toolkit/tests/snapshot/select/020-select-no-empty-columns.stdin similarity index 100% rename from tests/snapshot/select/020-select-no-empty-columns.stdin rename to pica-toolkit/tests/snapshot/select/020-select-no-empty-columns.stdin diff --git a/tests/snapshot/select/020-select-no-empty-columns.toml b/pica-toolkit/tests/snapshot/select/020-select-no-empty-columns.toml similarity index 100% rename from tests/snapshot/select/020-select-no-empty-columns.toml rename to pica-toolkit/tests/snapshot/select/020-select-no-empty-columns.toml diff --git a/tests/snapshot/select/021-select-ignore-case.stdin b/pica-toolkit/tests/snapshot/select/021-select-ignore-case.stdin similarity index 100% rename from tests/snapshot/select/021-select-ignore-case.stdin rename to pica-toolkit/tests/snapshot/select/021-select-ignore-case.stdin diff --git a/tests/snapshot/select/021-select-ignore-case.toml b/pica-toolkit/tests/snapshot/select/021-select-ignore-case.toml similarity index 100% rename from tests/snapshot/select/021-select-ignore-case.toml rename to pica-toolkit/tests/snapshot/select/021-select-ignore-case.toml diff --git a/tests/snapshot/select/022-select-unique-rows.stdin b/pica-toolkit/tests/snapshot/select/022-select-unique-rows.stdin similarity index 100% rename from tests/snapshot/select/022-select-unique-rows.stdin rename to pica-toolkit/tests/snapshot/select/022-select-unique-rows.stdin diff --git a/tests/snapshot/select/022-select-unique-rows.toml b/pica-toolkit/tests/snapshot/select/022-select-unique-rows.toml similarity index 100% rename from tests/snapshot/select/022-select-unique-rows.toml rename to pica-toolkit/tests/snapshot/select/022-select-unique-rows.toml diff --git a/tests/snapshot/select/023-select-multiple-files.in/algebra.dat b/pica-toolkit/tests/snapshot/select/023-select-multiple-files.in/algebra.dat similarity index 100% rename from tests/snapshot/select/023-select-multiple-files.in/algebra.dat rename to pica-toolkit/tests/snapshot/select/023-select-multiple-files.in/algebra.dat diff --git a/tests/snapshot/select/023-select-multiple-files.in/math.dat.gz b/pica-toolkit/tests/snapshot/select/023-select-multiple-files.in/math.dat.gz similarity index 100% rename from tests/snapshot/select/023-select-multiple-files.in/math.dat.gz rename to pica-toolkit/tests/snapshot/select/023-select-multiple-files.in/math.dat.gz diff --git a/tests/snapshot/select/023-select-multiple-files.toml b/pica-toolkit/tests/snapshot/select/023-select-multiple-files.toml similarity index 100% rename from tests/snapshot/select/023-select-multiple-files.toml rename to pica-toolkit/tests/snapshot/select/023-select-multiple-files.toml diff --git a/tests/snapshot/select/024-select-append-output.in/out.csv b/pica-toolkit/tests/snapshot/select/024-select-append-output.in/out.csv similarity index 100% rename from tests/snapshot/select/024-select-append-output.in/out.csv rename to pica-toolkit/tests/snapshot/select/024-select-append-output.in/out.csv diff --git a/tests/snapshot/select/024-select-append-output.out/out.csv b/pica-toolkit/tests/snapshot/select/024-select-append-output.out/out.csv similarity index 100% rename from tests/snapshot/select/024-select-append-output.out/out.csv rename to pica-toolkit/tests/snapshot/select/024-select-append-output.out/out.csv diff --git a/tests/snapshot/select/024-select-append-output.stdin b/pica-toolkit/tests/snapshot/select/024-select-append-output.stdin similarity index 100% rename from tests/snapshot/select/024-select-append-output.stdin rename to pica-toolkit/tests/snapshot/select/024-select-append-output.stdin diff --git a/tests/snapshot/select/024-select-append-output.toml b/pica-toolkit/tests/snapshot/select/024-select-append-output.toml similarity index 100% rename from tests/snapshot/select/024-select-append-output.toml rename to pica-toolkit/tests/snapshot/select/024-select-append-output.toml diff --git a/tests/snapshot/select/025-select-translit-nfd.stdin b/pica-toolkit/tests/snapshot/select/025-select-translit-nfd.stdin similarity index 100% rename from tests/snapshot/select/025-select-translit-nfd.stdin rename to pica-toolkit/tests/snapshot/select/025-select-translit-nfd.stdin diff --git a/tests/snapshot/select/025-select-translit-nfd.toml b/pica-toolkit/tests/snapshot/select/025-select-translit-nfd.toml similarity index 100% rename from tests/snapshot/select/025-select-translit-nfd.toml rename to pica-toolkit/tests/snapshot/select/025-select-translit-nfd.toml diff --git a/tests/snapshot/select/026-select-translit-nfkd.stdin b/pica-toolkit/tests/snapshot/select/026-select-translit-nfkd.stdin similarity index 100% rename from tests/snapshot/select/026-select-translit-nfkd.stdin rename to pica-toolkit/tests/snapshot/select/026-select-translit-nfkd.stdin diff --git a/tests/snapshot/select/026-select-translit-nfkd.toml b/pica-toolkit/tests/snapshot/select/026-select-translit-nfkd.toml similarity index 100% rename from tests/snapshot/select/026-select-translit-nfkd.toml rename to pica-toolkit/tests/snapshot/select/026-select-translit-nfkd.toml diff --git a/tests/snapshot/select/027-select-translit-nfc.stdin b/pica-toolkit/tests/snapshot/select/027-select-translit-nfc.stdin similarity index 100% rename from tests/snapshot/select/027-select-translit-nfc.stdin rename to pica-toolkit/tests/snapshot/select/027-select-translit-nfc.stdin diff --git a/tests/snapshot/select/027-select-translit-nfc.toml b/pica-toolkit/tests/snapshot/select/027-select-translit-nfc.toml similarity index 100% rename from tests/snapshot/select/027-select-translit-nfc.toml rename to pica-toolkit/tests/snapshot/select/027-select-translit-nfc.toml diff --git a/tests/snapshot/select/028-select-translit-nfkc.stdin b/pica-toolkit/tests/snapshot/select/028-select-translit-nfkc.stdin similarity index 100% rename from tests/snapshot/select/028-select-translit-nfkc.stdin rename to pica-toolkit/tests/snapshot/select/028-select-translit-nfkc.stdin diff --git a/tests/snapshot/select/028-select-translit-nfkc.toml b/pica-toolkit/tests/snapshot/select/028-select-translit-nfkc.toml similarity index 100% rename from tests/snapshot/select/028-select-translit-nfkc.toml rename to pica-toolkit/tests/snapshot/select/028-select-translit-nfkc.toml diff --git a/tests/snapshot/select/029-select-where-clause.in/dump.dat.gz b/pica-toolkit/tests/snapshot/select/029-select-where-clause.in/dump.dat.gz similarity index 100% rename from tests/snapshot/select/029-select-where-clause.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/select/029-select-where-clause.in/dump.dat.gz diff --git a/tests/snapshot/select/029-select-where-clause.toml b/pica-toolkit/tests/snapshot/select/029-select-where-clause.toml similarity index 100% rename from tests/snapshot/select/029-select-where-clause.toml rename to pica-toolkit/tests/snapshot/select/029-select-where-clause.toml diff --git a/tests/snapshot/select/030-select-skip-invalid-t.toml b/pica-toolkit/tests/snapshot/select/030-select-skip-invalid-t.toml similarity index 100% rename from tests/snapshot/select/030-select-skip-invalid-t.toml rename to pica-toolkit/tests/snapshot/select/030-select-skip-invalid-t.toml diff --git a/tests/snapshot/select/031-select-skip-invalid-f.toml b/pica-toolkit/tests/snapshot/select/031-select-skip-invalid-f.toml similarity index 100% rename from tests/snapshot/select/031-select-skip-invalid-f.toml rename to pica-toolkit/tests/snapshot/select/031-select-skip-invalid-f.toml diff --git a/tests/snapshot/select/032-select-skip-invalid-config1.in/Pica.toml b/pica-toolkit/tests/snapshot/select/032-select-skip-invalid-config1.in/Pica.toml similarity index 100% rename from tests/snapshot/select/032-select-skip-invalid-config1.in/Pica.toml rename to pica-toolkit/tests/snapshot/select/032-select-skip-invalid-config1.in/Pica.toml diff --git a/tests/snapshot/select/032-select-skip-invalid-config1.stdin b/pica-toolkit/tests/snapshot/select/032-select-skip-invalid-config1.stdin similarity index 100% rename from tests/snapshot/select/032-select-skip-invalid-config1.stdin rename to pica-toolkit/tests/snapshot/select/032-select-skip-invalid-config1.stdin diff --git a/tests/snapshot/select/032-select-skip-invalid-config1.toml b/pica-toolkit/tests/snapshot/select/032-select-skip-invalid-config1.toml similarity index 100% rename from tests/snapshot/select/032-select-skip-invalid-config1.toml rename to pica-toolkit/tests/snapshot/select/032-select-skip-invalid-config1.toml diff --git a/tests/snapshot/select/033-select-skip-invalid-config2.in/Pica.toml b/pica-toolkit/tests/snapshot/select/033-select-skip-invalid-config2.in/Pica.toml similarity index 100% rename from tests/snapshot/select/033-select-skip-invalid-config2.in/Pica.toml rename to pica-toolkit/tests/snapshot/select/033-select-skip-invalid-config2.in/Pica.toml diff --git a/tests/snapshot/select/033-select-skip-invalid-config2.stdin b/pica-toolkit/tests/snapshot/select/033-select-skip-invalid-config2.stdin similarity index 100% rename from tests/snapshot/select/033-select-skip-invalid-config2.stdin rename to pica-toolkit/tests/snapshot/select/033-select-skip-invalid-config2.stdin diff --git a/tests/snapshot/select/033-select-skip-invalid-config2.toml b/pica-toolkit/tests/snapshot/select/033-select-skip-invalid-config2.toml similarity index 100% rename from tests/snapshot/select/033-select-skip-invalid-config2.toml rename to pica-toolkit/tests/snapshot/select/033-select-skip-invalid-config2.toml diff --git a/tests/snapshot/select/034-select-skip-invalid-config3.in/Pica.toml b/pica-toolkit/tests/snapshot/select/034-select-skip-invalid-config3.in/Pica.toml similarity index 100% rename from tests/snapshot/select/034-select-skip-invalid-config3.in/Pica.toml rename to pica-toolkit/tests/snapshot/select/034-select-skip-invalid-config3.in/Pica.toml diff --git a/tests/snapshot/select/034-select-skip-invalid-config3.stdin b/pica-toolkit/tests/snapshot/select/034-select-skip-invalid-config3.stdin similarity index 100% rename from tests/snapshot/select/034-select-skip-invalid-config3.stdin rename to pica-toolkit/tests/snapshot/select/034-select-skip-invalid-config3.stdin diff --git a/tests/snapshot/select/034-select-skip-invalid-config3.toml b/pica-toolkit/tests/snapshot/select/034-select-skip-invalid-config3.toml similarity index 100% rename from tests/snapshot/select/034-select-skip-invalid-config3.toml rename to pica-toolkit/tests/snapshot/select/034-select-skip-invalid-config3.toml diff --git a/tests/snapshot/select/035-select-skip-invalid-config4.in/Pica.toml b/pica-toolkit/tests/snapshot/select/035-select-skip-invalid-config4.in/Pica.toml similarity index 100% rename from tests/snapshot/select/035-select-skip-invalid-config4.in/Pica.toml rename to pica-toolkit/tests/snapshot/select/035-select-skip-invalid-config4.in/Pica.toml diff --git a/tests/snapshot/select/035-select-skip-invalid-config4.stdin b/pica-toolkit/tests/snapshot/select/035-select-skip-invalid-config4.stdin similarity index 100% rename from tests/snapshot/select/035-select-skip-invalid-config4.stdin rename to pica-toolkit/tests/snapshot/select/035-select-skip-invalid-config4.stdin diff --git a/tests/snapshot/select/035-select-skip-invalid-config4.toml b/pica-toolkit/tests/snapshot/select/035-select-skip-invalid-config4.toml similarity index 100% rename from tests/snapshot/select/035-select-skip-invalid-config4.toml rename to pica-toolkit/tests/snapshot/select/035-select-skip-invalid-config4.toml diff --git a/tests/snapshot/select/036-select-invalid-query.stdin b/pica-toolkit/tests/snapshot/select/036-select-invalid-query.stdin similarity index 100% rename from tests/snapshot/select/036-select-invalid-query.stdin rename to pica-toolkit/tests/snapshot/select/036-select-invalid-query.stdin diff --git a/tests/snapshot/select/036-select-invalid-query.toml b/pica-toolkit/tests/snapshot/select/036-select-invalid-query.toml similarity index 100% rename from tests/snapshot/select/036-select-invalid-query.toml rename to pica-toolkit/tests/snapshot/select/036-select-invalid-query.toml diff --git a/tests/snapshot/select/037-select-and-connective.in/dump.dat.gz b/pica-toolkit/tests/snapshot/select/037-select-and-connective.in/dump.dat.gz similarity index 100% rename from tests/snapshot/select/037-select-and-connective.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/select/037-select-and-connective.in/dump.dat.gz diff --git a/tests/snapshot/select/037-select-and-connective.toml b/pica-toolkit/tests/snapshot/select/037-select-and-connective.toml similarity index 100% rename from tests/snapshot/select/037-select-and-connective.toml rename to pica-toolkit/tests/snapshot/select/037-select-and-connective.toml diff --git a/tests/snapshot/select/038-select-or-connective.in/dump.dat.gz b/pica-toolkit/tests/snapshot/select/038-select-or-connective.in/dump.dat.gz similarity index 100% rename from tests/snapshot/select/038-select-or-connective.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/select/038-select-or-connective.in/dump.dat.gz diff --git a/tests/snapshot/select/038-select-or-connective.toml b/pica-toolkit/tests/snapshot/select/038-select-or-connective.toml similarity index 100% rename from tests/snapshot/select/038-select-or-connective.toml rename to pica-toolkit/tests/snapshot/select/038-select-or-connective.toml diff --git a/tests/snapshot/select/039-select-not-connective.in/dump.dat.gz b/pica-toolkit/tests/snapshot/select/039-select-not-connective.in/dump.dat.gz similarity index 100% rename from tests/snapshot/select/039-select-not-connective.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/select/039-select-not-connective.in/dump.dat.gz diff --git a/tests/snapshot/select/039-select-not-connective.toml b/pica-toolkit/tests/snapshot/select/039-select-not-connective.toml similarity index 100% rename from tests/snapshot/select/039-select-not-connective.toml rename to pica-toolkit/tests/snapshot/select/039-select-not-connective.toml diff --git a/tests/snapshot/select/040-select-allow-list.in/allow.csv b/pica-toolkit/tests/snapshot/select/040-select-allow-list.in/allow.csv similarity index 100% rename from tests/snapshot/select/040-select-allow-list.in/allow.csv rename to pica-toolkit/tests/snapshot/select/040-select-allow-list.in/allow.csv diff --git a/tests/snapshot/select/040-select-allow-list.in/dump.dat.gz b/pica-toolkit/tests/snapshot/select/040-select-allow-list.in/dump.dat.gz similarity index 100% rename from tests/snapshot/select/040-select-allow-list.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/select/040-select-allow-list.in/dump.dat.gz diff --git a/tests/snapshot/select/040-select-allow-list.toml b/pica-toolkit/tests/snapshot/select/040-select-allow-list.toml similarity index 100% rename from tests/snapshot/select/040-select-allow-list.toml rename to pica-toolkit/tests/snapshot/select/040-select-allow-list.toml diff --git a/tests/snapshot/select/041-select-deny-list.in/deny.csv b/pica-toolkit/tests/snapshot/select/041-select-deny-list.in/deny.csv similarity index 100% rename from tests/snapshot/select/041-select-deny-list.in/deny.csv rename to pica-toolkit/tests/snapshot/select/041-select-deny-list.in/deny.csv diff --git a/tests/snapshot/select/041-select-deny-list.in/dump.dat.gz b/pica-toolkit/tests/snapshot/select/041-select-deny-list.in/dump.dat.gz similarity index 100% rename from tests/snapshot/select/041-select-deny-list.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/select/041-select-deny-list.in/dump.dat.gz diff --git a/tests/snapshot/select/041-select-deny-list.out/out.csv b/pica-toolkit/tests/snapshot/select/041-select-deny-list.out/out.csv similarity index 100% rename from tests/snapshot/select/041-select-deny-list.out/out.csv rename to pica-toolkit/tests/snapshot/select/041-select-deny-list.out/out.csv diff --git a/tests/snapshot/select/041-select-deny-list.toml b/pica-toolkit/tests/snapshot/select/041-select-deny-list.toml similarity index 100% rename from tests/snapshot/select/041-select-deny-list.toml rename to pica-toolkit/tests/snapshot/select/041-select-deny-list.toml diff --git a/tests/snapshot/select/042-select-squash.toml b/pica-toolkit/tests/snapshot/select/042-select-squash.toml similarity index 100% rename from tests/snapshot/select/042-select-squash.toml rename to pica-toolkit/tests/snapshot/select/042-select-squash.toml diff --git a/tests/snapshot/select/043-select-squash-sep.toml b/pica-toolkit/tests/snapshot/select/043-select-squash-sep.toml similarity index 100% rename from tests/snapshot/select/043-select-squash-sep.toml rename to pica-toolkit/tests/snapshot/select/043-select-squash-sep.toml diff --git a/tests/snapshot/select/044-select-squash-sep-empty-string.toml b/pica-toolkit/tests/snapshot/select/044-select-squash-sep-empty-string.toml similarity index 100% rename from tests/snapshot/select/044-select-squash-sep-empty-string.toml rename to pica-toolkit/tests/snapshot/select/044-select-squash-sep-empty-string.toml diff --git a/tests/snapshot/select/045-select-squash-sep-colon.toml b/pica-toolkit/tests/snapshot/select/045-select-squash-sep-colon.toml similarity index 100% rename from tests/snapshot/select/045-select-squash-sep-colon.toml rename to pica-toolkit/tests/snapshot/select/045-select-squash-sep-colon.toml diff --git a/tests/snapshot/select/046-select-squash-warning.toml b/pica-toolkit/tests/snapshot/select/046-select-squash-warning.toml similarity index 100% rename from tests/snapshot/select/046-select-squash-warning.toml rename to pica-toolkit/tests/snapshot/select/046-select-squash-warning.toml diff --git a/tests/snapshot/select/047-select-squash-merge.toml b/pica-toolkit/tests/snapshot/select/047-select-squash-merge.toml similarity index 100% rename from tests/snapshot/select/047-select-squash-merge.toml rename to pica-toolkit/tests/snapshot/select/047-select-squash-merge.toml diff --git a/tests/snapshot/select/586-select-translit-selector1.in/Pica.toml b/pica-toolkit/tests/snapshot/select/586-select-translit-selector1.in/Pica.toml similarity index 100% rename from tests/snapshot/select/586-select-translit-selector1.in/Pica.toml rename to pica-toolkit/tests/snapshot/select/586-select-translit-selector1.in/Pica.toml diff --git a/tests/snapshot/select/586-select-translit-selector1.in/out.csv b/pica-toolkit/tests/snapshot/select/586-select-translit-selector1.in/out.csv similarity index 100% rename from tests/snapshot/select/586-select-translit-selector1.in/out.csv rename to pica-toolkit/tests/snapshot/select/586-select-translit-selector1.in/out.csv diff --git a/tests/snapshot/select/586-select-translit-selector1.stdin b/pica-toolkit/tests/snapshot/select/586-select-translit-selector1.stdin similarity index 100% rename from tests/snapshot/select/586-select-translit-selector1.stdin rename to pica-toolkit/tests/snapshot/select/586-select-translit-selector1.stdin diff --git a/tests/snapshot/select/586-select-translit-selector1.toml b/pica-toolkit/tests/snapshot/select/586-select-translit-selector1.toml similarity index 100% rename from tests/snapshot/select/586-select-translit-selector1.toml rename to pica-toolkit/tests/snapshot/select/586-select-translit-selector1.toml diff --git a/tests/snapshot/select/586-select-translit-selector2.stdin b/pica-toolkit/tests/snapshot/select/586-select-translit-selector2.stdin similarity index 100% rename from tests/snapshot/select/586-select-translit-selector2.stdin rename to pica-toolkit/tests/snapshot/select/586-select-translit-selector2.stdin diff --git a/tests/snapshot/select/586-select-translit-selector2.toml b/pica-toolkit/tests/snapshot/select/586-select-translit-selector2.toml similarity index 100% rename from tests/snapshot/select/586-select-translit-selector2.toml rename to pica-toolkit/tests/snapshot/select/586-select-translit-selector2.toml diff --git a/tests/snapshot/select/605-false-positives-regex.toml b/pica-toolkit/tests/snapshot/select/605-false-positives-regex.toml similarity index 100% rename from tests/snapshot/select/605-false-positives-regex.toml rename to pica-toolkit/tests/snapshot/select/605-false-positives-regex.toml diff --git a/tests/snapshot/slice/000-slice-default.in/dump.dat.gz b/pica-toolkit/tests/snapshot/slice/000-slice-default.in/dump.dat.gz similarity index 100% rename from tests/snapshot/slice/000-slice-default.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/slice/000-slice-default.in/dump.dat.gz diff --git a/tests/snapshot/slice/000-slice-default.out/slice.dat b/pica-toolkit/tests/snapshot/slice/000-slice-default.out/slice.dat similarity index 100% rename from tests/snapshot/slice/000-slice-default.out/slice.dat rename to pica-toolkit/tests/snapshot/slice/000-slice-default.out/slice.dat diff --git a/tests/snapshot/slice/000-slice-default.toml b/pica-toolkit/tests/snapshot/slice/000-slice-default.toml similarity index 100% rename from tests/snapshot/slice/000-slice-default.toml rename to pica-toolkit/tests/snapshot/slice/000-slice-default.toml diff --git a/tests/snapshot/slice/001-slice-start.in/dump.dat.gz b/pica-toolkit/tests/snapshot/slice/001-slice-start.in/dump.dat.gz similarity index 100% rename from tests/snapshot/slice/001-slice-start.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/slice/001-slice-start.in/dump.dat.gz diff --git a/tests/snapshot/slice/001-slice-start.out/slice.dat b/pica-toolkit/tests/snapshot/slice/001-slice-start.out/slice.dat similarity index 100% rename from tests/snapshot/slice/001-slice-start.out/slice.dat rename to pica-toolkit/tests/snapshot/slice/001-slice-start.out/slice.dat diff --git a/tests/snapshot/slice/001-slice-start.toml b/pica-toolkit/tests/snapshot/slice/001-slice-start.toml similarity index 100% rename from tests/snapshot/slice/001-slice-start.toml rename to pica-toolkit/tests/snapshot/slice/001-slice-start.toml diff --git a/tests/snapshot/slice/002-slice-end.in/dump.dat.gz b/pica-toolkit/tests/snapshot/slice/002-slice-end.in/dump.dat.gz similarity index 100% rename from tests/snapshot/slice/002-slice-end.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/slice/002-slice-end.in/dump.dat.gz diff --git a/tests/snapshot/slice/002-slice-end.out/slice.dat b/pica-toolkit/tests/snapshot/slice/002-slice-end.out/slice.dat similarity index 100% rename from tests/snapshot/slice/002-slice-end.out/slice.dat rename to pica-toolkit/tests/snapshot/slice/002-slice-end.out/slice.dat diff --git a/tests/snapshot/slice/002-slice-end.toml b/pica-toolkit/tests/snapshot/slice/002-slice-end.toml similarity index 100% rename from tests/snapshot/slice/002-slice-end.toml rename to pica-toolkit/tests/snapshot/slice/002-slice-end.toml diff --git a/tests/snapshot/slice/003-slice-length.in/dump.dat.gz b/pica-toolkit/tests/snapshot/slice/003-slice-length.in/dump.dat.gz similarity index 100% rename from tests/snapshot/slice/003-slice-length.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/slice/003-slice-length.in/dump.dat.gz diff --git a/tests/snapshot/slice/003-slice-length.out/slice.dat b/pica-toolkit/tests/snapshot/slice/003-slice-length.out/slice.dat similarity index 100% rename from tests/snapshot/slice/003-slice-length.out/slice.dat rename to pica-toolkit/tests/snapshot/slice/003-slice-length.out/slice.dat diff --git a/tests/snapshot/slice/003-slice-length.toml b/pica-toolkit/tests/snapshot/slice/003-slice-length.toml similarity index 100% rename from tests/snapshot/slice/003-slice-length.toml rename to pica-toolkit/tests/snapshot/slice/003-slice-length.toml diff --git a/tests/snapshot/slice/004-slice-start-end.in/dump.dat.gz b/pica-toolkit/tests/snapshot/slice/004-slice-start-end.in/dump.dat.gz similarity index 100% rename from tests/snapshot/slice/004-slice-start-end.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/slice/004-slice-start-end.in/dump.dat.gz diff --git a/tests/snapshot/slice/004-slice-start-end.out/slice.dat b/pica-toolkit/tests/snapshot/slice/004-slice-start-end.out/slice.dat similarity index 100% rename from tests/snapshot/slice/004-slice-start-end.out/slice.dat rename to pica-toolkit/tests/snapshot/slice/004-slice-start-end.out/slice.dat diff --git a/tests/snapshot/slice/004-slice-start-end.toml b/pica-toolkit/tests/snapshot/slice/004-slice-start-end.toml similarity index 100% rename from tests/snapshot/slice/004-slice-start-end.toml rename to pica-toolkit/tests/snapshot/slice/004-slice-start-end.toml diff --git a/tests/snapshot/slice/005-slice-start-length.in/dump.dat.gz b/pica-toolkit/tests/snapshot/slice/005-slice-start-length.in/dump.dat.gz similarity index 100% rename from tests/snapshot/slice/005-slice-start-length.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/slice/005-slice-start-length.in/dump.dat.gz diff --git a/tests/snapshot/slice/005-slice-start-length.out/slice.dat b/pica-toolkit/tests/snapshot/slice/005-slice-start-length.out/slice.dat similarity index 100% rename from tests/snapshot/slice/005-slice-start-length.out/slice.dat rename to pica-toolkit/tests/snapshot/slice/005-slice-start-length.out/slice.dat diff --git a/tests/snapshot/slice/005-slice-start-length.toml b/pica-toolkit/tests/snapshot/slice/005-slice-start-length.toml similarity index 100% rename from tests/snapshot/slice/005-slice-start-length.toml rename to pica-toolkit/tests/snapshot/slice/005-slice-start-length.toml diff --git a/tests/snapshot/slice/006-slice-end-less-than-start.in/dump.dat.gz b/pica-toolkit/tests/snapshot/slice/006-slice-end-less-than-start.in/dump.dat.gz similarity index 100% rename from tests/snapshot/slice/006-slice-end-less-than-start.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/slice/006-slice-end-less-than-start.in/dump.dat.gz diff --git a/tests/snapshot/slice/006-slice-end-less-than-start.toml b/pica-toolkit/tests/snapshot/slice/006-slice-end-less-than-start.toml similarity index 100% rename from tests/snapshot/slice/006-slice-end-less-than-start.toml rename to pica-toolkit/tests/snapshot/slice/006-slice-end-less-than-start.toml diff --git a/tests/snapshot/slice/007-slice-skip-invalid-flag.stdin b/pica-toolkit/tests/snapshot/slice/007-slice-skip-invalid-flag.stdin similarity index 100% rename from tests/snapshot/slice/007-slice-skip-invalid-flag.stdin rename to pica-toolkit/tests/snapshot/slice/007-slice-skip-invalid-flag.stdin diff --git a/tests/snapshot/slice/007-slice-skip-invalid-flag.toml b/pica-toolkit/tests/snapshot/slice/007-slice-skip-invalid-flag.toml similarity index 100% rename from tests/snapshot/slice/007-slice-skip-invalid-flag.toml rename to pica-toolkit/tests/snapshot/slice/007-slice-skip-invalid-flag.toml diff --git a/tests/snapshot/slice/008-slice-skip-invalid-config1.in/Pica.toml b/pica-toolkit/tests/snapshot/slice/008-slice-skip-invalid-config1.in/Pica.toml similarity index 100% rename from tests/snapshot/slice/008-slice-skip-invalid-config1.in/Pica.toml rename to pica-toolkit/tests/snapshot/slice/008-slice-skip-invalid-config1.in/Pica.toml diff --git a/tests/snapshot/slice/008-slice-skip-invalid-config1.stdin b/pica-toolkit/tests/snapshot/slice/008-slice-skip-invalid-config1.stdin similarity index 100% rename from tests/snapshot/slice/008-slice-skip-invalid-config1.stdin rename to pica-toolkit/tests/snapshot/slice/008-slice-skip-invalid-config1.stdin diff --git a/tests/snapshot/slice/008-slice-skip-invalid-config1.toml b/pica-toolkit/tests/snapshot/slice/008-slice-skip-invalid-config1.toml similarity index 100% rename from tests/snapshot/slice/008-slice-skip-invalid-config1.toml rename to pica-toolkit/tests/snapshot/slice/008-slice-skip-invalid-config1.toml diff --git a/tests/snapshot/slice/009-slice-skip-invalid-config2.in/Pica.toml b/pica-toolkit/tests/snapshot/slice/009-slice-skip-invalid-config2.in/Pica.toml similarity index 100% rename from tests/snapshot/slice/009-slice-skip-invalid-config2.in/Pica.toml rename to pica-toolkit/tests/snapshot/slice/009-slice-skip-invalid-config2.in/Pica.toml diff --git a/tests/snapshot/slice/009-slice-skip-invalid-config2.stdin b/pica-toolkit/tests/snapshot/slice/009-slice-skip-invalid-config2.stdin similarity index 100% rename from tests/snapshot/slice/009-slice-skip-invalid-config2.stdin rename to pica-toolkit/tests/snapshot/slice/009-slice-skip-invalid-config2.stdin diff --git a/tests/snapshot/slice/009-slice-skip-invalid-config2.toml b/pica-toolkit/tests/snapshot/slice/009-slice-skip-invalid-config2.toml similarity index 100% rename from tests/snapshot/slice/009-slice-skip-invalid-config2.toml rename to pica-toolkit/tests/snapshot/slice/009-slice-skip-invalid-config2.toml diff --git a/tests/snapshot/slice/010-slice-skip-invalid-config3.in/Pica.toml b/pica-toolkit/tests/snapshot/slice/010-slice-skip-invalid-config3.in/Pica.toml similarity index 100% rename from tests/snapshot/slice/010-slice-skip-invalid-config3.in/Pica.toml rename to pica-toolkit/tests/snapshot/slice/010-slice-skip-invalid-config3.in/Pica.toml diff --git a/tests/snapshot/slice/010-slice-skip-invalid-config3.stdin b/pica-toolkit/tests/snapshot/slice/010-slice-skip-invalid-config3.stdin similarity index 100% rename from tests/snapshot/slice/010-slice-skip-invalid-config3.stdin rename to pica-toolkit/tests/snapshot/slice/010-slice-skip-invalid-config3.stdin diff --git a/tests/snapshot/slice/010-slice-skip-invalid-config3.toml b/pica-toolkit/tests/snapshot/slice/010-slice-skip-invalid-config3.toml similarity index 100% rename from tests/snapshot/slice/010-slice-skip-invalid-config3.toml rename to pica-toolkit/tests/snapshot/slice/010-slice-skip-invalid-config3.toml diff --git a/tests/snapshot/slice/011-slice-skip-invalid-config4.in/Pica.toml b/pica-toolkit/tests/snapshot/slice/011-slice-skip-invalid-config4.in/Pica.toml similarity index 100% rename from tests/snapshot/slice/011-slice-skip-invalid-config4.in/Pica.toml rename to pica-toolkit/tests/snapshot/slice/011-slice-skip-invalid-config4.in/Pica.toml diff --git a/tests/snapshot/slice/011-slice-skip-invalid-config4.stdin b/pica-toolkit/tests/snapshot/slice/011-slice-skip-invalid-config4.stdin similarity index 100% rename from tests/snapshot/slice/011-slice-skip-invalid-config4.stdin rename to pica-toolkit/tests/snapshot/slice/011-slice-skip-invalid-config4.stdin diff --git a/tests/snapshot/slice/011-slice-skip-invalid-config4.toml b/pica-toolkit/tests/snapshot/slice/011-slice-skip-invalid-config4.toml similarity index 100% rename from tests/snapshot/slice/011-slice-skip-invalid-config4.toml rename to pica-toolkit/tests/snapshot/slice/011-slice-skip-invalid-config4.toml diff --git a/tests/snapshot/slice/012-slice-gzip-output.in/dump.dat.gz b/pica-toolkit/tests/snapshot/slice/012-slice-gzip-output.in/dump.dat.gz similarity index 100% rename from tests/snapshot/slice/012-slice-gzip-output.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/slice/012-slice-gzip-output.in/dump.dat.gz diff --git a/tests/snapshot/slice/012-slice-gzip-output.out/slice.dat b/pica-toolkit/tests/snapshot/slice/012-slice-gzip-output.out/slice.dat similarity index 100% rename from tests/snapshot/slice/012-slice-gzip-output.out/slice.dat rename to pica-toolkit/tests/snapshot/slice/012-slice-gzip-output.out/slice.dat diff --git a/tests/snapshot/slice/012-slice-gzip-output.toml b/pica-toolkit/tests/snapshot/slice/012-slice-gzip-output.toml similarity index 100% rename from tests/snapshot/slice/012-slice-gzip-output.toml rename to pica-toolkit/tests/snapshot/slice/012-slice-gzip-output.toml diff --git a/tests/snapshot/slice/013-slice-append-output.in/dump.dat.gz b/pica-toolkit/tests/snapshot/slice/013-slice-append-output.in/dump.dat.gz similarity index 100% rename from tests/snapshot/slice/013-slice-append-output.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/slice/013-slice-append-output.in/dump.dat.gz diff --git a/tests/snapshot/slice/013-slice-append-output.in/slice.dat b/pica-toolkit/tests/snapshot/slice/013-slice-append-output.in/slice.dat similarity index 100% rename from tests/snapshot/slice/013-slice-append-output.in/slice.dat rename to pica-toolkit/tests/snapshot/slice/013-slice-append-output.in/slice.dat diff --git a/tests/snapshot/slice/013-slice-append-output.out/slice.dat b/pica-toolkit/tests/snapshot/slice/013-slice-append-output.out/slice.dat similarity index 100% rename from tests/snapshot/slice/013-slice-append-output.out/slice.dat rename to pica-toolkit/tests/snapshot/slice/013-slice-append-output.out/slice.dat diff --git a/tests/snapshot/slice/013-slice-append-output.toml b/pica-toolkit/tests/snapshot/slice/013-slice-append-output.toml similarity index 100% rename from tests/snapshot/slice/013-slice-append-output.toml rename to pica-toolkit/tests/snapshot/slice/013-slice-append-output.toml diff --git a/tests/snapshot/split/000-split-default.in/dump.dat.gz b/pica-toolkit/tests/snapshot/split/000-split-default.in/dump.dat.gz similarity index 100% rename from tests/snapshot/split/000-split-default.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/split/000-split-default.in/dump.dat.gz diff --git a/tests/snapshot/split/000-split-default.out/0.dat b/pica-toolkit/tests/snapshot/split/000-split-default.out/0.dat similarity index 100% rename from tests/snapshot/split/000-split-default.out/0.dat rename to pica-toolkit/tests/snapshot/split/000-split-default.out/0.dat diff --git a/tests/snapshot/split/000-split-default.toml b/pica-toolkit/tests/snapshot/split/000-split-default.toml similarity index 100% rename from tests/snapshot/split/000-split-default.toml rename to pica-toolkit/tests/snapshot/split/000-split-default.toml diff --git a/tests/snapshot/split/001-split-gzip-output.in/dump.dat.gz b/pica-toolkit/tests/snapshot/split/001-split-gzip-output.in/dump.dat.gz similarity index 100% rename from tests/snapshot/split/001-split-gzip-output.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/split/001-split-gzip-output.in/dump.dat.gz diff --git a/tests/snapshot/split/001-split-gzip-output.out/0.dat.gz b/pica-toolkit/tests/snapshot/split/001-split-gzip-output.out/0.dat.gz similarity index 100% rename from tests/snapshot/split/001-split-gzip-output.out/0.dat.gz rename to pica-toolkit/tests/snapshot/split/001-split-gzip-output.out/0.dat.gz diff --git a/tests/snapshot/split/001-split-gzip-output.out/1.dat.gz b/pica-toolkit/tests/snapshot/split/001-split-gzip-output.out/1.dat.gz similarity index 100% rename from tests/snapshot/split/001-split-gzip-output.out/1.dat.gz rename to pica-toolkit/tests/snapshot/split/001-split-gzip-output.out/1.dat.gz diff --git a/tests/snapshot/split/001-split-gzip-output.out/2.dat.gz b/pica-toolkit/tests/snapshot/split/001-split-gzip-output.out/2.dat.gz similarity index 100% rename from tests/snapshot/split/001-split-gzip-output.out/2.dat.gz rename to pica-toolkit/tests/snapshot/split/001-split-gzip-output.out/2.dat.gz diff --git a/tests/snapshot/split/001-split-gzip-output.toml b/pica-toolkit/tests/snapshot/split/001-split-gzip-output.toml similarity index 100% rename from tests/snapshot/split/001-split-gzip-output.toml rename to pica-toolkit/tests/snapshot/split/001-split-gzip-output.toml diff --git a/tests/snapshot/split/002-split-outdir.in/dump.dat.gz b/pica-toolkit/tests/snapshot/split/002-split-outdir.in/dump.dat.gz similarity index 100% rename from tests/snapshot/split/002-split-outdir.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/split/002-split-outdir.in/dump.dat.gz diff --git a/tests/snapshot/split/002-split-outdir.out/out/0.dat.gz b/pica-toolkit/tests/snapshot/split/002-split-outdir.out/out/0.dat.gz similarity index 100% rename from tests/snapshot/split/002-split-outdir.out/out/0.dat.gz rename to pica-toolkit/tests/snapshot/split/002-split-outdir.out/out/0.dat.gz diff --git a/tests/snapshot/split/002-split-outdir.out/out/1.dat.gz b/pica-toolkit/tests/snapshot/split/002-split-outdir.out/out/1.dat.gz similarity index 100% rename from tests/snapshot/split/002-split-outdir.out/out/1.dat.gz rename to pica-toolkit/tests/snapshot/split/002-split-outdir.out/out/1.dat.gz diff --git a/tests/snapshot/split/002-split-outdir.out/out/2.dat.gz b/pica-toolkit/tests/snapshot/split/002-split-outdir.out/out/2.dat.gz similarity index 100% rename from tests/snapshot/split/002-split-outdir.out/out/2.dat.gz rename to pica-toolkit/tests/snapshot/split/002-split-outdir.out/out/2.dat.gz diff --git a/tests/snapshot/split/002-split-outdir.toml b/pica-toolkit/tests/snapshot/split/002-split-outdir.toml similarity index 100% rename from tests/snapshot/split/002-split-outdir.toml rename to pica-toolkit/tests/snapshot/split/002-split-outdir.toml diff --git a/tests/snapshot/split/003-split-template.in/dump.dat.gz b/pica-toolkit/tests/snapshot/split/003-split-template.in/dump.dat.gz similarity index 100% rename from tests/snapshot/split/003-split-template.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/split/003-split-template.in/dump.dat.gz diff --git a/tests/snapshot/split/003-split-template.out/FOO_0.dat b/pica-toolkit/tests/snapshot/split/003-split-template.out/FOO_0.dat similarity index 100% rename from tests/snapshot/split/003-split-template.out/FOO_0.dat rename to pica-toolkit/tests/snapshot/split/003-split-template.out/FOO_0.dat diff --git a/tests/snapshot/split/003-split-template.out/FOO_1.dat b/pica-toolkit/tests/snapshot/split/003-split-template.out/FOO_1.dat similarity index 100% rename from tests/snapshot/split/003-split-template.out/FOO_1.dat rename to pica-toolkit/tests/snapshot/split/003-split-template.out/FOO_1.dat diff --git a/tests/snapshot/split/003-split-template.out/FOO_2.dat b/pica-toolkit/tests/snapshot/split/003-split-template.out/FOO_2.dat similarity index 100% rename from tests/snapshot/split/003-split-template.out/FOO_2.dat rename to pica-toolkit/tests/snapshot/split/003-split-template.out/FOO_2.dat diff --git a/tests/snapshot/split/003-split-template.toml b/pica-toolkit/tests/snapshot/split/003-split-template.toml similarity index 100% rename from tests/snapshot/split/003-split-template.toml rename to pica-toolkit/tests/snapshot/split/003-split-template.toml diff --git a/tests/snapshot/split/004-split-skip-invalid-flag.in/0.dat b/pica-toolkit/tests/snapshot/split/004-split-skip-invalid-flag.in/0.dat similarity index 100% rename from tests/snapshot/split/004-split-skip-invalid-flag.in/0.dat rename to pica-toolkit/tests/snapshot/split/004-split-skip-invalid-flag.in/0.dat diff --git a/tests/snapshot/split/004-split-skip-invalid-flag.in/FOO_0.dat b/pica-toolkit/tests/snapshot/split/004-split-skip-invalid-flag.in/FOO_0.dat similarity index 100% rename from tests/snapshot/split/004-split-skip-invalid-flag.in/FOO_0.dat rename to pica-toolkit/tests/snapshot/split/004-split-skip-invalid-flag.in/FOO_0.dat diff --git a/tests/snapshot/split/004-split-skip-invalid-flag.in/FOO_1.dat b/pica-toolkit/tests/snapshot/split/004-split-skip-invalid-flag.in/FOO_1.dat similarity index 100% rename from tests/snapshot/split/004-split-skip-invalid-flag.in/FOO_1.dat rename to pica-toolkit/tests/snapshot/split/004-split-skip-invalid-flag.in/FOO_1.dat diff --git a/tests/snapshot/split/004-split-skip-invalid-flag.in/FOO_2.dat b/pica-toolkit/tests/snapshot/split/004-split-skip-invalid-flag.in/FOO_2.dat similarity index 100% rename from tests/snapshot/split/004-split-skip-invalid-flag.in/FOO_2.dat rename to pica-toolkit/tests/snapshot/split/004-split-skip-invalid-flag.in/FOO_2.dat diff --git a/tests/snapshot/split/004-split-skip-invalid-flag.in/dump.dat.gz b/pica-toolkit/tests/snapshot/split/004-split-skip-invalid-flag.in/dump.dat.gz similarity index 100% rename from tests/snapshot/split/004-split-skip-invalid-flag.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/split/004-split-skip-invalid-flag.in/dump.dat.gz diff --git a/tests/snapshot/split/004-split-skip-invalid-flag.toml b/pica-toolkit/tests/snapshot/split/004-split-skip-invalid-flag.toml similarity index 100% rename from tests/snapshot/split/004-split-skip-invalid-flag.toml rename to pica-toolkit/tests/snapshot/split/004-split-skip-invalid-flag.toml diff --git a/tests/snapshot/split/005-split-skip-invalid-config1.in/Pica.toml b/pica-toolkit/tests/snapshot/split/005-split-skip-invalid-config1.in/Pica.toml similarity index 100% rename from tests/snapshot/split/005-split-skip-invalid-config1.in/Pica.toml rename to pica-toolkit/tests/snapshot/split/005-split-skip-invalid-config1.in/Pica.toml diff --git a/tests/snapshot/split/005-split-skip-invalid-config1.in/dump.dat.gz b/pica-toolkit/tests/snapshot/split/005-split-skip-invalid-config1.in/dump.dat.gz similarity index 100% rename from tests/snapshot/split/005-split-skip-invalid-config1.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/split/005-split-skip-invalid-config1.in/dump.dat.gz diff --git a/tests/snapshot/split/005-split-skip-invalid-config1.out/0.dat b/pica-toolkit/tests/snapshot/split/005-split-skip-invalid-config1.out/0.dat similarity index 100% rename from tests/snapshot/split/005-split-skip-invalid-config1.out/0.dat rename to pica-toolkit/tests/snapshot/split/005-split-skip-invalid-config1.out/0.dat diff --git a/tests/snapshot/split/005-split-skip-invalid-config1.toml b/pica-toolkit/tests/snapshot/split/005-split-skip-invalid-config1.toml similarity index 100% rename from tests/snapshot/split/005-split-skip-invalid-config1.toml rename to pica-toolkit/tests/snapshot/split/005-split-skip-invalid-config1.toml diff --git a/tests/snapshot/split/006-split-skip-invalid-config2.in/Pica.toml b/pica-toolkit/tests/snapshot/split/006-split-skip-invalid-config2.in/Pica.toml similarity index 100% rename from tests/snapshot/split/006-split-skip-invalid-config2.in/Pica.toml rename to pica-toolkit/tests/snapshot/split/006-split-skip-invalid-config2.in/Pica.toml diff --git a/tests/snapshot/split/006-split-skip-invalid-config2.in/dump.dat.gz b/pica-toolkit/tests/snapshot/split/006-split-skip-invalid-config2.in/dump.dat.gz similarity index 100% rename from tests/snapshot/split/006-split-skip-invalid-config2.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/split/006-split-skip-invalid-config2.in/dump.dat.gz diff --git a/tests/snapshot/split/006-split-skip-invalid-config2.out/0.dat b/pica-toolkit/tests/snapshot/split/006-split-skip-invalid-config2.out/0.dat similarity index 100% rename from tests/snapshot/split/006-split-skip-invalid-config2.out/0.dat rename to pica-toolkit/tests/snapshot/split/006-split-skip-invalid-config2.out/0.dat diff --git a/tests/snapshot/split/006-split-skip-invalid-config2.toml b/pica-toolkit/tests/snapshot/split/006-split-skip-invalid-config2.toml similarity index 100% rename from tests/snapshot/split/006-split-skip-invalid-config2.toml rename to pica-toolkit/tests/snapshot/split/006-split-skip-invalid-config2.toml diff --git a/tests/snapshot/split/007-split-skip-invalid-config3.in/Pica.toml b/pica-toolkit/tests/snapshot/split/007-split-skip-invalid-config3.in/Pica.toml similarity index 100% rename from tests/snapshot/split/007-split-skip-invalid-config3.in/Pica.toml rename to pica-toolkit/tests/snapshot/split/007-split-skip-invalid-config3.in/Pica.toml diff --git a/tests/snapshot/split/007-split-skip-invalid-config3.in/dump.dat.gz b/pica-toolkit/tests/snapshot/split/007-split-skip-invalid-config3.in/dump.dat.gz similarity index 100% rename from tests/snapshot/split/007-split-skip-invalid-config3.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/split/007-split-skip-invalid-config3.in/dump.dat.gz diff --git a/tests/snapshot/split/007-split-skip-invalid-config3.out/0.dat b/pica-toolkit/tests/snapshot/split/007-split-skip-invalid-config3.out/0.dat similarity index 100% rename from tests/snapshot/split/007-split-skip-invalid-config3.out/0.dat rename to pica-toolkit/tests/snapshot/split/007-split-skip-invalid-config3.out/0.dat diff --git a/tests/snapshot/split/007-split-skip-invalid-config3.toml b/pica-toolkit/tests/snapshot/split/007-split-skip-invalid-config3.toml similarity index 100% rename from tests/snapshot/split/007-split-skip-invalid-config3.toml rename to pica-toolkit/tests/snapshot/split/007-split-skip-invalid-config3.toml diff --git a/tests/snapshot/split/008-split-skip-invalid-config4.in/Pica.toml b/pica-toolkit/tests/snapshot/split/008-split-skip-invalid-config4.in/Pica.toml similarity index 100% rename from tests/snapshot/split/008-split-skip-invalid-config4.in/Pica.toml rename to pica-toolkit/tests/snapshot/split/008-split-skip-invalid-config4.in/Pica.toml diff --git a/tests/snapshot/split/008-split-skip-invalid-config4.in/dump.dat.gz b/pica-toolkit/tests/snapshot/split/008-split-skip-invalid-config4.in/dump.dat.gz similarity index 100% rename from tests/snapshot/split/008-split-skip-invalid-config4.in/dump.dat.gz rename to pica-toolkit/tests/snapshot/split/008-split-skip-invalid-config4.in/dump.dat.gz diff --git a/tests/snapshot/split/008-split-skip-invalid-config4.out/0.dat b/pica-toolkit/tests/snapshot/split/008-split-skip-invalid-config4.out/0.dat similarity index 100% rename from tests/snapshot/split/008-split-skip-invalid-config4.out/0.dat rename to pica-toolkit/tests/snapshot/split/008-split-skip-invalid-config4.out/0.dat diff --git a/tests/snapshot/split/008-split-skip-invalid-config4.toml b/pica-toolkit/tests/snapshot/split/008-split-skip-invalid-config4.toml similarity index 100% rename from tests/snapshot/split/008-split-skip-invalid-config4.toml rename to pica-toolkit/tests/snapshot/split/008-split-skip-invalid-config4.toml diff --git a/src/error.rs b/src/error.rs deleted file mode 100644 index 9dc509f61..000000000 --- a/src/error.rs +++ /dev/null @@ -1,71 +0,0 @@ -use std::fmt::{self, Display, Formatter}; -use std::{error, io}; - -use crate::parser::{ParsePathError, ParsePicaError}; - -/// A type alias for `Result`. -pub type Result = std::result::Result; - -/// An error that can occur when processing PICA+ data. -#[derive(Debug)] -pub enum Error { - InvalidTag(String), - InvalidOccurrence(String), - InvalidOccurrenceMatcher(String), - InvalidSubfield(String), - InvalidSubfieldMatcher(String), - InvalidSubfieldsMatcher(String), - InvalidField(String), - InvalidFieldMatcher(String), - InvalidRecord(ParsePicaError), - InvalidPath(ParsePathError), - InvalidMatcher(String), - Utf8Error(std::str::Utf8Error), - Io(io::Error), -} - -impl error::Error for Error {} - -impl Display for Error { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - match *self { - Self::InvalidTag(ref m) => f.write_str(m), - Self::InvalidOccurrence(ref m) => f.write_str(m), - Self::InvalidOccurrenceMatcher(ref m) => f.write_str(m), - Self::InvalidSubfield(ref m) => f.write_str(m), - Self::InvalidSubfieldMatcher(ref m) => f.write_str(m), - Self::InvalidSubfieldsMatcher(ref m) => f.write_str(m), - Self::InvalidField(ref m) => f.write_str(m), - Self::InvalidFieldMatcher(ref m) => f.write_str(m), - Self::InvalidMatcher(ref m) => f.write_str(m), - Error::InvalidRecord(ref e) => e.fmt(f), - Error::InvalidPath(ref e) => e.fmt(f), - Error::Utf8Error(ref e) => e.fmt(f), - Error::Io(ref e) => e.fmt(f), - } - } -} - -impl From for Error { - fn from(err: io::Error) -> Self { - Self::Io(err) - } -} - -impl From for Error { - fn from(err: ParsePicaError) -> Self { - Self::InvalidRecord(err) - } -} - -impl From for Error { - fn from(err: ParsePathError) -> Self { - Self::InvalidPath(err) - } -} - -impl From for Error { - fn from(err: std::str::Utf8Error) -> Self { - Self::Utf8Error(err) - } -} diff --git a/src/lib.rs b/src/lib.rs deleted file mode 100644 index 8b1378917..000000000 --- a/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/matcher/common.rs b/src/matcher/common.rs deleted file mode 100644 index e029c8cff..000000000 --- a/src/matcher/common.rs +++ /dev/null @@ -1,166 +0,0 @@ -use std::fmt; - -use nom::branch::alt; -use nom::bytes::complete::tag; -use nom::combinator::value; - -use crate::common::ParseResult; - -/// Boolean Operators. -#[derive(Debug, Clone, PartialEq, Eq)] -pub enum BooleanOp { - And, // and, "&&" - Or, // or, "||" -} - -impl fmt::Display for BooleanOp { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match *self { - Self::And => write!(f, "&&"), - Self::Or => write!(f, "||"), - } - } -} - -/// Comparison Operators -#[derive(Debug, Clone, PartialEq, Eq)] -pub enum ComparisonOp { - Eq, // equal, "==" - Ne, // not equal, "!=" - Gt, // greater than, ">" - Ge, // greater than or equal, ">=" - Lt, // less than, "<" - Le, // less than or equal, "<=" - StartsWith, // starts with, "=^" - EndsWith, // ends with, "=$" - Similar, // similar, "=*" -} - -impl fmt::Display for ComparisonOp { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match *self { - Self::Eq => write!(f, "=="), - Self::Ne => write!(f, "!="), - Self::Gt => write!(f, ">"), - Self::Ge => write!(f, ">="), - Self::Lt => write!(f, "<"), - Self::Le => write!(f, "<="), - Self::StartsWith => write!(f, "=^"), - Self::EndsWith => write!(f, "=$"), - Self::Similar => write!(f, "=*"), - } - } -} - -/// Parses comparison operator for byte strings. -pub(crate) fn parse_comparison_op_bstring( - i: &[u8], -) -> ParseResult { - alt(( - value(ComparisonOp::Eq, tag("==")), - value(ComparisonOp::Ne, tag("!=")), - value(ComparisonOp::StartsWith, tag("=^")), - value(ComparisonOp::EndsWith, tag("=$")), - value(ComparisonOp::Similar, tag("=*")), - ))(i) -} - -/// Parses comparison operator for usize. -pub(crate) fn parse_comparison_op_usize( - i: &[u8], -) -> ParseResult { - alt(( - value(ComparisonOp::Eq, tag("==")), - value(ComparisonOp::Ne, tag("!=")), - value(ComparisonOp::Ge, tag(">=")), - value(ComparisonOp::Gt, tag(">")), - value(ComparisonOp::Le, tag("<=")), - value(ComparisonOp::Lt, tag("<")), - ))(i) -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::test::TestResult; - - #[test] - fn test_parse_comparison_op() -> TestResult { - // bstring - assert_eq!( - parse_comparison_op_bstring(b"==")?.1, - ComparisonOp::Eq - ); - assert_eq!( - parse_comparison_op_bstring(b"!=")?.1, - ComparisonOp::Ne - ); - assert_eq!( - parse_comparison_op_bstring(b"=^")?.1, - ComparisonOp::StartsWith - ); - assert_eq!( - parse_comparison_op_bstring(b"=$")?.1, - ComparisonOp::EndsWith - ); - - assert!(parse_comparison_op_bstring(b">=").is_err()); - assert!(parse_comparison_op_bstring(b">").is_err()); - assert!(parse_comparison_op_bstring(b"<=").is_err()); - assert!(parse_comparison_op_bstring(b"<").is_err()); - - // usize - assert_eq!( - parse_comparison_op_usize(b"==")?.1, - ComparisonOp::Eq - ); - assert_eq!( - parse_comparison_op_usize(b"!=")?.1, - ComparisonOp::Ne - ); - assert_eq!( - parse_comparison_op_usize(b">=")?.1, - ComparisonOp::Ge - ); - assert_eq!( - parse_comparison_op_usize(b">")?.1, - ComparisonOp::Gt - ); - assert_eq!( - parse_comparison_op_usize(b"<=")?.1, - ComparisonOp::Le - ); - assert_eq!( - parse_comparison_op_usize(b"<")?.1, - ComparisonOp::Lt - ); - - assert!(parse_comparison_op_usize(b"=^").is_err()); - assert!(parse_comparison_op_usize(b"=$").is_err()); - assert!(parse_comparison_op_usize(b"=~").is_err()); - assert!(parse_comparison_op_usize(b"=*").is_err()); - - Ok(()) - } - - #[test] - fn test_boolean_op_to_string() -> TestResult { - assert_eq!(BooleanOp::And.to_string(), "&&"); - assert_eq!(BooleanOp::Or.to_string(), "||"); - Ok(()) - } - - #[test] - fn test_comparison_op_to_string() -> TestResult { - assert_eq!(ComparisonOp::Eq.to_string(), "=="); - assert_eq!(ComparisonOp::Ne.to_string(), "!="); - assert_eq!(ComparisonOp::Gt.to_string(), ">"); - assert_eq!(ComparisonOp::Ge.to_string(), ">="); - assert_eq!(ComparisonOp::Lt.to_string(), "<"); - assert_eq!(ComparisonOp::Le.to_string(), "<="); - assert_eq!(ComparisonOp::StartsWith.to_string(), "=^"); - assert_eq!(ComparisonOp::EndsWith.to_string(), "=$"); - assert_eq!(ComparisonOp::Similar.to_string(), "=*"); - Ok(()) - } -} diff --git a/src/matcher/field_matcher.rs b/src/matcher/field_matcher.rs deleted file mode 100644 index 1f2adeb87..000000000 --- a/src/matcher/field_matcher.rs +++ /dev/null @@ -1,257 +0,0 @@ -use std::fmt; - -use nom::branch::alt; -use nom::character::complete::char; -use nom::combinator::{all_consuming, cut, map, opt}; -use nom::sequence::{pair, preceded, terminated, tuple}; -use nom::Finish; - -use crate::common::{ws, ParseResult}; -use crate::matcher::{ - parse_occurrence_matcher, parse_subfield_list_matcher, - parse_subfield_list_matcher_singleton, parse_tag_matcher, - MatcherFlags, OccurrenceMatcher, SubfieldListMatcher, TagMatcher, -}; -use crate::{Error, Field}; - -#[derive(Debug, PartialEq)] -pub enum FieldMatcher { - Subield(TagMatcher, OccurrenceMatcher, SubfieldListMatcher), - Exists(TagMatcher, OccurrenceMatcher), -} - -impl fmt::Display for FieldMatcher { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::Subield(t, o, SubfieldListMatcher::Singleton(s)) => { - write!(f, "{t}{o}.{s}") - } - Self::Subield(t, o, s) => write!(f, "{t}{o}{{{s}}}"), - Self::Exists(t, o) => write!(f, "{t}{o}?"), - } - } -} - -impl FieldMatcher { - /// Creates a field matcher from a string slice. - /// - /// If an invalid field matcher is given, an error is returned. - /// - /// # Example - /// - /// ```rust - /// use pica::matcher::FieldMatcher; - /// - /// # fn main() { example().unwrap(); } - /// fn example() -> Result<(), Box> { - /// assert!(FieldMatcher::new("012A/*{0? && 0 == 'abc'}").is_ok()); - /// assert!(FieldMatcher::new("012A/!{0 == 'abc'}").is_err()); - /// Ok(()) - /// } - /// ``` - pub fn new>(data: S) -> Result { - let data = data.as_ref(); - - match all_consuming(parse_field_matcher)(data.as_bytes()) - .finish() - { - Ok((_, matcher)) => Ok(matcher), - Err(_) => Err(Error::InvalidMatcher(format!( - "Expected valid field matcher, got '{data}'" - ))), - } - } - - /// Returns true, if and only if the given field matches against - /// the field matcher. - /// - /// # Example - /// - /// ```rust - /// use std::str::FromStr; - /// - /// use pica::matcher::{FieldMatcher, MatcherFlags}; - /// use pica::Field; - /// - /// # fn main() { example().unwrap(); } - /// fn example() -> Result<(), Box> { - /// let matcher = FieldMatcher::new("012A/*{0? && 0 == 'abc'}")?; - /// let field = Field::from_str("012A/01 \x1f0abc\x1e")?; - /// assert!(matcher.is_match(&field, &MatcherFlags::default())); - /// Ok(()) - /// } - /// ``` - pub fn is_match( - &self, - field: &Field, - flags: &MatcherFlags, - ) -> bool { - match self { - Self::Subield(tag, occurrence, subfield) => { - tag.is_match(field.tag()) - && occurrence.is_match(field.occurrence()) - && subfield.is_match(field.subfields(), flags) - } - Self::Exists(tag, occurrence) => { - tag.is_match(field.tag()) - && occurrence.is_match(field.occurrence()) - } - } - } -} - -fn parse_field_matcher_subfield(i: &[u8]) -> ParseResult { - map( - tuple(( - parse_tag_matcher, - parse_occurrence_matcher, - alt(( - map( - pair( - opt(alt((char('.'), ws(char('$'))))), - parse_subfield_list_matcher_singleton, - ), - |(_prefix, matcher)| matcher, - ), - preceded( - ws(char('{')), - cut(terminated( - parse_subfield_list_matcher, - ws(char('}')), - )), - ), - )), - )), - |(tag, occurrence, subfields)| { - FieldMatcher::Subield(tag, occurrence, subfields) - }, - )(i) -} - -pub(crate) fn parse_field_matcher_exists( - i: &[u8], -) -> ParseResult { - map( - terminated( - pair(ws(parse_tag_matcher), parse_occurrence_matcher), - ws(char('?')), - ), - |(t, o)| FieldMatcher::Exists(t, o), - )(i) -} - -pub(crate) fn parse_field_matcher( - i: &[u8], -) -> ParseResult { - alt((parse_field_matcher_subfield, parse_field_matcher_exists))(i) -} - -#[cfg(test)] -mod tests { - use std::str::FromStr; - - use super::*; - use crate::test::TestResult; - - #[test] - fn test_field_matcher_invalid() -> TestResult { - assert!(FieldMatcher::new("012AĀ§?").is_err()); - Ok(()) - } - - #[test] - fn test_field_matcher_exists() -> TestResult { - let matcher = FieldMatcher::new("012A?")?; - let field = Field::from_str("012A \x1f0abc\x1e")?; - assert!(matcher.is_match(&field, &MatcherFlags::default())); - - let matcher = FieldMatcher::new("013A?")?; - let field = Field::from_str("012A \x1f0abc\x1e")?; - assert!(!matcher.is_match(&field, &MatcherFlags::default())); - - let matcher = FieldMatcher::new("012A/00?")?; - let field = Field::from_str("012A \x1f0abc\x1e")?; - assert!(matcher.is_match(&field, &MatcherFlags::default())); - - let matcher = FieldMatcher::new("012A/01?")?; - let field = Field::from_str("012A/01 \x1f0abc\x1e")?; - assert!(matcher.is_match(&field, &MatcherFlags::default())); - - let matcher = FieldMatcher::new("012A/01?")?; - let field = Field::from_str("012A/02 \x1f0abc\x1e")?; - assert!(!matcher.is_match(&field, &MatcherFlags::default())); - - Ok(()) - } - - #[test] - fn test_field_matcher_subfield_dot() -> TestResult { - let matcher = FieldMatcher::new("012A.0 == 'abc'")?; - let field = Field::from_str("012A \x1f0abc\x1e")?; - assert!(matcher.is_match(&field, &MatcherFlags::default())); - - let matcher = FieldMatcher::new("012A{0 == 'abc'}")?; - let field = Field::from_str("012A \x1f0abc\x1e")?; - assert!(matcher.is_match(&field, &MatcherFlags::default())); - - let matcher = FieldMatcher::new("012A/01{0 == 'abc'}")?; - let field = Field::from_str("012A/01 \x1f0abc\x1e")?; - assert!(matcher.is_match(&field, &MatcherFlags::default())); - - let matcher = FieldMatcher::new("012A{0 == 'abc' && 9?}")?; - let field = Field::from_str("012A \x1f0abc\x1f9123\x1e")?; - assert!(matcher.is_match(&field, &MatcherFlags::default())); - - assert!(FieldMatcher::new("012A .0 == 'abc'").is_err()); - - Ok(()) - } - - #[test] - fn test_field_matcher_subfield_dollar() -> TestResult { - let matcher = FieldMatcher::new("012A$0 == 'abc'")?; - let field = Field::from_str("012A \x1f0abc\x1e")?; - assert!(matcher.is_match(&field, &MatcherFlags::default())); - - let matcher = FieldMatcher::new("012A $0 != 'def'")?; - let field = Field::from_str("012A \x1f0abc\x1e")?; - assert!(matcher.is_match(&field, &MatcherFlags::default())); - - Ok(()) - } - - #[test] - fn test_field_matcher_subfield_lazy() -> TestResult { - let matcher = FieldMatcher::new("012A0 == 'abc'")?; - let field = Field::from_str("012A \x1f0abc\x1e")?; - assert!(matcher.is_match(&field, &MatcherFlags::default())); - - let matcher = FieldMatcher::new("012Aa0 == 'abc'")?; - let field = Field::from_str("012A \x1f0abc\x1e")?; - assert!(matcher.is_match(&field, &MatcherFlags::default())); - - Ok(()) - } - - #[test] - fn test_field_matcher_to_string() -> TestResult { - let values = vec![ - ("012A.a == 'abc'", "012A.a == 'abc'"), - ("012A/*{a == 'abc'}", "012A/*.a == 'abc'"), - ( - "012A/01-03{ a == 'abc' && b == 'def' }", - "012A/01-03{a == 'abc' && b == 'def'}", - ), - ("012A?", "012A?"), - ]; - - for (matcher, expected) in values { - assert_eq!( - FieldMatcher::new(matcher)?.to_string(), - expected - ); - } - - Ok(()) - } -} diff --git a/src/matcher/flags.rs b/src/matcher/flags.rs deleted file mode 100644 index 82f115b6c..000000000 --- a/src/matcher/flags.rs +++ /dev/null @@ -1,32 +0,0 @@ -#[derive(Debug)] -pub struct MatcherFlags { - pub ignore_case: bool, - pub strsim_threshold: f64, -} - -impl Default for MatcherFlags { - fn default() -> Self { - Self { - ignore_case: false, - strsim_threshold: 0.8, - } - } -} - -impl MatcherFlags { - pub fn new() -> Self { - MatcherFlags::default() - } - - #[must_use] - pub fn ignore_case(mut self, yes: bool) -> Self { - self.ignore_case = yes; - self - } - - #[must_use] - pub fn strsim_threshold(mut self, threshold: f64) -> Self { - self.strsim_threshold = threshold; - self - } -} diff --git a/src/matcher/mod.rs b/src/matcher/mod.rs deleted file mode 100644 index d28adce15..000000000 --- a/src/matcher/mod.rs +++ /dev/null @@ -1,29 +0,0 @@ -mod common; -mod field_matcher; -mod flags; -mod occurrence_matcher; -mod record_matcher; -mod subfield_list_matcher; -mod subfield_matcher; -mod tag_matcher; - -pub(crate) use common::{ - parse_comparison_op_bstring, parse_comparison_op_usize, -}; -pub use common::{BooleanOp, ComparisonOp}; -pub use field_matcher::FieldMatcher; -pub(crate) use field_matcher::{ - parse_field_matcher, parse_field_matcher_exists, -}; -pub use flags::MatcherFlags; -pub(crate) use occurrence_matcher::parse_occurrence_matcher; -pub use occurrence_matcher::OccurrenceMatcher; -pub use record_matcher::RecordMatcher; -pub use subfield_list_matcher::SubfieldListMatcher; -pub(crate) use subfield_list_matcher::{ - parse_subfield_list_matcher, parse_subfield_list_matcher_singleton, -}; -pub(crate) use subfield_matcher::parse_subfield_matcher; -pub use subfield_matcher::SubfieldMatcher; -pub(crate) use tag_matcher::parse_tag_matcher; -pub use tag_matcher::TagMatcher; diff --git a/src/matcher/occurrence_matcher.rs b/src/matcher/occurrence_matcher.rs deleted file mode 100644 index 57e9d423b..000000000 --- a/src/matcher/occurrence_matcher.rs +++ /dev/null @@ -1,220 +0,0 @@ -use std::fmt; - -use nom::branch::alt; -use nom::bytes::complete::tag; -use nom::character::complete::char; -use nom::combinator::{ - all_consuming, cut, map, success, value, verify, -}; -use nom::sequence::{preceded, separated_pair}; -use nom::Finish; - -use crate::common::ParseResult; -use crate::occurrence::{parse_occurrence_digits, Occurrence}; -use crate::Error; - -#[derive(Debug, PartialEq, Eq, Clone)] -pub enum OccurrenceMatcher { - Some(Occurrence), - Range(Occurrence, Occurrence), - Any, - None, -} - -impl fmt::Display for OccurrenceMatcher { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::Some(o) => write!(f, "/{o}"), - Self::Range(from, to) => write!(f, "/{from}-{to}"), - Self::Any => write!(f, "/*"), - Self::None => write!(f, ""), - } - } -} - -impl OccurrenceMatcher { - /// Creates a occurrence matcher from a string slice. - /// - /// If an invalid occurrence matcher is given, an error is returned. - /// - /// # Example - /// - /// ```rust - /// use pica::matcher::OccurrenceMatcher; - /// - /// # fn main() { example().unwrap(); } - /// fn example() -> Result<(), Box> { - /// assert!(OccurrenceMatcher::new("/01").is_ok()); - /// assert!(OccurrenceMatcher::new("/01-09").is_ok()); - /// assert!(OccurrenceMatcher::new("/*").is_ok()); - /// assert!(OccurrenceMatcher::new("").is_ok()); - /// Ok(()) - /// } - /// ``` - pub fn new>(data: S) -> Result { - let data = data.as_ref(); - - match all_consuming(parse_occurrence_matcher)(data.as_bytes()) - .finish() - { - Ok((_, matcher)) => Ok(matcher), - Err(_) => Err(Error::InvalidMatcher(format!( - "Expected valid occurrence matcher, got '{data}'" - ))), - } - } - - /// Returns true, if and only if the given value matches against - /// the occurrence matcher. - /// - /// # Example - /// - /// ```rust - /// use pica::matcher::OccurrenceMatcher; - /// use pica::Occurrence; - /// - /// # fn main() { example().unwrap(); } - /// fn example() -> Result<(), Box> { - /// let matcher = OccurrenceMatcher::new("/01-09")?; - /// assert!(matcher.is_match(Some(&Occurrence::new("03")?))); - /// Ok(()) - /// } - /// ``` - pub fn is_match(&self, occurrence: Option<&Occurrence>) -> bool { - match occurrence { - Some(occurrence) => match self { - OccurrenceMatcher::Any => true, - OccurrenceMatcher::None => occurrence == "00", - OccurrenceMatcher::Some(rhs) => occurrence == rhs, - OccurrenceMatcher::Range(min, max) => { - (occurrence >= min) && (occurrence <= max) - } - }, - None => { - matches!( - self, - OccurrenceMatcher::Any | OccurrenceMatcher::None - ) - } - } - } -} - -impl From for OccurrenceMatcher { - fn from(occurrence: Occurrence) -> Self { - Self::Some(occurrence) - } -} - -pub(crate) fn parse_occurrence_matcher( - i: &[u8], -) -> ParseResult { - alt(( - preceded( - char('/'), - cut(alt(( - map( - verify( - separated_pair( - parse_occurrence_digits, - char('-'), - parse_occurrence_digits, - ), - |(min, max)| { - min.len() == max.len() && min < max - }, - ), - |(min, max)| { - OccurrenceMatcher::Range( - Occurrence::from_unchecked(min), - Occurrence::from_unchecked(max), - ) - }, - ), - map( - verify(parse_occurrence_digits, |x: &[u8]| { - x != b"00" - }), - |x| { - OccurrenceMatcher::Some( - Occurrence::from_unchecked(x), - ) - }, - ), - value(OccurrenceMatcher::None, tag("00")), - value(OccurrenceMatcher::Any, char('*')), - ))), - ), - success(OccurrenceMatcher::None), - ))(i) -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::test::TestResult; - - #[test] - fn test_occurrence_matcher() -> TestResult { - // Some - let matcher = OccurrenceMatcher::new("/03")?; - assert!(!matcher.is_match(Some(&Occurrence::new("00")?))); - assert!(!matcher.is_match(Some(&Occurrence::new("02")?))); - assert!(matcher.is_match(Some(&Occurrence::new("03")?))); - assert!(!matcher.is_match(Some(&Occurrence::new("04")?))); - - // Range - let matcher = OccurrenceMatcher::new("/03-05")?; - assert!(!matcher.is_match(Some(&Occurrence::new("00")?))); - assert!(!matcher.is_match(Some(&Occurrence::new("02")?))); - assert!(matcher.is_match(Some(&Occurrence::new("03")?))); - assert!(matcher.is_match(Some(&Occurrence::new("04")?))); - assert!(matcher.is_match(Some(&Occurrence::new("05")?))); - assert!(!matcher.is_match(Some(&Occurrence::new("06")?))); - - // Any - let matcher = OccurrenceMatcher::new("/*")?; - assert!(matcher.is_match(Some(&Occurrence::new("00")?))); - assert!(matcher.is_match(Some(&Occurrence::new("01")?))); - assert!(matcher.is_match(None)); - - // None - let matcher = OccurrenceMatcher::None; - assert!(matcher.is_match(Some(&Occurrence::new("00")?))); - assert!(!matcher.is_match(Some(&Occurrence::new("01")?))); - assert!(matcher.is_match(None)); - - // Error - assert!(OccurrenceMatcher::new("/0A").is_err()); - assert!(OccurrenceMatcher::new("/05-03").is_err()); - assert!(OccurrenceMatcher::new("/05-05").is_err()); - assert!(OccurrenceMatcher::new("/05-0A").is_err()); - assert!(OccurrenceMatcher::new("/A").is_err()); - - Ok(()) - } - - #[test] - fn test_occurrence_matcher_to_string() -> TestResult { - assert_eq!(OccurrenceMatcher::new("/01")?.to_string(), "/01"); - assert_eq!( - OccurrenceMatcher::new("/01-04")?.to_string(), - "/01-04" - ); - assert_eq!(OccurrenceMatcher::new("/*")?.to_string(), "/*"); - assert_eq!(OccurrenceMatcher::new("")?.to_string(), ""); - - Ok(()) - } - - #[quickcheck] - fn occurrence_matcher_quickcheck1(occurrence: Occurrence) -> bool { - OccurrenceMatcher::from(occurrence.clone()) - .is_match(Some(&occurrence)) - } - - #[quickcheck] - fn occurrence_matcher_quickcheck2(occurrence: Occurrence) -> bool { - OccurrenceMatcher::Any.is_match(Some(&occurrence)) - } -} diff --git a/src/matcher/record_matcher.rs b/src/matcher/record_matcher.rs deleted file mode 100644 index 858a94020..000000000 --- a/src/matcher/record_matcher.rs +++ /dev/null @@ -1,507 +0,0 @@ -use std::fmt; -use std::ops::{BitAnd, BitOr, Not}; - -use nom::branch::alt; -use nom::bytes::complete::tag; -use nom::character::complete::{char, digit1}; -use nom::combinator::{all_consuming, cut, map, map_res, opt}; -use nom::multi::many1; -use nom::sequence::{preceded, terminated, tuple}; -use nom::Finish; - -use super::subfield_matcher::parse_subfield_matcher_exists; -use crate::common::{ws, ParseResult}; -use crate::matcher::*; -use crate::{ByteRecord, Error}; - -#[derive(Debug, PartialEq)] -pub enum RecordMatcher { - Singleton(Box), - Group(Box), - Not(Box), - Composite(Box, BooleanOp, Box), - Cardinality( - TagMatcher, - OccurrenceMatcher, - Option>, - ComparisonOp, - usize, - ), - True, -} - -impl fmt::Display for RecordMatcher { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::Singleton(expr) => expr.fmt(f), - Self::Group(expr) => write!(f, "({expr})"), - Self::Not(expr) => write!(f, "!{expr}"), - Self::Composite(lhs, op, rhs) => { - write!(f, "{lhs} {op} {rhs}") - } - Self::Cardinality(tm, om, sm, op, value) => { - if let Some(sm) = sm { - write!(f, "#{tm}{om}{{{sm}}} {op} {value}") - } else { - write!(f, "#{tm}{om} {op} {value}") - } - } - Self::True => write!(f, "True"), - } - } -} - -impl RecordMatcher { - /// Creates a record matcher from a string slice. - /// - /// If an invalid record matcher is given, an error is returned. - /// - /// # Example - /// - /// ```rust - /// use pica::matcher::RecordMatcher; - /// - /// # fn main() { example().unwrap(); } - /// fn example() -> Result<(), Box> { - /// assert!(RecordMatcher::new( - /// "013A? && 012A/*{0? && 0 == 'abc'}" - /// ) - /// .is_ok()); - /// assert!(RecordMatcher::new("013!?").is_err()); - /// Ok(()) - /// } - /// ``` - pub fn new>(data: S) -> Result { - let data = data.as_ref(); - - match all_consuming(parse_record_matcher)(data.as_bytes()) - .finish() - { - Ok((_, matcher)) => Ok(matcher), - Err(_) => Err(Error::InvalidMatcher(format!( - "Expected valid record matcher, got '{data}'" - ))), - } - } - - /// Returns true, if and only if the given record matches against - /// the record matcher. - /// - /// # Example - /// - /// ```rust - /// use std::str::FromStr; - /// - /// use pica::matcher::{MatcherFlags, RecordMatcher}; - /// use pica::ByteRecord; - /// - /// # fn main() { example().unwrap(); } - /// fn example() -> Result<(), Box> { - /// let matcher = RecordMatcher::new("012A/*{0? && 0 == 'abc'}")?; - /// let record = ByteRecord::from_bytes("012A/01 \x1f0abc\x1e")?; - /// assert!(matcher.is_match(&record, &MatcherFlags::default())); - /// Ok(()) - /// } - /// ``` - pub fn is_match( - &self, - record: &ByteRecord, - flags: &MatcherFlags, - ) -> bool { - match self { - Self::Singleton(matcher) => record - .iter() - .any(|field| matcher.is_match(field, flags)), - Self::Group(matcher) => matcher.is_match(record, flags), - Self::Not(matcher) => !matcher.is_match(record, flags), - Self::Composite(lhs, BooleanOp::And, rhs) => { - lhs.is_match(record, flags) - && rhs.is_match(record, flags) - } - Self::Composite(lhs, BooleanOp::Or, rhs) => { - lhs.is_match(record, flags) - || rhs.is_match(record, flags) - } - Self::Cardinality( - tag, - occurrence, - subfields, - op, - value, - ) => { - let fields = record - .iter() - .filter(|field| { - tag.is_match(field.tag()) - && occurrence.is_match(field.occurrence()) - }) - .filter(|field| { - if let Some(matcher) = subfields { - matcher.is_match(field.subfields(), flags) - } else { - true - } - }); - - let cardinality = fields.count(); - - match op { - ComparisonOp::Eq => cardinality == *value, - ComparisonOp::Ne => cardinality != *value, - ComparisonOp::Gt => cardinality > *value, - ComparisonOp::Ge => cardinality >= *value, - ComparisonOp::Lt => cardinality < *value, - ComparisonOp::Le => cardinality <= *value, - _ => unreachable!(), - } - } - Self::True => true, - } - } -} - -impl From for RecordMatcher { - fn from(matcher: FieldMatcher) -> Self { - RecordMatcher::Singleton(Box::new(matcher)) - } -} - -impl BitAnd for RecordMatcher { - type Output = Self; - - fn bitand(self, rhs: Self) -> Self::Output { - RecordMatcher::Composite( - Box::new(self), - BooleanOp::And, - Box::new(rhs), - ) - } -} - -impl BitOr for RecordMatcher { - type Output = Self; - - fn bitor(self, rhs: Self) -> Self::Output { - RecordMatcher::Composite( - Box::new(self), - BooleanOp::Or, - Box::new(rhs), - ) - } -} - -impl Not for RecordMatcher { - type Output = Self; - - fn not(self) -> Self::Output { - RecordMatcher::Not(Box::new(self)) - } -} - -fn parse_record_matcher_singleton( - i: &[u8], -) -> ParseResult { - map(ws(parse_field_matcher), |x| { - RecordMatcher::Singleton(Box::new(x)) - })(i) -} - -fn parse_record_matcher_exists(i: &[u8]) -> ParseResult { - map( - alt(( - ws(parse_field_matcher_exists), - map( - tuple(( - parse_tag_matcher, - parse_occurrence_matcher, - preceded( - char('.'), - cut(parse_subfield_matcher_exists), - ), - )), - |(tag, occurrence, subfields)| { - FieldMatcher::Subield( - tag, - occurrence, - SubfieldListMatcher::Singleton(subfields), - ) - }, - ), - )), - |x| RecordMatcher::Singleton(Box::new(x)), - )(i) -} - -fn parse_record_matcher_group(i: &[u8]) -> ParseResult { - map( - preceded( - ws(char('(')), - cut(terminated( - alt(( - parse_record_matcher_composite, - parse_record_matcher_singleton, - parse_record_matcher_not, - parse_record_matcher_cardinality, - parse_record_matcher_group, - )), - ws(char(')')), - )), - ), - |matcher| RecordMatcher::Group(Box::new(matcher)), - )(i) -} - -fn parse_record_matcher_not(i: &[u8]) -> ParseResult { - map( - preceded( - ws(char('!')), - cut(alt(( - parse_record_matcher_group, - parse_record_matcher_exists, - parse_record_matcher_not, - ))), - ), - |matcher| RecordMatcher::Not(Box::new(matcher)), - )(i) -} - -fn parse_record_matcher_composite_and( - i: &[u8], -) -> ParseResult { - let (i, (first, remainder)) = tuple(( - alt(( - ws(parse_record_matcher_group), - ws(parse_record_matcher_cardinality), - ws(parse_record_matcher_singleton), - ws(parse_record_matcher_not), - ws(parse_record_matcher_exists), - )), - many1(preceded( - ws(tag("&&")), - alt(( - ws(parse_record_matcher_group), - ws(parse_record_matcher_cardinality), - ws(parse_record_matcher_singleton), - ws(parse_record_matcher_not), - ws(parse_record_matcher_exists), - )), - )), - ))(i)?; - - Ok(( - i, - remainder.into_iter().fold(first, |prev, next| prev & next), - )) -} - -fn parse_record_matcher_composite_or( - i: &[u8], -) -> ParseResult { - let (i, (first, remainder)) = tuple(( - alt(( - ws(parse_record_matcher_group), - ws(parse_record_matcher_composite_and), - ws(parse_record_matcher_cardinality), - ws(parse_record_matcher_singleton), - ws(parse_record_matcher_not), - )), - many1(preceded( - ws(tag("||")), - cut(alt(( - ws(parse_record_matcher_group), - ws(parse_record_matcher_composite_and), - ws(parse_record_matcher_cardinality), - ws(parse_record_matcher_singleton), - ws(parse_record_matcher_not), - ))), - )), - ))(i)?; - - Ok(( - i, - remainder.into_iter().fold(first, |prev, next| prev | next), - )) -} - -fn parse_record_matcher_composite( - i: &[u8], -) -> ParseResult { - alt(( - parse_record_matcher_composite_or, - parse_record_matcher_composite_and, - ))(i) -} - -fn parse_record_matcher_cardinality( - i: &[u8], -) -> ParseResult { - map( - preceded( - ws(char('#')), - cut(tuple(( - ws(parse_tag_matcher), - ws(parse_occurrence_matcher), - opt(preceded( - ws(char('{')), - cut(terminated( - parse_subfield_list_matcher, - ws(char('}')), - )), - )), - ws(parse_comparison_op_usize), - map_res(digit1, |s| { - std::str::from_utf8(s).unwrap().parse::() - }), - ))), - ), - |(t, o, s, op, value)| { - RecordMatcher::Cardinality(t, o, s.map(Box::new), op, value) - }, - )(i) -} - -pub(crate) fn parse_record_matcher( - i: &[u8], -) -> ParseResult { - alt(( - ws(parse_record_matcher_composite), - ws(parse_record_matcher_group), - ws(parse_record_matcher_not), - ws(parse_record_matcher_singleton), - ws(parse_record_matcher_cardinality), - ))(i) -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::test::TestResult; - - #[test] - fn test_record_matcher_invalid() -> TestResult { - assert!(RecordMatcher::new("003@ .0 == '123456789X'").is_err()); - Ok(()) - } - - #[test] - fn test_record_matcher_singleton() -> TestResult { - let matcher = RecordMatcher::new("003@.0 == '123456789X'")?; - let record = - ByteRecord::from_bytes("003@ \x1f0123456789X\x1e")?; - assert!(matcher.is_match(&record, &MatcherFlags::default())); - - let matcher = RecordMatcher::new("003@.0 == '123456789X'")?; - let record = - ByteRecord::from_bytes("003@ \x1f023456789X1\x1e")?; - assert!(!matcher.is_match(&record, &MatcherFlags::default())); - - Ok(()) - } - - #[test] - fn test_record_matcher_group() -> TestResult { - // composite - let matcher = RecordMatcher::new( - "(#003@ == 1 && 003@.0 == '123456789X')", - )?; - let record = - ByteRecord::from_bytes("003@ \x1f0123456789X\x1e")?; - assert!(matcher.is_match(&record, &MatcherFlags::default())); - - // singleton - let matcher = RecordMatcher::new("(003@.0 == '123456789X')")?; - let record = - ByteRecord::from_bytes("003@ \x1f0123456789X\x1e")?; - assert!(matcher.is_match(&record, &MatcherFlags::default())); - - // not - let matcher = RecordMatcher::new("(!012A?)")?; - let record = - ByteRecord::from_bytes("003@ \x1f0123456789X\x1e")?; - assert!(matcher.is_match(&record, &MatcherFlags::default())); - - // group - let matcher = - RecordMatcher::new("(((003@.0 == '123456789X')))")?; - let record = - ByteRecord::from_bytes("003@ \x1f0123456789X\x1e")?; - assert!(matcher.is_match(&record, &MatcherFlags::default())); - - Ok(()) - } - - #[test] - fn test_record_matcher_not() -> TestResult { - // group - let matcher = RecordMatcher::new("!(003@.0 == '123456789X')")?; - let record = - ByteRecord::from_bytes("003@ \x1f0223456789X1\x1e")?; - assert!(matcher.is_match(&record, &MatcherFlags::default())); - - // exists - let matcher = RecordMatcher::new("!012A?")?; - let record = - ByteRecord::from_bytes("003@ \x1f0123456789X\x1e")?; - assert!(matcher.is_match(&record, &MatcherFlags::default())); - - let matcher = RecordMatcher::new("!012A.0?")?; - let record = - ByteRecord::from_bytes("003@ \x1f0123456789X\x1e")?; - assert!(matcher.is_match(&record, &MatcherFlags::default())); - - // not - let matcher = RecordMatcher::new("!!003@?")?; - let record = - ByteRecord::from_bytes("003@ \x1f0123456789X\x1e")?; - assert!(matcher.is_match(&record, &MatcherFlags::default())); - - Ok(()) - } - - #[test] - fn test_record_matcher_composite() -> TestResult { - let matcher = - RecordMatcher::new("003@? && 003@.0 == '123456789X'")?; - let record = - ByteRecord::from_bytes("003@ \x1f0123456789X\x1e")?; - assert!(matcher.is_match(&record, &MatcherFlags::default())); - - let matcher = - RecordMatcher::new("!012A? && 003@.0 == '123456789X'")?; - let record = - ByteRecord::from_bytes("003@ \x1f0123456789X\x1e")?; - assert!(matcher.is_match(&record, &MatcherFlags::default())); - Ok(()) - } - - #[test] - fn test_record_matcher_to_string() -> TestResult { - let values = vec![ - ("003@.0 == '0123456789'", "003@.0 == '0123456789'"), - ("( 003@.0 == '0123456789')", "(003@.0 == '0123456789')"), - ("!012A.0?", "!012A.0?"), - ( - "!012A.0? && 013A.a == 'abc'", - "!012A.0? && 013A.a == 'abc'", - ), - ( - "!012A.0? || 013A.a == 'abc'", - "!012A.0? || 013A.a == 'abc'", - ), - ( - "#012A{ a? && b == '1'} >= 2", - "#012A{a? && b == '1'} >= 2", - ), - ("#012A >= 2", "#012A >= 2"), - ]; - - for (matcher, expected) in values { - assert_eq!( - RecordMatcher::new(matcher)?.to_string(), - expected - ); - } - - Ok(()) - } -} diff --git a/src/matcher/subfield_list_matcher.rs b/src/matcher/subfield_list_matcher.rs deleted file mode 100644 index da50ad721..000000000 --- a/src/matcher/subfield_list_matcher.rs +++ /dev/null @@ -1,500 +0,0 @@ -use std::fmt; -use std::ops::{BitAnd, BitOr}; - -use nom::branch::alt; -use nom::bytes::complete::tag; -use nom::character::complete::{char, digit1}; -use nom::combinator::{all_consuming, cut, map, map_res}; -use nom::multi::many1; -use nom::sequence::{preceded, terminated, tuple}; -use nom::Finish; - -use super::subfield_matcher::parse_subfield_matcher_exists; -use crate::common::{ws, ParseResult}; -use crate::matcher::{ - parse_comparison_op_usize, parse_subfield_matcher, BooleanOp, - ComparisonOp, MatcherFlags, SubfieldMatcher, -}; -use crate::subfield::{parse_subfield_code, Subfield}; -use crate::Error; - -#[derive(Debug, PartialEq)] -pub enum SubfieldListMatcher { - Singleton(SubfieldMatcher), - Group(Box), - Not(Box), - Composite( - Box, - BooleanOp, - Box, - ), - Cardinality(char, ComparisonOp, usize), -} - -impl fmt::Display for SubfieldListMatcher { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::Singleton(expr) => write!(f, "{expr}"), - Self::Group(expr) => write!(f, "({expr})"), - Self::Not(expr) => write!(f, "!{expr}"), - Self::Composite(lhs, op, rhs) => { - write!(f, "{lhs} {op} {rhs}") - } - Self::Cardinality(code, op, value) => { - write!(f, "#{code} {op} {value}") - } - } - } -} - -impl SubfieldListMatcher { - /// Creates a subfield list matcher from a string slice. - /// - /// If an invalid subfield list matcher is given, an error is - /// returned. - /// - /// # Example - /// - /// ```rust - /// use pica::matcher::SubfieldListMatcher; - /// - /// # fn main() { example().unwrap(); } - /// fn example() -> Result<(), Box> { - /// assert!(SubfieldListMatcher::new("0 == 'abc' && 9?").is_ok()); - /// assert!(SubfieldListMatcher::new("0 == 'ab' && !?").is_err()); - /// Ok(()) - /// } - /// ``` - pub fn new>(data: S) -> Result { - let data = data.as_ref(); - - match all_consuming(parse_subfield_list_matcher)( - data.as_bytes(), - ) - .finish() - { - Ok((_, matcher)) => Ok(matcher), - Err(_) => Err(Error::InvalidMatcher(format!( - "Expected valid subfield list matcher, got '{data}'" - ))), - } - } - - /// Returns true, if and only if the given subfield list matches - /// against the subfield list matcher. - /// - /// # Example - /// - /// ```rust - /// use pica::matcher::{MatcherFlags, SubfieldListMatcher}; - /// use pica::Subfield; - /// - /// # fn main() { example().unwrap(); } - /// fn example() -> Result<(), Box> { - /// let matcher = SubfieldListMatcher::new("0 == 'abc' && 9?")?; - /// let list = - /// [Subfield::new('0', "abc")?, Subfield::new('9', "123")?]; - /// assert!(matcher.is_match(&list, &MatcherFlags::default())); - /// Ok(()) - /// } - /// ``` - pub fn is_match( - &self, - subfields: &[Subfield], - flags: &MatcherFlags, - ) -> bool { - match self { - Self::Singleton(matcher) => { - subfields.iter().any(|s| matcher.is_match(s, flags)) - } - Self::Group(matcher) => matcher.is_match(subfields, flags), - Self::Not(matcher) => !matcher.is_match(subfields, flags), - Self::Composite(lhs, BooleanOp::And, rhs) => { - lhs.is_match(subfields, flags) - && rhs.is_match(subfields, flags) - } - Self::Composite(lhs, BooleanOp::Or, rhs) => { - lhs.is_match(subfields, flags) - || rhs.is_match(subfields, flags) - } - Self::Cardinality(code, op, value) => { - let cardinality = subfields - .iter() - .filter(|s| s.code() == *code) - .count(); - - match op { - ComparisonOp::Eq => cardinality == *value, - ComparisonOp::Ne => cardinality != *value, - ComparisonOp::Gt => cardinality > *value, - ComparisonOp::Ge => cardinality >= *value, - ComparisonOp::Lt => cardinality < *value, - ComparisonOp::Le => cardinality <= *value, - _ => unreachable!(), - } - } - } - } -} - -impl BitAnd for SubfieldListMatcher { - type Output = Self; - - fn bitand(self, rhs: Self) -> Self::Output { - SubfieldListMatcher::Composite( - Box::new(self), - BooleanOp::And, - Box::new(rhs), - ) - } -} - -impl BitOr for SubfieldListMatcher { - type Output = Self; - - fn bitor(self, rhs: Self) -> Self::Output { - SubfieldListMatcher::Composite( - Box::new(self), - BooleanOp::Or, - Box::new(rhs), - ) - } -} - -impl From for SubfieldListMatcher { - fn from(matcher: SubfieldMatcher) -> Self { - SubfieldListMatcher::Singleton(matcher) - } -} - -pub(crate) fn parse_subfield_list_matcher_singleton( - i: &[u8], -) -> ParseResult { - map(ws(parse_subfield_matcher), SubfieldListMatcher::Singleton)(i) -} - -pub(crate) fn parse_subfield_list_matcher_exists( - i: &[u8], -) -> ParseResult { - map( - ws(parse_subfield_matcher_exists), - SubfieldListMatcher::Singleton, - )(i) -} - -fn parse_subfield_list_matcher_cardinality( - i: &[u8], -) -> ParseResult { - map( - preceded( - char('#'), - cut(tuple(( - ws(parse_subfield_code), - ws(parse_comparison_op_usize), - map_res(digit1, |s| { - std::str::from_utf8(s).unwrap().parse::() - }), - ))), - ), - |(code, op, value)| { - SubfieldListMatcher::Cardinality(code, op, value) - }, - )(i) -} - -fn parse_subfield_list_matcher_group( - i: &[u8], -) -> ParseResult { - map( - preceded( - ws(char('(')), - cut(terminated( - alt(( - parse_subfield_list_matcher_composite, - parse_subfield_list_matcher_singleton, - parse_subfield_list_matcher_not, - parse_subfield_list_matcher_group, - )), - ws(char(')')), - )), - ), - |matcher| SubfieldListMatcher::Group(Box::new(matcher)), - )(i) -} - -fn parse_subfield_list_matcher_not( - i: &[u8], -) -> ParseResult { - map( - preceded( - ws(char('!')), - cut(alt(( - parse_subfield_list_matcher_group, - parse_subfield_list_matcher_exists, - parse_subfield_list_matcher_not, - ))), - ), - |matcher| SubfieldListMatcher::Not(Box::new(matcher)), - )(i) -} - -fn parse_subfield_list_matcher_composite_and( - i: &[u8], -) -> ParseResult { - let (i, (first, remainder)) = tuple(( - alt(( - ws(parse_subfield_list_matcher_group), - ws(parse_subfield_list_matcher_singleton), - ws(parse_subfield_list_matcher_cardinality), - ws(parse_subfield_list_matcher_not), - )), - many1(preceded( - ws(tag("&&")), - alt(( - ws(parse_subfield_list_matcher_group), - ws(parse_subfield_list_matcher_singleton), - ws(parse_subfield_list_matcher_cardinality), - ws(parse_subfield_list_matcher_not), - )), - )), - ))(i)?; - - Ok(( - i, - remainder.into_iter().fold(first, |prev, next| prev & next), - )) -} - -fn parse_subfield_list_matcher_composite_or( - i: &[u8], -) -> ParseResult { - let (i, (first, remainder)) = tuple(( - alt(( - ws(parse_subfield_list_matcher_group), - ws(parse_subfield_list_matcher_composite_and), - ws(parse_subfield_list_matcher_singleton), - ws(parse_subfield_list_matcher_cardinality), - ws(parse_subfield_list_matcher_not), - )), - many1(preceded( - ws(tag("||")), - cut(alt(( - ws(parse_subfield_list_matcher_group), - ws(parse_subfield_list_matcher_composite_and), - ws(parse_subfield_list_matcher_singleton), - ws(parse_subfield_list_matcher_cardinality), - ws(parse_subfield_list_matcher_not), - ))), - )), - ))(i)?; - - Ok(( - i, - remainder.into_iter().fold(first, |prev, next| prev | next), - )) -} - -fn parse_subfield_list_matcher_composite( - i: &[u8], -) -> ParseResult { - alt(( - parse_subfield_list_matcher_composite_or, - parse_subfield_list_matcher_composite_and, - ))(i) -} - -pub(crate) fn parse_subfield_list_matcher( - i: &[u8], -) -> ParseResult { - alt(( - parse_subfield_list_matcher_composite, - parse_subfield_list_matcher_group, - parse_subfield_list_matcher_not, - parse_subfield_list_matcher_singleton, - parse_subfield_list_matcher_cardinality, - ))(i) -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::test::TestResult; - - #[test] - fn test_subfield_list_matcher_singleton() -> TestResult { - let matcher = SubfieldListMatcher::new("0 == 'abc'")?; - - let subfields = [Subfield::new('0', "abc")?]; - assert!(matcher.is_match(&subfields, &MatcherFlags::default())); - - let subfields = [Subfield::new('0', "bcd")?]; - assert!(!matcher.is_match(&subfields, &MatcherFlags::default())); - - Ok(()) - } - - #[test] - fn test_subfield_list_matcher_cardinality() -> TestResult { - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "def")?]; - - let matcher = SubfieldListMatcher::new("#0 == 2")?; - assert!(matcher.is_match(&subfields, &MatcherFlags::default())); - - let matcher = SubfieldListMatcher::new("#0 >= 2")?; - assert!(matcher.is_match(&subfields, &MatcherFlags::default())); - - let matcher = SubfieldListMatcher::new("#0 <= 2")?; - assert!(matcher.is_match(&subfields, &MatcherFlags::default())); - - let matcher = SubfieldListMatcher::new("#0 != 2")?; - assert!(!matcher.is_match(&subfields, &MatcherFlags::default())); - - let matcher = SubfieldListMatcher::new("#0 < 2")?; - assert!(!matcher.is_match(&subfields, &MatcherFlags::default())); - - let matcher = SubfieldListMatcher::new("#0 > 2")?; - assert!(!matcher.is_match(&subfields, &MatcherFlags::default())); - - assert!(SubfieldListMatcher::new("#0 == 'abc'").is_err()); - assert!(SubfieldListMatcher::new("#0 == -1").is_err()); - assert!(SubfieldListMatcher::new("##0 == 1").is_err()); - - Ok(()) - } - - #[test] - fn test_subfield_list_matcher_group() -> TestResult { - let flags = MatcherFlags::default(); - - let matcher = SubfieldListMatcher::new("(0? && 0 == 'abc')")?; - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "def")?]; - assert!(matcher.is_match(&subfields, &flags)); - - let matcher = SubfieldListMatcher::new("(0 == 'abc')")?; - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "def")?]; - assert!(matcher.is_match(&subfields, &flags)); - - let matcher = SubfieldListMatcher::new("(!9?)")?; - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "def")?]; - assert!(matcher.is_match(&subfields, &flags)); - - let matcher = SubfieldListMatcher::new("((0 == 'def'))")?; - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "def")?]; - assert!(matcher.is_match(&subfields, &flags)); - - assert!(SubfieldListMatcher::new("((0 == 'abc')").is_err()); - - Ok(()) - } - - #[test] - fn test_subfield_list_matcher_not() -> TestResult { - let flags = MatcherFlags::default(); - - let matcher = SubfieldListMatcher::new("!(0? && 0 == 'hij')")?; - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "def")?]; - assert!(matcher.is_match(&subfields, &flags)); - - let matcher = SubfieldListMatcher::new("!9?")?; - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "def")?]; - assert!(matcher.is_match(&subfields, &flags)); - - let matcher = SubfieldListMatcher::new("!!(0? && 0 == 'abc')")?; - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "def")?]; - assert!(matcher.is_match(&subfields, &flags)); - - Ok(()) - } - - #[test] - fn test_subfield_list_matcher_composite() -> TestResult { - let flags = MatcherFlags::default(); - - let matcher = - SubfieldListMatcher::new("0? && 0 == 'abc' && 0 == 'def'")?; - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "def")?]; - assert!(matcher.is_match(&subfields, &flags)); - - let matcher = - SubfieldListMatcher::new("0 == 'abc' && 0 == 'def'")?; - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "hij")?]; - assert!(!matcher.is_match(&subfields, &flags)); - - let matcher = - SubfieldListMatcher::new("0 == 'abc' && 0 == 'def'")?; - let subfields = - [Subfield::new('0', "hij")?, Subfield::new('0', "def")?]; - assert!(!matcher.is_match(&subfields, &flags)); - - let matcher = - SubfieldListMatcher::new("0 == 'abc' || 0 == 'def'")?; - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "hij")?]; - assert!(matcher.is_match(&subfields, &flags)); - - let matcher = - SubfieldListMatcher::new("0 == 'abc' || 0 == 'def'")?; - let subfields = - [Subfield::new('0', "hij")?, Subfield::new('0', "def")?]; - assert!(matcher.is_match(&subfields, &flags)); - - let matcher = - SubfieldListMatcher::new("9? || 0 == 'abc' && 0 == 'def'")?; - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "def")?]; - assert!(matcher.is_match(&subfields, &flags)); - - let matcher = SubfieldListMatcher::new( - "9? && 0 == 'abc' || 0 == 'def'", - )?; - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "def")?]; - assert!(matcher.is_match(&subfields, &flags)); - - let matcher = SubfieldListMatcher::new( - "9? && 0 == 'abc' || 0 == 'hij'", - )?; - let subfields = - [Subfield::new('0', "abc")?, Subfield::new('0', "def")?]; - assert!(!matcher.is_match(&subfields, &flags)); - - Ok(()) - } - - #[test] - fn test_subfield_list_matcher_to_string() -> TestResult { - let values = vec![ - ("0 == 'abc'", "0 == 'abc'"), - ("( a == 'abc' )", "(a == 'abc')"), - ("!( a == 'abc' )", "!(a == 'abc')"), - ( - "a == 'a' && b == 'b' && c == 'c' ", - "a == 'a' && b == 'b' && c == 'c'", - ), - ( - "a == 'a' || b == 'b' || c == 'c' ", - "a == 'a' || b == 'b' || c == 'c'", - ), - ("#a >= 3", "#a >= 3"), - ]; - - for (matcher, expected) in values { - assert_eq!( - SubfieldListMatcher::new(matcher)?.to_string(), - expected - ); - } - - Ok(()) - } -} diff --git a/src/matcher/subfield_matcher.rs b/src/matcher/subfield_matcher.rs deleted file mode 100644 index 9b6fa3036..000000000 --- a/src/matcher/subfield_matcher.rs +++ /dev/null @@ -1,583 +0,0 @@ -use std::fmt; - -use bstr::{BString, ByteSlice}; -use nom::branch::alt; -use nom::bytes::complete::tag; -use nom::character::complete::char; -use nom::combinator::{all_consuming, cut, map, opt, value, verify}; -use nom::multi::{many1, separated_list1}; -use nom::sequence::{preceded, terminated, tuple}; -use nom::Finish; -use regex::bytes::RegexBuilder; -use regex::Regex; -use strsim::normalized_levenshtein; - -use crate::common::{parse_string, ws, ParseResult}; -use crate::matcher::{ - parse_comparison_op_bstring, ComparisonOp, MatcherFlags, -}; -use crate::subfield::parse_subfield_code; -use crate::{Error, Subfield}; - -macro_rules! maybe_lowercase { - ($value:expr, $flag:expr) => { - if $flag { - $value.to_lowercase() - } else { - $value - } - }; -} - -/// A subfield matcher. -#[derive(Debug, PartialEq, Eq)] -pub enum SubfieldMatcher { - Comparison(Vec, ComparisonOp, BString), - Exists(Vec), - In(Vec, Vec, bool), - Regex(Vec, String, bool), -} - -fn fmt_codes(codes: &Vec) -> String { - let result = String::from_iter(codes); - if result.len() > 1 { - format!("[{result}]") - } else { - result - } -} - -impl fmt::Display for SubfieldMatcher { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::Comparison(codes, op, value) => { - write!(f, "{} {op} '{value}'", fmt_codes(codes)) - } - Self::Exists(codes) => write!(f, "{}?", fmt_codes(codes)), - Self::In(codes, values, invert) => { - let values: String = values - .iter() - .map(|s| format!("'{s}'")) - .collect::>() - .join(", "); - - if *invert { - write!(f, "{} not in [{values}]", fmt_codes(codes)) - } else { - write!(f, "{} in [{values}]", fmt_codes(codes)) - } - } - Self::Regex(codes, regex, invert) => { - if *invert { - write!(f, "{} !~ '{regex}'", fmt_codes(codes)) - } else { - write!(f, "{} =~ '{regex}'", fmt_codes(codes)) - } - } - } - } -} - -impl SubfieldMatcher { - /// Creates a subfield matcher from a string slice. - /// - /// If an invalid subfield matcher is given, an error is returned. - /// - /// # Example - /// - /// ```rust - /// use pica::matcher::SubfieldMatcher; - /// - /// # fn main() { example().unwrap(); } - /// fn example() -> Result<(), Box> { - /// assert!(SubfieldMatcher::new("0 == 'abc'").is_ok()); - /// assert!(SubfieldMatcher::new("! == 'ac'").is_err()); - /// Ok(()) - /// } - /// ``` - pub fn new>(data: S) -> Result { - let data = data.as_ref(); - - match all_consuming(parse_subfield_matcher)(data.as_bytes()) - .finish() - { - Ok((_, matcher)) => Ok(matcher), - Err(_) => Err(Error::InvalidMatcher(format!( - "Expected valid subfield matcher, got '{data}'" - ))), - } - } - - /// Returns true, if and only if the given subfield matches against - /// the subfield matcher. - /// - /// # Example - /// - /// ```rust - /// use pica::matcher::{MatcherFlags, SubfieldMatcher}; - /// use pica::Subfield; - /// - /// # fn main() { example().unwrap(); } - /// fn example() -> Result<(), Box> { - /// let matcher = SubfieldMatcher::new("0 == 'abc'")?; - /// let subfield = Subfield::new('0', "abc")?; - /// - /// assert!(matcher.is_match(&subfield, &MatcherFlags::new())); - /// Ok(()) - /// } - /// ``` - pub fn is_match( - &self, - subfield: &Subfield, - flags: &MatcherFlags, - ) -> bool { - let case_cmp = |lhs: &BString, rhs: &BString| -> bool { - if flags.ignore_case { - lhs.to_lowercase() == rhs.to_lowercase() - } else { - lhs == rhs - } - }; - - match self { - Self::Comparison(codes, ComparisonOp::Eq, value) => { - codes.contains(&subfield.code()) - && case_cmp(subfield.value(), value) - } - Self::Comparison(codes, ComparisonOp::Ne, value) => { - codes.contains(&subfield.code()) - && !case_cmp(subfield.value(), value) - } - Self::Comparison( - codes, - ComparisonOp::StartsWith, - value, - ) => { - codes.contains(&subfield.code()) - && if flags.ignore_case { - subfield - .value() - .to_lowercase() - .starts_with(&value.to_lowercase()) - } else { - subfield.value().starts_with(value) - } - } - Self::Comparison(codes, ComparisonOp::EndsWith, value) => { - codes.contains(&subfield.code()) - && if flags.ignore_case { - subfield - .value() - .to_lowercase() - .ends_with(&value.to_lowercase()) - } else { - subfield.value().ends_with(value) - } - } - Self::Comparison(codes, ComparisonOp::Similar, value) => { - if codes.contains(&subfield.code()) { - let flag = flags.ignore_case; - let lhs = maybe_lowercase!( - subfield.value().to_vec(), - flag - ); - let rhs = maybe_lowercase!(value.to_vec(), flag); - - let score = normalized_levenshtein( - &lhs.to_str_lossy(), - &rhs.to_str_lossy(), - ); - - score > flags.strsim_threshold - } else { - false - } - } - Self::Comparison(_, _, _) => unreachable!(), - Self::Regex(codes, regex, invert) => { - if codes.contains(&subfield.code()) { - let re = RegexBuilder::new(regex) - .case_insensitive(flags.ignore_case) - .build() - .unwrap(); - - let mut result = re.is_match(subfield.value()); - if *invert { - result = !result; - } - - result - } else { - false - } - } - Self::In(codes, values, invert) => { - if !codes.contains(&subfield.code()) { - false - } else { - let mut result = - values.iter().any(|x: &BString| { - case_cmp(subfield.value(), x) - }); - - if *invert { - result = !result; - } - - result - } - } - Self::Exists(codes) => codes.contains(&subfield.code()), - } - } -} - -fn parse_subfield_codes(i: &[u8]) -> ParseResult> { - alt(( - preceded( - char('['), - cut(terminated(many1(parse_subfield_code), char(']'))), - ), - map(char('*'), |_| { - "0123456789abcdefghijklmnopqrstuvwxyz" - .chars() - .collect::>() - }), - many1(parse_subfield_code), - map(parse_subfield_code, |x| vec![x]), - ))(i) -} - -fn parse_subfield_matcher_comparison( - i: &[u8], -) -> ParseResult { - map( - tuple(( - ws(parse_subfield_codes), - ws(parse_comparison_op_bstring), - ws(parse_string), - )), - |(codes, op, value)| { - SubfieldMatcher::Comparison(codes, op, BString::from(value)) - }, - )(i) -} - -fn parse_subfield_matcher_regex( - i: &[u8], -) -> ParseResult { - map( - tuple(( - parse_subfield_codes, - alt(( - value(false, ws(tag("=~"))), - value(true, ws(tag("!~"))), - )), - verify(parse_string, |x| Regex::new(x).is_ok()), - )), - |(codes, invert, regex)| { - SubfieldMatcher::Regex(codes, regex, invert) - }, - )(i) -} - -fn parse_subfield_matcher_in(i: &[u8]) -> ParseResult { - map( - tuple(( - parse_subfield_codes, - opt(ws(tag("not"))), - ws(tag("in")), - preceded( - ws(char('[')), - cut(terminated( - separated_list1( - ws(char(',')), - map(parse_string, BString::from), - ), - ws(char(']')), - )), - ), - )), - |(codes, invert, _, values)| { - SubfieldMatcher::In(codes, values, invert.is_some()) - }, - )(i) -} - -pub(crate) fn parse_subfield_matcher_exists( - i: &[u8], -) -> ParseResult { - map( - terminated(ws(parse_subfield_codes), char('?')), - SubfieldMatcher::Exists, - )(i) -} - -pub(crate) fn parse_subfield_matcher( - i: &[u8], -) -> ParseResult { - alt(( - ws(parse_subfield_matcher_comparison), - ws(parse_subfield_matcher_regex), - ws(parse_subfield_matcher_in), - ws(parse_subfield_matcher_exists), - ))(i) -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::test::TestResult; - - #[test] - fn test_parse_subfield_codes() -> TestResult { - assert_eq!( - parse_subfield_codes(b"[abc]")?.1, - vec!['a', 'b', 'c'] - ); - assert_eq!( - parse_subfield_codes(b"abc")?.1, - vec!['a', 'b', 'c'] - ); - assert_eq!(parse_subfield_codes(b"a")?.1, vec!['a']); - Ok(()) - } - - #[test] - fn test_parse_subfield_matcher() -> TestResult { - assert!(parse_subfield_matcher(b"[a0] == 'abc'").is_ok()); - assert!(parse_subfield_matcher(b"[a0] != 'abc'").is_ok()); - assert!(parse_subfield_matcher(b"[a0] =$ 'abc'").is_ok()); - assert!(parse_subfield_matcher(b"[a0] =^ 'abc'").is_ok()); - assert!(parse_subfield_matcher(b"[a0] =~ '^abc'").is_ok()); - assert!(parse_subfield_matcher(b"[a0] !~ '^abc'").is_ok()); - assert!(parse_subfield_matcher(b"[a0] in ['a', 'b']").is_ok()); - assert!( - parse_subfield_matcher(b"[a0] not in ['a', 'b']").is_ok() - ); - assert!(parse_subfield_matcher(b"[a0]?").is_ok()); - Ok(()) - } - - #[test] - fn test_subfield_matcher_invalid() -> TestResult { - assert!(SubfieldMatcher::new("[aƤ] == 'abc'").is_err()); - assert!(SubfieldMatcher::new("! == 'abc'").is_err()); - assert!(SubfieldMatcher::new("! == 'abc").is_err()); - Ok(()) - } - - #[test] - fn test_subfield_matcher_eq() -> TestResult { - let flags = MatcherFlags::new(); - - let matcher = SubfieldMatcher::new("0 == 'abc'")?; - assert!(matcher.is_match(&Subfield::new('0', "abc")?, &flags)); - - let matcher = SubfieldMatcher::new("[01] == 'abc'")?; - assert!(matcher.is_match(&Subfield::new('0', "abc")?, &flags)); - assert!(matcher.is_match(&Subfield::new('1', "abc")?, &flags)); - assert!(!matcher.is_match(&Subfield::new('2', "abc")?, &flags)); - - let matcher = SubfieldMatcher::new("0 == 'def'")?; - assert!(!matcher.is_match(&Subfield::new('0', "abc")?, &flags)); - - let matcher = SubfieldMatcher::new("0 == 'ABC'")?; - assert!(!matcher.is_match(&Subfield::new('0', "abc")?, &flags)); - - let matcher = SubfieldMatcher::new("0 == 'ABC'")?; - assert!(matcher.is_match( - &Subfield::new('0', "abc")?, - &flags.ignore_case(true) - )); - - Ok(()) - } - - #[test] - fn test_subfield_matcher_ne() -> TestResult { - let flags = MatcherFlags::new(); - - let matcher = SubfieldMatcher::new("0 != 'abc'")?; - assert!(matcher.is_match(&Subfield::new('0', "def")?, &flags)); - assert!(!matcher.is_match(&Subfield::new('1', "def")?, &flags)); - - let matcher = SubfieldMatcher::new("[01] != 'abc'")?; - assert!(matcher.is_match(&Subfield::new('0', "def")?, &flags)); - assert!(matcher.is_match(&Subfield::new('1', "def")?, &flags)); - - let matcher = SubfieldMatcher::new("0 != 'abc'")?; - assert!(!matcher.is_match(&Subfield::new('0', "abc")?, &flags)); - - let matcher = SubfieldMatcher::new("0 != 'ABC'")?; - assert!(matcher.is_match(&Subfield::new('0', "abc")?, &flags)); - - let matcher = SubfieldMatcher::new("0 != 'ABC'")?; - assert!(!matcher.is_match( - &Subfield::new('0', "abc")?, - &flags.ignore_case(true) - )); - - Ok(()) - } - - #[test] - fn test_subfield_matcher_starts_with() -> TestResult { - let flags = MatcherFlags::new(); - - let matcher = SubfieldMatcher::new("0 =^ 'ab'")?; - assert!(matcher.is_match(&Subfield::new('0', "abc")?, &flags)); - - let matcher = SubfieldMatcher::new("[01] =^ 'ab'")?; - assert!(matcher.is_match(&Subfield::new('0', "abc")?, &flags)); - assert!(matcher.is_match(&Subfield::new('1', "abc")?, &flags)); - assert!(!matcher.is_match(&Subfield::new('2', "abc")?, &flags)); - - let matcher = SubfieldMatcher::new("0 =^ 'ab'")?; - assert!(!matcher.is_match(&Subfield::new('0', "bcd")?, &flags)); - - let matcher = SubfieldMatcher::new("0 =^ 'AB'")?; - assert!(!matcher.is_match(&Subfield::new('0', "abc")?, &flags)); - - let matcher = SubfieldMatcher::new("0 =^ 'AB'")?; - assert!(matcher.is_match( - &Subfield::new('0', "abc")?, - &flags.ignore_case(true) - )); - - Ok(()) - } - - #[test] - fn test_subfield_matcher_ends_with() -> TestResult { - let flags = MatcherFlags::new(); - - let matcher = SubfieldMatcher::new("0 =$ 'bc'")?; - assert!(matcher.is_match(&Subfield::new('0', "abc")?, &flags)); - - let matcher = SubfieldMatcher::new("0 =$ 'bc'")?; - assert!(!matcher.is_match(&Subfield::new('0', "bcd")?, &flags)); - - let matcher = SubfieldMatcher::new("0 =$ 'BC'")?; - assert!(!matcher.is_match(&Subfield::new('0', "abc")?, &flags)); - - let matcher = SubfieldMatcher::new("0 =$ 'BC'")?; - assert!(matcher.is_match( - &Subfield::new('0', "abc")?, - &flags.ignore_case(true) - )); - - Ok(()) - } - - #[test] - fn test_subfield_matcher_similar() -> TestResult { - let matcher = SubfieldMatcher::new("0 =* 'Heike'")?; - let flags = MatcherFlags::new(); - assert!(matcher.is_match(&Subfield::new('0', "Heike")?, &flags)); - - let matcher = SubfieldMatcher::new("0 =* 'Heike'")?; - let flags = MatcherFlags::new(); - assert!( - !matcher.is_match(&Subfield::new('0', "Heiko")?, &flags) - ); - - let matcher = SubfieldMatcher::new("0 =* 'Heike'")?; - let flags = MatcherFlags::new().strsim_threshold(0.7); - assert!(matcher.is_match(&Subfield::new('0', "Heiko")?, &flags)); - - Ok(()) - } - - #[test] - fn test_subfield_matcher_regex() -> TestResult { - let matcher = SubfieldMatcher::new("0 =~ '^A.*C$'")?; - let flags = MatcherFlags::new(); - assert!(matcher.is_match(&Subfield::new('0', "AbC")?, &flags)); - - let matcher = SubfieldMatcher::new("0 =~ '^A.*C$'")?; - let flags = MatcherFlags::new(); - assert!(!matcher.is_match(&Subfield::new('0', "abC")?, &flags)); - - let matcher = SubfieldMatcher::new("0 =~ '^A.*C$'")?; - let flags = MatcherFlags::new().ignore_case(true); - assert!(matcher.is_match(&Subfield::new('0', "abC")?, &flags)); - - Ok(()) - } - - #[test] - fn test_subfield_matcher_in() -> TestResult { - let matcher = SubfieldMatcher::new("0 in ['a', 'b', 'c']")?; - let flags = MatcherFlags::new(); - - assert!(matcher.is_match(&Subfield::new('0', "a")?, &flags)); - assert!(matcher.is_match(&Subfield::new('0', "b")?, &flags)); - assert!(matcher.is_match(&Subfield::new('0', "c")?, &flags)); - assert!(!matcher.is_match(&Subfield::new('0', "A")?, &flags)); - - let matcher = SubfieldMatcher::new("[01] in ['a', 'b']")?; - let flags = MatcherFlags::new(); - - assert!(matcher.is_match(&Subfield::new('0', "a")?, &flags)); - assert!(matcher.is_match(&Subfield::new('0', "b")?, &flags)); - assert!(matcher.is_match(&Subfield::new('1', "a")?, &flags)); - assert!(matcher.is_match(&Subfield::new('1', "b")?, &flags)); - assert!(!matcher.is_match(&Subfield::new('2', "a")?, &flags)); - - let matcher = SubfieldMatcher::new("0 not in ['a', 'b', 'c']")?; - let flags = MatcherFlags::new(); - - assert!(!matcher.is_match(&Subfield::new('0', "a")?, &flags)); - assert!(!matcher.is_match(&Subfield::new('0', "b")?, &flags)); - assert!(!matcher.is_match(&Subfield::new('0', "c")?, &flags)); - assert!(matcher.is_match(&Subfield::new('0', "A")?, &flags)); - - let matcher = SubfieldMatcher::new("0 in ['a', 'b', 'c']")?; - let flags = MatcherFlags::new().ignore_case(true); - assert!(matcher.is_match(&Subfield::new('0', "A")?, &flags)); - - Ok(()) - } - - #[test] - fn test_subfield_matcher_exists() -> TestResult { - let matcher = SubfieldMatcher::new("0?")?; - let flags = MatcherFlags::new(); - - assert!(matcher.is_match(&Subfield::new('0', "a")?, &flags)); - assert!(!matcher.is_match(&Subfield::new('1', "a")?, &flags)); - - let matcher = SubfieldMatcher::new("[01]?")?; - let flags = MatcherFlags::new(); - - assert!(matcher.is_match(&Subfield::new('0', "a")?, &flags)); - assert!(matcher.is_match(&Subfield::new('1', "a")?, &flags)); - - Ok(()) - } - - #[test] - fn test_subfield_matcher_to_string() -> TestResult { - let matchers = vec![ - ("0 == 'abc' ", "0 == 'abc'"), - ("[01] == 'abc' ", "[01] == 'abc'"), - ("0? ", "0?"), - ("[23]? ", "[23]?"), - ("[2]? ", "2?"), - ("0 in [ 'a', 'b' ]", "0 in ['a', 'b']"), - ("[03] in [ 'a', 'b' ]", "[03] in ['a', 'b']"), - ("0 =~ '^O[^bc]'", "0 =~ '^O[^bc]'"), - ("[45] =~ '^O[^bc]'", "[45] =~ '^O[^bc]'"), - ]; - - for (matcher, expected) in matchers { - assert_eq!( - SubfieldMatcher::new(matcher)?.to_string(), - expected - ); - } - - Ok(()) - } -} diff --git a/src/matcher/tag_matcher.rs b/src/matcher/tag_matcher.rs deleted file mode 100644 index 81f2e6b5c..000000000 --- a/src/matcher/tag_matcher.rs +++ /dev/null @@ -1,239 +0,0 @@ -use std::fmt; -use std::ops::RangeFrom; - -use nom::branch::alt; -use nom::character::complete::{char, one_of}; -use nom::combinator::{all_consuming, cut, map, value}; -use nom::error::ParseError; -use nom::multi::many1; -use nom::sequence::{preceded, terminated, tuple}; -use nom::{ - AsChar, FindToken, Finish, IResult, InputIter, InputLength, Slice, -}; - -use crate::common::ParseResult; -use crate::tag::{parse_tag, Tag}; -use crate::Error; - -#[derive(Debug, PartialEq, Eq)] -pub enum TagMatcher { - Some(Tag), - Pattern(Vec, Vec, Vec, Vec), -} - -impl fmt::Display for TagMatcher { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::Some(tag) => write!(f, "{tag}"), - Self::Pattern(ref p1, ref p2, ref p3, ref p4) => { - let fmt_p = |p: &Vec| -> String { - if p.len() > 1 { - format!("[{}]", String::from_iter(p)) - } else { - String::from_iter(p) - } - }; - - write!( - f, - "{}{}{}{}", - fmt_p(p1), - fmt_p(p2), - fmt_p(p3), - fmt_p(p4) - ) - } - } - } -} - -impl TagMatcher { - /// Creates a tag matcher from a string slice. - /// - /// If an invalid tag matcher is given, an error is returned. - /// - /// # Example - /// - /// ```rust - /// use pica::matcher::TagMatcher; - /// - /// # fn main() { example().unwrap(); } - /// fn example() -> Result<(), Box> { - /// assert!(TagMatcher::new("003@").is_ok()); - /// assert!(TagMatcher::new("0[12]3A").is_ok()); - /// assert!(TagMatcher::new("023!").is_err()); - /// Ok(()) - /// } - /// ``` - pub fn new>(data: S) -> Result { - let data = data.as_ref(); - - match all_consuming(parse_tag_matcher)(data.as_bytes()).finish() - { - Ok((_, matcher)) => Ok(matcher), - Err(_) => Err(Error::InvalidMatcher(format!( - "Expected valid tag matcher, got '{data}'" - ))), - } - } - - /// Returns true, if and only if the given tag matches against the - /// tag matcher. - /// - /// # Example - /// - /// ```rust - /// use pica::matcher::TagMatcher; - /// use pica::Tag; - /// - /// # fn main() { example().unwrap(); } - /// fn example() -> Result<(), Box> { - /// let matcher = TagMatcher::new("012[A@]")?; - /// assert!(matcher.is_match(&Tag::new("012A")?)); - /// assert!(matcher.is_match(&Tag::new("012@")?)); - /// Ok(()) - /// } - /// ``` - pub fn is_match(&self, tag: &Tag) -> bool { - match self { - TagMatcher::Some(lhs) => lhs == tag, - TagMatcher::Pattern(p0, p1, p2, p3) => { - p0.contains(&(tag[0] as char)) - && p1.contains(&(tag[1] as char)) - && p2.contains(&(tag[2] as char)) - && p3.contains(&(tag[3] as char)) - } - } - } -} - -impl From for TagMatcher { - fn from(tag: Tag) -> Self { - Self::Some(tag) - } -} - -fn parse_character_class>( - list: T, -) -> impl FnMut(I) -> IResult, E> -where - I: Slice> + InputIter + Clone + InputLength, - ::Item: AsChar + Copy, - T: FindToken<::Item> + Clone, -{ - alt(( - preceded( - char('['), - cut(terminated(many1(one_of(list.clone())), char(']'))), - ), - map(one_of(list), |x| vec![x]), - )) -} - -pub(crate) fn parse_tag_matcher(i: &[u8]) -> ParseResult { - alt(( - map(parse_tag, TagMatcher::Some), - map( - tuple(( - alt(( - value("012".chars().collect(), char('.')), - parse_character_class("012"), - )), - alt(( - value("0123456789".chars().collect(), char('.')), - parse_character_class("0123456789"), - )), - alt(( - value("0123456789".chars().collect(), char('.')), - parse_character_class("0123456789"), - )), - alt(( - value( - "ABCDEFGHIJKLMNOPQRSTUVWXYZ@".chars().collect(), - char('.'), - ), - parse_character_class( - "ABCDEFGHIJKLMNOPQRSTUVWXYZ@", - ), - )), - )), - |(p1, p2, p3, p4)| TagMatcher::Pattern(p1, p2, p3, p4), - ), - ))(i) -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::test::TestResult; - - #[test] - fn test_tag_matcher() -> TestResult { - let matcher = TagMatcher::new("012A")?; - assert!(matcher.is_match(&Tag::new("012A")?)); - assert!(!matcher.is_match(&Tag::new("012@")?)); - - let matcher = TagMatcher::new("[01][34][56][AB]")?; - assert!(matcher.is_match(&Tag::new("035A")?)); - assert!(matcher.is_match(&Tag::new("146B")?)); - - let matcher = TagMatcher::new(".12A")?; - assert!(matcher.is_match(&Tag::new("012A")?)); - assert!(matcher.is_match(&Tag::new("112A")?)); - assert!(matcher.is_match(&Tag::new("212A")?)); - - let matcher = TagMatcher::new("0.2A")?; - assert!(matcher.is_match(&Tag::new("002A")?)); - assert!(matcher.is_match(&Tag::new("012A")?)); - assert!(matcher.is_match(&Tag::new("022A")?)); - assert!(matcher.is_match(&Tag::new("032A")?)); - assert!(matcher.is_match(&Tag::new("042A")?)); - assert!(matcher.is_match(&Tag::new("052A")?)); - assert!(matcher.is_match(&Tag::new("062A")?)); - assert!(matcher.is_match(&Tag::new("072A")?)); - assert!(matcher.is_match(&Tag::new("082A")?)); - assert!(matcher.is_match(&Tag::new("092A")?)); - - let matcher = TagMatcher::new("01.A")?; - assert!(matcher.is_match(&Tag::new("010A")?)); - assert!(matcher.is_match(&Tag::new("011A")?)); - assert!(matcher.is_match(&Tag::new("012A")?)); - assert!(matcher.is_match(&Tag::new("013A")?)); - assert!(matcher.is_match(&Tag::new("014A")?)); - assert!(matcher.is_match(&Tag::new("015A")?)); - assert!(matcher.is_match(&Tag::new("016A")?)); - assert!(matcher.is_match(&Tag::new("017A")?)); - assert!(matcher.is_match(&Tag::new("018A")?)); - assert!(matcher.is_match(&Tag::new("019A")?)); - - let matcher = TagMatcher::new("012.")?; - assert!(matcher.is_match(&Tag::new("012A")?)); - assert!(matcher.is_match(&Tag::new("012B")?)); - assert!(matcher.is_match(&Tag::new("012C")?)); - assert!(matcher.is_match(&Tag::new("012@")?)); - - let matcher = TagMatcher::new("0...")?; - assert!(matcher.is_match(&Tag::new("012A")?)); - assert!(matcher.is_match(&Tag::new("023B")?)); - - assert!(TagMatcher::new("412A").is_err()); - assert!(TagMatcher::new("0A2A").is_err()); - assert!(TagMatcher::new("01AA").is_err()); - assert!(TagMatcher::new("0123").is_err()); - - Ok(()) - } - - #[test] - fn test_tag_matcher_to_string() -> TestResult { - assert_eq!(TagMatcher::new("012A")?.to_string(), "012A"); - assert_eq!(TagMatcher::new("[01]12A")?.to_string(), "[01]12A"); - assert_eq!(TagMatcher::new("[0]12A")?.to_string(), "012A"); - Ok(()) - } - - #[quickcheck] - fn tag_matcher_quickcheck(tag: Tag) -> bool { - TagMatcher::from(tag.clone()).is_match(&tag) - } -}