Skip to content

feat: add test 6.3.16 with mocked grammar checking - #895

Open
peinjoh wants to merge 12 commits into
mainfrom
feat/add-test-6-3-16-with-mock-tests-clean
Open

peinjoh wants to merge 12 commits into
mainfrom
feat/add-test-6-3-16-with-mock-tests-clean

Conversation

@peinjoh

@peinjoh peinjoh commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

This PR:

  • adds test 6.3.16 Grammar Checking
  • adds a mocked implementation that just finds some known grammar issues
  • adds unit tests and integration tests, similar to spellchecking
  • refactors the text_check module for clear seperation betwenn spell & grammar checking

@peinjoh
peinjoh requested a review from a team as a code owner August 28, 2026 14:47
@peinjoh
peinjoh requested a lite review from Copilot August 28, 2026 14:47

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces CSAF validation 6.3.16 (Grammar Checking) with a mocked grammar checker and refactors the existing text_check utilities into clearer spell vs grammar submodules, along with updated unit/integration tests.

Changes:

  • Added validation test_6_3_16 plus expected-results fixtures and a unit test.
  • Refactored text_check into spell/, grammar/, and shared utils/ + test_utils/, and migrated tests accordingly.
  • Added rstest_reuse to reduce duplication in checker-parameterized tests.

Reviewed changes

Copilot reviewed 19 out of 20 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
csaf-rs/src/validations/utils/text_check/utils.rs Moves shared helpers/types (e.g., TemporaryTextCheckQuality, tokenization) into a shared utils module.
csaf-rs/src/validations/utils/text_check/mod.rs Refactors module structure; adds grammar support and moves checker filtering into text_check root.
csaf-rs/src/validations/utils/text_check/test_utils.rs Refactors shared test helpers (e.g., NoSuggestionChecker, ExpectedResultExt) used by integration tests.
csaf-rs/src/validations/utils/text_check/spell/mod.rs Introduces spell submodule and enumerates spell checker implementations.
csaf-rs/src/validations/utils/text_check/spell/mock_spell.rs Updates mock spell checker wiring to new module layout.
csaf-rs/src/validations/utils/text_check/spell/symspell_spell.rs Updates SymSpell checker wiring to new module layout; adds marker-trait impl.
csaf-rs/src/validations/utils/text_check/spell/unit_tests.rs Migrates spell unit tests; uses rstest_reuse templates for shared test cases.
csaf-rs/src/validations/utils/text_check/spell/integration_tests.rs Migrates spell integration tests to new module layout with validator wrapper.
csaf-rs/src/validations/utils/text_check/grammar/mod.rs Adds grammar submodule and enumerates grammar checker implementations.
csaf-rs/src/validations/utils/text_check/grammar/mock_grammar.rs Adds mocked grammar checker implementation (known bad two-word sequences).
csaf-rs/src/validations/utils/text_check/grammar/unit_tests.rs Adds grammar unit tests for the mocked checker.
csaf-rs/src/validations/utils/text_check/grammar/integration_tests.rs Adds grammar integration test harness for 6.3.16.
csaf-rs/src/validations/utils/text_check/checkers/mod.rs Removes old combined “checkers” module (split into spell/ + grammar/).
csaf-rs/src/validations/utils/text_check/tests/unit_tests.rs Removes old shared tests module (migrated into spell/unit_tests.rs).
csaf-rs/src/validations/utils/text_check/tests/integration_tests.rs Removes old integration tests module (migrated into spell/integration_tests.rs).
csaf-rs/src/validations/utils/text_check/tests/mod.rs Removes old tests module root (tests now live under spell/ and grammar/).
csaf-rs/src/validations/test_6_3_16.rs Adds the new 6.3.16 validation implementation and expected-results fixture.
csaf-rs/src/validations/mod.rs Exports the new test_6_3_16 module.
csaf-rs/Cargo.toml Adds rstest_reuse dev dependency.
Cargo.lock Locks transitive deps introduced by rstest_reuse.
Suppressed comments (9)

csaf-rs/src/validations/utils/text_check/spell/symspell_spell.rs:5

  • TextChecker is not defined in the parent spell module, so use super::{SpellTextChecker, TextChecker}; won’t compile. Import TextChecker from text_check directly (and keep SpellTextChecker from super).
    csaf-rs/src/validations/utils/text_check/spell/mock_spell.rs:6
  • TextChecker is not defined in the parent spell module, so use super::{SpellTextChecker, TextChecker}; won’t compile. Import TextChecker from text_check directly.
    csaf-rs/src/validations/utils/text_check/grammar/unit_tests.rs:36
  • TextCheckFinding.start/end are character indices; slicing &text[start..end] treats them as byte offsets. Use the char_slice helper for character-index spans.
    assert_eq!(
        &text[finding_1.start..finding_1.end],
        "must followed",
        "expected a grammar finding 'must followed'"
    );

csaf-rs/src/validations/utils/text_check/grammar/unit_tests.rs:42

  • TextCheckFinding.start/end are character indices; slicing &text[start..end] treats them as byte offsets. Use the char_slice helper for character-index spans.
    assert_eq!(
        &text[finding_2.start..finding_2.end],
        "for ensure",
        "expected a grammar finding 'for ensure'"
    );

csaf-rs/src/validations/utils/text_check/grammar/unit_tests.rs:48

  • TextCheckFinding.start/end are character indices; slicing &text[start..end] treats them as byte offsets. Use the char_slice helper for character-index spans.
    assert_eq!(
        &text[finding_3.start..finding_3.end],
        "a products",
        "expected a grammar finding for 'a products'"
    );

csaf-rs/src/validations/utils/text_check/grammar/mock_grammar.rs:17

  • The module-level docs don’t match the current implementation: punctuation is only stripped at the token boundaries, and the finding’s fragment is the two-word sequence (not just the first word). Keeping docs aligned avoids confusion for future checker implementations.
/// - Text is tokenized by whitespace, punctuation is stripped.
/// - Consecutive word pairs are matched against a built-in list of known incorrect sequences.
/// - When a bad sequence is detected, the first word of the pair is reported as the problematic fragment.

csaf-rs/src/validations/utils/text_check/grammar/mock_grammar.rs:52

  • Using unwrap_or(0) here would silently produce incorrect offsets if find ever failed. This should behave like tokenize_words and fail loudly with an expect, since incorrect indices can cascade into invalid spans.
        let offset = text[search_from..].find(token).unwrap_or(0);

csaf-rs/src/validations/utils/text_check/grammar/mock_grammar.rs:89

  • This file already has unit tests in grammar/unit_tests.rs, so this TODO is now stale and may mislead readers.
// TODO unit tests

csaf-rs/src/validations/utils/text_check/test_utils.rs:42

  • Typo/grammar in doc comment: “a Err” should be “an Err”.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread csaf-rs/src/validations/utils/text_check/grammar/mock_grammar.rs
Comment thread csaf-rs/src/validations/utils/text_check/grammar/unit_tests.rs Outdated
Comment thread csaf-rs/src/validations/utils/text_check/grammar/unit_tests.rs
Comment thread csaf-rs/src/validations/utils/text_check/grammar/integration_tests.rs Outdated
Comment thread csaf-rs/src/validations/utils/text_check/grammar/mod.rs

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CSAF Validation Benchmark

Details
Benchmark suite Current: 9e1b317 Previous: 2c93e4a Ratio
csaf_2_0_tests/6.1.1 100998 ns/iter (± 1526) 131344 ns/iter (± 364) 0.77
csaf_2_0_tests/6.1.2 41075 ns/iter (± 301) 52957 ns/iter (± 148) 0.78
csaf_2_0_tests/6.1.3 10711 ns/iter (± 106) 13240 ns/iter (± 180) 0.81
csaf_2_0_tests/6.1.4 21976 ns/iter (± 30) 28135 ns/iter (± 227) 0.78
csaf_2_0_tests/6.1.5 11386 ns/iter (± 10) 13954 ns/iter (± 7) 0.82
csaf_2_0_tests/6.1.6 31866 ns/iter (± 87) 37953 ns/iter (± 49) 0.84
csaf_2_0_tests/6.1.7 27546 ns/iter (± 120) 33181 ns/iter (± 45) 0.83
csaf_2_0_tests/6.1.8 68841 ns/iter (± 606) 87611 ns/iter (± 200) 0.79
csaf_2_0_tests/6.1.9 52266 ns/iter (± 179) 68424 ns/iter (± 317) 0.76
csaf_2_0_tests/6.1.10 125983 ns/iter (± 441) 156555 ns/iter (± 288) 0.80
csaf_2_0_tests/6.1.11 11895 ns/iter (± 22) 14271 ns/iter (± 36) 0.83
csaf_2_0_tests/6.1.12 25714 ns/iter (± 67) 29162 ns/iter (± 49) 0.88
csaf_2_0_tests/6.1.13 25697 ns/iter (± 20) 32993 ns/iter (± 81) 0.78
csaf_2_0_tests/6.1.14 53871 ns/iter (± 60) 65965 ns/iter (± 110) 0.82
csaf_2_0_tests/6.1.15 10672 ns/iter (± 23) 12698 ns/iter (± 13) 0.84
csaf_2_0_tests/6.1.16 38567 ns/iter (± 85) 49546 ns/iter (± 69) 0.78
csaf_2_0_tests/6.1.17 11631 ns/iter (± 3) 13876 ns/iter (± 20) 0.84
csaf_2_0_tests/6.1.18 12973 ns/iter (± 43) 16382 ns/iter (± 109) 0.79
csaf_2_0_tests/6.1.19 12666 ns/iter (± 34) 15860 ns/iter (± 740) 0.80
csaf_2_0_tests/6.1.20 11439 ns/iter (± 51) 13732 ns/iter (± 24) 0.83
csaf_2_0_tests/6.1.21 42224 ns/iter (± 1878) 52570 ns/iter (± 259) 0.80
csaf_2_0_tests/6.1.22 49512 ns/iter (± 164) 59485 ns/iter (± 136) 0.83
csaf_2_0_tests/6.1.23 13323 ns/iter (± 15) 17292 ns/iter (± 205) 0.77
csaf_2_0_tests/6.1.24 13093 ns/iter (± 14) 16065 ns/iter (± 29) 0.82
csaf_2_0_tests/6.1.25 29244 ns/iter (± 64) 36418 ns/iter (± 50) 0.80
csaf_2_0_tests/6.1.26 16285 ns/iter (± 50) 20468 ns/iter (± 24) 0.80
csaf_2_0_tests/6.1.27.1 11213 ns/iter (± 7) 13624 ns/iter (± 27) 0.82
csaf_2_0_tests/6.1.27.2 11161 ns/iter (± 10) 13598 ns/iter (± 39) 0.82
csaf_2_0_tests/6.1.27.3 11122 ns/iter (± 37) 13131 ns/iter (± 17) 0.85
csaf_2_0_tests/6.1.27.4 11407 ns/iter (± 7) 13861 ns/iter (± 18) 0.82
csaf_2_0_tests/6.1.27.5 11011 ns/iter (± 15) 14460 ns/iter (± 179) 0.76
csaf_2_0_tests/6.1.27.6 11063 ns/iter (± 10) 13734 ns/iter (± 12) 0.81
csaf_2_0_tests/6.1.27.7 10442 ns/iter (± 47) 12695 ns/iter (± 74) 0.82
csaf_2_0_tests/6.1.27.8 10677 ns/iter (± 78) 12928 ns/iter (± 14) 0.83
csaf_2_0_tests/6.1.27.9 21368 ns/iter (± 65) 26207 ns/iter (± 76) 0.82
csaf_2_0_tests/6.1.27.10 11906 ns/iter (± 43) 14031 ns/iter (± 17) 0.85
csaf_2_0_tests/6.1.27.11 10963 ns/iter (± 20) 13181 ns/iter (± 13) 0.83
csaf_2_0_tests/6.1.28 20358 ns/iter (± 12) 23735 ns/iter (± 42) 0.86
csaf_2_0_tests/6.1.29 10411 ns/iter (± 14) 12876 ns/iter (± 15) 0.81
csaf_2_0_tests/6.1.30 35085 ns/iter (± 50) 43178 ns/iter (± 92) 0.81
csaf_2_0_tests/6.1.31 27834 ns/iter (± 60) 36678 ns/iter (± 233) 0.76
csaf_2_0_tests/6.1.32 10512 ns/iter (± 8) 13073 ns/iter (± 38) 0.80
csaf_2_0_tests/6.1.33 16036 ns/iter (± 24) 20026 ns/iter (± 36) 0.80
csaf_2_0_tests/6.2.1 116474 ns/iter (± 448) 156118 ns/iter (± 460) 0.75
csaf_2_0_tests/6.2.2 14703 ns/iter (± 23) 18424 ns/iter (± 23) 0.80
csaf_2_0_tests/6.2.3 13817 ns/iter (± 17) 17442 ns/iter (± 30) 0.79
csaf_2_0_tests/6.2.4 12851 ns/iter (± 83) 16050 ns/iter (± 20) 0.80
csaf_2_0_tests/6.2.5 43563 ns/iter (± 168) 54746 ns/iter (± 167) 0.80
csaf_2_0_tests/6.2.6 44101 ns/iter (± 95) 55349 ns/iter (± 161) 0.80
csaf_2_0_tests/6.2.7 10744 ns/iter (± 64) 13145 ns/iter (± 24) 0.82
csaf_2_0_tests/6.2.8 26933 ns/iter (± 416) 34751 ns/iter (± 105) 0.78
csaf_2_0_tests/6.2.9 26747 ns/iter (± 96) 34685 ns/iter (± 85) 0.77
csaf_2_0_tests/6.2.10 30901 ns/iter (± 124) 39709 ns/iter (± 164) 0.78
csaf_2_0_tests/6.2.11 133432 ns/iter (± 188) 168676 ns/iter (± 857) 0.79
csaf_2_0_tests/6.2.12 35600 ns/iter (± 19) 44955 ns/iter (± 171) 0.79
csaf_2_0_tests/6.2.13 658417 ns/iter (± 5820) 846719 ns/iter (± 1789) 0.78
csaf_2_0_tests/6.2.14 35492 ns/iter (± 23) 41229 ns/iter (± 68) 0.86
csaf_2_0_tests/6.2.15 26703 ns/iter (± 47) 31928 ns/iter (± 48) 0.84
csaf_2_0_tests/6.2.16 40389 ns/iter (± 51) 52684 ns/iter (± 73) 0.77
csaf_2_0_tests/6.2.17 10862 ns/iter (± 15) 17537 ns/iter (± 59) 0.62
csaf_2_0_tests/6.2.18 19553 ns/iter (± 28) 28908 ns/iter (± 59) 0.68
csaf_2_0_tests/6.2.19 10081 ns/iter (± 18) 16478 ns/iter (± 31) 0.61
csaf_2_0_tests/6.2.20 1291935 ns/iter (± 3230) 1614522 ns/iter (± 6983) 0.80
csaf_2_0_tests/6.3.1 28438 ns/iter (± 22) 34925 ns/iter (± 23) 0.81
csaf_2_0_tests/6.3.2 15901 ns/iter (± 45) 20921 ns/iter (± 63) 0.76
csaf_2_0_tests/6.3.3 19486 ns/iter (± 14) 25454 ns/iter (± 55) 0.77
csaf_2_0_tests/6.3.4 25679 ns/iter (± 201) 34024 ns/iter (± 30) 0.75
csaf_2_0_tests/6.3.5 28564 ns/iter (± 88) 36112 ns/iter (± 45) 0.79
csaf_2_0_tests/6.3.6 9725 ns/iter (± 43) 12009 ns/iter (± 12) 0.81
csaf_2_0_tests/6.3.7 9601 ns/iter (± 38) 11988 ns/iter (± 109) 0.80
csaf_2_0_tests/6.3.8 9601 ns/iter (± 31) 12001 ns/iter (± 13) 0.80
csaf_2_0_tests/6.3.9 22724 ns/iter (± 19) 28860 ns/iter (± 983) 0.79
csaf_2_0_tests/6.3.10 19180 ns/iter (± 64) 29390 ns/iter (± 25) 0.65
csaf_2_0_tests/6.3.11 20089 ns/iter (± 43) 29785 ns/iter (± 43) 0.67
csaf_2_1_tests/6.1.1 527323 ns/iter (± 1293) 681456 ns/iter (± 1952) 0.77
csaf_2_1_tests/6.1.2 197203 ns/iter (± 468) 263024 ns/iter (± 444) 0.75
csaf_2_1_tests/6.1.3 59362 ns/iter (± 45) 74148 ns/iter (± 167) 0.80
csaf_2_1_tests/6.1.4 106200 ns/iter (± 402) 132236 ns/iter (± 723) 0.80
csaf_2_1_tests/6.1.5 41740 ns/iter (± 34) 51264 ns/iter (± 49) 0.81
csaf_2_1_tests/6.1.6 99666 ns/iter (± 210) 121962 ns/iter (± 195) 0.82
csaf_2_1_tests/6.1.7 128500 ns/iter (± 457) 172736 ns/iter (± 376) 0.74
csaf_2_1_tests/6.1.8 35120 ns/iter (± 16) 43023 ns/iter (± 59) 0.82
csaf_2_1_tests/6.1.9 388848 ns/iter (± 437) 501989 ns/iter (± 1353) 0.77
csaf_2_1_tests/6.1.10 639023 ns/iter (± 1193) 810066 ns/iter (± 2527) 0.79
csaf_2_1_tests/6.1.11 52979 ns/iter (± 123) 67972 ns/iter (± 683) 0.78
csaf_2_1_tests/6.1.12 73265 ns/iter (± 196) 84097 ns/iter (± 91) 0.87
csaf_2_1_tests/6.1.13 156900 ns/iter (± 527) 206804 ns/iter (± 2258) 0.76
csaf_2_1_tests/6.1.14 170959 ns/iter (± 417) 224368 ns/iter (± 866) 0.76
csaf_2_1_tests/6.1.15 37264 ns/iter (± 25) 46368 ns/iter (± 58) 0.80
csaf_2_1_tests/6.1.16 121897 ns/iter (± 398) 169990 ns/iter (± 213) 0.72
csaf_2_1_tests/6.1.17 42010 ns/iter (± 156) 50943 ns/iter (± 86) 0.82
csaf_2_1_tests/6.1.18 46704 ns/iter (± 525) 61420 ns/iter (± 124) 0.76
csaf_2_1_tests/6.1.19 46629 ns/iter (± 75) 59569 ns/iter (± 1119) 0.78
csaf_2_1_tests/6.1.20 41884 ns/iter (± 28) 51341 ns/iter (± 210) 0.82
csaf_2_1_tests/6.1.21 135164 ns/iter (± 176) 181050 ns/iter (± 496) 0.75
csaf_2_1_tests/6.1.22 153406 ns/iter (± 466) 190261 ns/iter (± 934) 0.81
csaf_2_1_tests/6.1.23 45721 ns/iter (± 229) 56701 ns/iter (± 753) 0.81
csaf_2_1_tests/6.1.24 43078 ns/iter (± 53) 53878 ns/iter (± 73) 0.80
csaf_2_1_tests/6.1.25 141488 ns/iter (± 488) 182499 ns/iter (± 300) 0.78
csaf_2_1_tests/6.1.26 61141 ns/iter (± 263) 77404 ns/iter (± 240) 0.79
csaf_2_1_tests/6.1.27.1 41819 ns/iter (± 47) 50384 ns/iter (± 78) 0.83
csaf_2_1_tests/6.1.27.2 42214 ns/iter (± 25) 50918 ns/iter (± 264) 0.83
csaf_2_1_tests/6.1.27.3 43310 ns/iter (± 116) 51492 ns/iter (± 51) 0.84
csaf_2_1_tests/6.1.27.4 43176 ns/iter (± 65) 51688 ns/iter (± 163) 0.84
csaf_2_1_tests/6.1.27.5 40912 ns/iter (± 37) 52361 ns/iter (± 448) 0.78
csaf_2_1_tests/6.1.27.6 40561 ns/iter (± 48) 51444 ns/iter (± 73) 0.79
csaf_2_1_tests/6.1.27.7 40494 ns/iter (± 44) 48516 ns/iter (± 140) 0.83
csaf_2_1_tests/6.1.27.8 40351 ns/iter (± 158) 48428 ns/iter (± 48) 0.83
csaf_2_1_tests/6.1.27.9 57703 ns/iter (± 379) 69292 ns/iter (± 225) 0.83
csaf_2_1_tests/6.1.27.10 41870 ns/iter (± 250) 49376 ns/iter (± 32) 0.85
csaf_2_1_tests/6.1.27.11 43578 ns/iter (± 49) 51050 ns/iter (± 45) 0.85
csaf_2_1_tests/6.1.27.12 43181 ns/iter (± 251) 51231 ns/iter (± 98) 0.84
csaf_2_1_tests/6.1.27.13 34126 ns/iter (± 28) 41591 ns/iter (± 60) 0.82
csaf_2_1_tests/6.1.27.14 43436 ns/iter (± 352) 51419 ns/iter (± 67) 0.84
csaf_2_1_tests/6.1.27.15 43293 ns/iter (± 269) 51037 ns/iter (± 70) 0.85
csaf_2_1_tests/6.1.27.16 43262 ns/iter (± 54) 51383 ns/iter (± 171) 0.84
csaf_2_1_tests/6.1.27.17 46910 ns/iter (± 75) 55857 ns/iter (± 273) 0.84
csaf_2_1_tests/6.1.27.18 49171 ns/iter (± 32) 58729 ns/iter (± 199) 0.84
csaf_2_1_tests/6.1.27.19 47433 ns/iter (± 54) 55673 ns/iter (± 69) 0.85
csaf_2_1_tests/6.1.28 62489 ns/iter (± 45) 72103 ns/iter (± 91) 0.87
csaf_2_1_tests/6.1.29 39091 ns/iter (± 37) 49267 ns/iter (± 2973) 0.79
csaf_2_1_tests/6.1.30 118236 ns/iter (± 255) 165373 ns/iter (± 1605) 0.71
csaf_2_1_tests/6.1.31 137759 ns/iter (± 1134) 177894 ns/iter (± 389) 0.77
csaf_2_1_tests/6.1.32 40297 ns/iter (± 62) 52807 ns/iter (± 96) 0.76
csaf_2_1_tests/6.1.33 36283 ns/iter (± 42) 45334 ns/iter (± 107) 0.80
csaf_2_1_tests/6.1.34 48291 ns/iter (± 380) 60522 ns/iter (± 97) 0.80
csaf_2_1_tests/6.1.35 64205 ns/iter (± 125) 80283 ns/iter (± 174) 0.80
csaf_2_1_tests/6.1.36 36518 ns/iter (± 46) 46678 ns/iter (± 277) 0.78
csaf_2_1_tests/6.1.37 36259 ns/iter (± 26) 46943 ns/iter (± 51) 0.77
csaf_2_1_tests/6.1.38 39165 ns/iter (± 16) 49217 ns/iter (± 38) 0.80
csaf_2_1_tests/6.1.39 39714 ns/iter (± 258) 53968 ns/iter (± 344) 0.74
csaf_2_1_tests/6.1.40 38966 ns/iter (± 42) 49187 ns/iter (± 37) 0.79
csaf_2_1_tests/6.1.41 39481 ns/iter (± 234) 49691 ns/iter (± 71) 0.79
csaf_2_1_tests/6.1.42 165805 ns/iter (± 518) 217527 ns/iter (± 618) 0.76
csaf_2_1_tests/6.1.43 140015 ns/iter (± 149) 182106 ns/iter (± 519) 0.77
csaf_2_1_tests/6.1.44 140227 ns/iter (± 432) 183947 ns/iter (± 637) 0.76
csaf_2_1_tests/6.1.45 133702 ns/iter (± 947) 175119 ns/iter (± 277) 0.76
csaf_2_1_tests/6.1.46 213292 ns/iter (± 575) 280878 ns/iter (± 1004) 0.76
csaf_2_1_tests/6.1.47 336928 ns/iter (± 2118) 441489 ns/iter (± 1696) 0.76
csaf_2_1_tests/6.1.48 38201 ns/iter (± 63) 49011 ns/iter (± 58) 0.78
csaf_2_1_tests/6.1.49 38415 ns/iter (± 37) 49881 ns/iter (± 183) 0.77
csaf_2_1_tests/6.1.50 38580 ns/iter (± 164) 50127 ns/iter (± 62) 0.77
csaf_2_1_tests/6.1.51 136742 ns/iter (± 149) 179323 ns/iter (± 974) 0.76
csaf_2_1_tests/6.1.52 140849 ns/iter (± 693) 181811 ns/iter (± 325) 0.77
csaf_2_1_tests/6.1.53 44500 ns/iter (± 97) 58264 ns/iter (± 181) 0.76
csaf_2_1_tests/6.1.54 52290 ns/iter (± 87) 67708 ns/iter (± 78) 0.77
csaf_2_1_tests/6.1.55 53559 ns/iter (± 236) 67095 ns/iter (± 74) 0.80
csaf_2_1_tests/6.1.56 76848 ns/iter (± 85) 100687 ns/iter (± 250) 0.76
csaf_2_1_tests/6.1.57 108790 ns/iter (± 166) 133112 ns/iter (± 140) 0.82
csaf_2_1_tests/6.1.58 69684 ns/iter (± 150) 94969 ns/iter (± 202) 0.73
csaf_2_1_tests/6.1.59 41504 ns/iter (± 105) 52434 ns/iter (± 87) 0.79
csaf_2_1_tests/6.1.60.1 34865 ns/iter (± 22) 42433 ns/iter (± 109) 0.82
csaf_2_1_tests/6.1.60.2 35583 ns/iter (± 36) 42460 ns/iter (± 38) 0.84
csaf_2_1_tests/6.1.60.3 35587 ns/iter (± 190) 42454 ns/iter (± 56) 0.84
csaf_2_1_tests/6.1.61 140335 ns/iter (± 356) 186905 ns/iter (± 486) 0.75
csaf_2_1_tests/6.2.1 576181 ns/iter (± 1009) 727417 ns/iter (± 1385) 0.79
csaf_2_1_tests/6.2.2 58866 ns/iter (± 254) 73859 ns/iter (± 293) 0.80
csaf_2_1_tests/6.2.3 54680 ns/iter (± 72) 69768 ns/iter (± 184) 0.78
csaf_2_1_tests/6.2.4 46356 ns/iter (± 388) 59316 ns/iter (± 176) 0.78
csaf_2_1_tests/6.2.5 147003 ns/iter (± 320) 203031 ns/iter (± 484) 0.72
csaf_2_1_tests/6.2.6 151885 ns/iter (± 846) 206973 ns/iter (± 474) 0.73
csaf_2_1_tests/6.2.7 40623 ns/iter (± 74) 49798 ns/iter (± 125) 0.82
csaf_2_1_tests/6.2.8 134509 ns/iter (± 247) 178085 ns/iter (± 348) 0.76
csaf_2_1_tests/6.2.9 137103 ns/iter (± 171) 177503 ns/iter (± 360) 0.77
csaf_2_1_tests/6.2.11 492125 ns/iter (± 1560) 629807 ns/iter (± 5071) 0.78
csaf_2_1_tests/6.2.12 134324 ns/iter (± 584) 163893 ns/iter (± 308) 0.82
csaf_2_1_tests/6.2.13 2956857 ns/iter (± 10795) 3969013 ns/iter (± 37189) 0.74
csaf_2_1_tests/6.2.14 96870 ns/iter (± 107) 113981 ns/iter (± 162) 0.85
csaf_2_1_tests/6.2.15 80974 ns/iter (± 94) 94588 ns/iter (± 120) 0.86
csaf_2_1_tests/6.2.16 203909 ns/iter (± 380) 265196 ns/iter (± 2388) 0.77
csaf_2_1_tests/6.2.17 45673 ns/iter (± 122) 59286 ns/iter (± 95) 0.77
csaf_2_1_tests/6.2.18 112568 ns/iter (± 218) 151505 ns/iter (± 855) 0.74
csaf_2_1_tests/6.2.19 42450 ns/iter (± 64) 54277 ns/iter (± 79) 0.78
csaf_2_1_tests/6.2.20 7044654 ns/iter (± 41049) 9734120 ns/iter (± 62164) 0.72
csaf_2_1_tests/6.2.21 289188 ns/iter (± 781) 367463 ns/iter (± 1531) 0.79
csaf_2_1_tests/6.2.22 119934 ns/iter (± 215) 159930 ns/iter (± 328) 0.75
csaf_2_1_tests/6.2.23 56387 ns/iter (± 104) 74222 ns/iter (± 118) 0.76
csaf_2_1_tests/6.2.24 179397 ns/iter (± 386) 231896 ns/iter (± 257) 0.77
csaf_2_1_tests/6.2.25 58163 ns/iter (± 84) 75311 ns/iter (± 151) 0.77
csaf_2_1_tests/6.2.26 59920 ns/iter (± 156) 75407 ns/iter (± 57) 0.79
csaf_2_1_tests/6.2.27 44006 ns/iter (± 102) 56238 ns/iter (± 122) 0.78
csaf_2_1_tests/6.2.28 46820 ns/iter (± 111) 60728 ns/iter (± 269) 0.77
csaf_2_1_tests/6.2.29 46707 ns/iter (± 88) 60707 ns/iter (± 329) 0.77
csaf_2_1_tests/6.2.30 47373 ns/iter (± 62) 61774 ns/iter (± 234) 0.77
csaf_2_1_tests/6.2.31 160676 ns/iter (± 458) 215817 ns/iter (± 478) 0.74
csaf_2_1_tests/6.2.32 242229 ns/iter (± 188) 320944 ns/iter (± 54629) 0.75
csaf_2_1_tests/6.2.33 174838 ns/iter (± 257) 242762 ns/iter (± 2931) 0.72
csaf_2_1_tests/6.2.34 377813 ns/iter (± 3202) 489182 ns/iter (± 4211) 0.77
csaf_2_1_tests/6.2.35 334701 ns/iter (± 1117) 447948 ns/iter (± 6010) 0.75
csaf_2_1_tests/6.2.36 338229 ns/iter (± 1497) 450167 ns/iter (± 752) 0.75
csaf_2_1_tests/6.2.37 361070 ns/iter (± 2514) 472024 ns/iter (± 1560) 0.76
csaf_2_1_tests/6.2.38 71160 ns/iter (± 120) 91887 ns/iter (± 120) 0.77
csaf_2_1_tests/6.2.39.1 35594 ns/iter (± 34) 42471 ns/iter (± 42) 0.84
csaf_2_1_tests/6.2.39.2 45558 ns/iter (± 69) 54085 ns/iter (± 108) 0.84
csaf_2_1_tests/6.2.39.3 48274 ns/iter (± 182) 57194 ns/iter (± 77) 0.84
csaf_2_1_tests/6.2.39.4 35817 ns/iter (± 31) 42719 ns/iter (± 51) 0.84
csaf_2_1_tests/6.2.39.5 35552 ns/iter (± 315) 43033 ns/iter (± 63) 0.83
csaf_2_1_tests/6.2.40 47276 ns/iter (± 88) 60818 ns/iter (± 115) 0.78
csaf_2_1_tests/6.2.41 147626 ns/iter (± 205) 194614 ns/iter (± 358) 0.76
csaf_2_1_tests/6.2.42 46774 ns/iter (± 387) 61153 ns/iter (± 75) 0.76
csaf_2_1_tests/6.2.43 46894 ns/iter (± 268) 61287 ns/iter (± 284) 0.77
csaf_2_1_tests/6.2.44 47179 ns/iter (± 109) 64441 ns/iter (± 52) 0.73
csaf_2_1_tests/6.2.45 47289 ns/iter (± 56) 61294 ns/iter (± 941) 0.77
csaf_2_1_tests/6.2.46 47552 ns/iter (± 134) 61208 ns/iter (± 303) 0.78
csaf_2_1_tests/6.2.47 242093 ns/iter (± 980) 305139 ns/iter (± 828) 0.79
csaf_2_1_tests/6.2.48 122054 ns/iter (± 470) 161661 ns/iter (± 344) 0.75
csaf_2_1_tests/6.2.49 50738 ns/iter (± 68) 61959 ns/iter (± 56) 0.82
csaf_2_1_tests/6.2.50.1 35919 ns/iter (± 402) 42970 ns/iter (± 50) 0.84
csaf_2_1_tests/6.2.50.2 35964 ns/iter (± 233) 42980 ns/iter (± 39) 0.84
csaf_2_1_tests/6.2.50.3 35576 ns/iter (± 42) 43028 ns/iter (± 40) 0.83
csaf_2_1_tests/6.2.51 48358 ns/iter (± 37) 62308 ns/iter (± 48) 0.78
csaf_2_1_tests/6.2.52 147535 ns/iter (± 235) 197375 ns/iter (± 643) 0.75
csaf_2_1_tests/6.2.53 53658 ns/iter (± 164) 69144 ns/iter (± 128) 0.78
csaf_2_1_tests/6.2.54.1 36040 ns/iter (± 23) 43041 ns/iter (± 224) 0.84
csaf_2_1_tests/6.2.54.2 36051 ns/iter (± 34) 43049 ns/iter (± 49) 0.84
csaf_2_1_tests/6.2.54.3 36055 ns/iter (± 156) 43047 ns/iter (± 72) 0.84
csaf_2_1_tests/6.2.54.4 36060 ns/iter (± 142) 43029 ns/iter (± 73) 0.84
csaf_2_1_tests/6.3.1 35768 ns/iter (± 230) 43795 ns/iter (± 60) 0.82
csaf_2_1_tests/6.3.2 57604 ns/iter (± 123) 74697 ns/iter (± 414) 0.77
csaf_2_1_tests/6.3.3 36217 ns/iter (± 416) 44274 ns/iter (± 25) 0.82
csaf_2_1_tests/6.3.4 36306 ns/iter (± 32) 44404 ns/iter (± 52) 0.82
csaf_2_1_tests/6.3.5 137734 ns/iter (± 230) 179694 ns/iter (± 224) 0.77
csaf_2_1_tests/6.3.6 36036 ns/iter (± 32) 45408 ns/iter (± 51) 0.79
csaf_2_1_tests/6.3.7 36543 ns/iter (± 27) 45705 ns/iter (± 159) 0.80
csaf_2_1_tests/6.3.8 36760 ns/iter (± 42) 45851 ns/iter (± 191) 0.80
csaf_2_1_tests/6.3.9 131312 ns/iter (± 247) 172684 ns/iter (± 159) 0.76
csaf_2_1_tests/6.3.10 49077 ns/iter (± 38) 64062 ns/iter (± 132) 0.77
csaf_2_1_tests/6.3.11 49152 ns/iter (± 66) 63790 ns/iter (± 93) 0.77
csaf_2_1_tests/6.3.12 171588 ns/iter (± 220) 230098 ns/iter (± 2380) 0.75
csaf_2_1_tests/6.3.13 50195 ns/iter (± 418) 63775 ns/iter (± 208) 0.79
csaf_2_1_tests/6.3.14 97170 ns/iter (± 247) 123734 ns/iter (± 354) 0.79
csaf_2_1_tests/6.3.15 97088 ns/iter (± 220) 124066 ns/iter (± 160) 0.78
csaf_2_1_tests/6.3.16 50214 ns/iter (± 49) 64540 ns/iter (± 81) 0.78
csaf_2_1_tests/6.3.17 50407 ns/iter (± 56) 64720 ns/iter (± 113) 0.78
csaf_2_1_tests/6.3.18 58354 ns/iter (± 80) 80079 ns/iter (± 346) 0.73
csaf_2_1_tests/6.3.19.1 35580 ns/iter (± 110) 43006 ns/iter (± 29) 0.83
csaf_2_1_tests/6.3.19.2 35550 ns/iter (± 27) 43015 ns/iter (± 119) 0.83
csaf_2_1_tests/6.3.19.3 36069 ns/iter (± 36) 43007 ns/iter (± 56) 0.84
csaf_2_1_tests/6.3.19.4 36063 ns/iter (± 26) 43022 ns/iter (± 69) 0.84
csaf_2_1_tests/6.3.19.5 36054 ns/iter (± 20) 43035 ns/iter (± 55) 0.84
csaf_2_1_tests/6.3.20 59803 ns/iter (± 88) 77001 ns/iter (± 128) 0.78
csaf_2_1_tests/6.3.21.1 36080 ns/iter (± 61) 43061 ns/iter (± 37) 0.84
csaf_2_1_tests/6.3.21.2 36065 ns/iter (± 43) 43031 ns/iter (± 125) 0.84
csaf_2_1_tests/6.3.21.3 36053 ns/iter (± 19) 43047 ns/iter (± 40) 0.84
csaf_2_1_tests/6.3.21.4 36058 ns/iter (± 28) 43045 ns/iter (± 53) 0.84
csaf_2_1_tests/6.3.21.5 36055 ns/iter (± 453) 43027 ns/iter (± 36) 0.84
csaf_2_1_tests/6.3.21.6 35089 ns/iter (± 246) 43052 ns/iter (± 66) 0.82
csaf_2_1_tests/6.3.21.7 36050 ns/iter (± 30) 43062 ns/iter (± 64) 0.84
csaf_2_1_tests/6.3.21.8 36041 ns/iter (± 65) 43039 ns/iter (± 140) 0.84
csaf_2_1_tests/6.3.21.9 36051 ns/iter (± 40) 43047 ns/iter (± 82) 0.84
csaf_2_1_tests/6.3.22 51070 ns/iter (± 73) 64832 ns/iter (± 57) 0.79
full_validation/csaf_2_0_full_preset 5718221 ns/iter (± 14411) 8018911 ns/iter (± 74125) 0.71
full_validation/csaf_2_1_full_preset 39900531 ns/iter (± 133705) 57875089 ns/iter (± 177156) 0.69
parse_only/csaf_2_0 895181 ns/iter (± 1676) 1150550 ns/iter (± 1927) 0.78
parse_only/csaf_2_1 4569651 ns/iter (± 7069) 5768406 ns/iter (± 29267) 0.79
typed_parse/csaf_2_0 1541698 ns/iter (± 4572) 1986284 ns/iter (± 5943) 0.78
typed_parse/csaf_2_1 7441811 ns/iter (± 23645) 9432153 ns/iter (± 84832) 0.79

This comment was automatically generated by workflow using github-action-benchmark.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 19 out of 20 changed files in this pull request and generated 2 comments.

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

csaf-rs/src/validations/test_6_3_16.rs:218

  • Defining the validator does not make test 6.3.16 reachable through the normal validation API: csaf2_1/validation.rs:250 still maps "6.3.16" to None. Consequently, callers requesting this newly added test never execute test_6_3_16_grammar_check. Wire ValidatorForTest6_3_16.validate(self) into that dispatch when enabling the test.
crate::test_validation::impl_validator!(csaf2_1, ValidatorForTest6_3_16, test_6_3_16_grammar_check);

Comment on lines +51 to +60
let (word1, start, _) = &window[0];
let (word2, _, end) = &window[1];
let key = format!("{} {}", word1.to_lowercase(), word2.to_lowercase());
if known_bad_sequences.contains(key.as_str()) {
findings.push(TextCheckFinding {
fragment: format!("{word1} {word2}"),
start: *start,
end: *end,
replacement: None,
});

@peinjoh peinjoh Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Valid, on second though grammar checking tokenization will only be used by the mock, so this can be simplified

/// - Only [`TextCheckKind::Grammar`] findings are produced; spell checking is not implemented.
/// - Strings are tokenized, see [`tokenize_words`].
/// - Consecutive word pairs are matched against a built-in list of known incorrect sequences.
/// - When a bad sequence is detected, the first word of the pair is reported as the problematic fragment.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants