Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
147 commits
Select commit Hold shift + click to select a range
87c1465
Chore: Configure 2-space JSON indent
ashvardanian Nov 29, 2025
c7a3012
Docs: Inconsistent UTF-8 fold explanations
ashvardanian Nov 29, 2025
6caebd6
Merge: v4.4 release
ashvardanian Nov 29, 2025
2c3d35d
Make: Ignore UV lock
ashvardanian Nov 29, 2025
20ac49a
Fix: Require continuous substitution matrices
ashvardanian Nov 29, 2025
44412bf
Fix: Gracefully handle Unicode spec download issues
ashvardanian Nov 29, 2025
44b6279
Docs: Exaplain convoluted control-flow
ashvardanian Nov 29, 2025
bbea84f
Improve: Boundary condition fold tests
ashvardanian Nov 29, 2025
20dbef3
Fix: Folding "中ABC" on Ice Lake
ashvardanian Nov 29, 2025
7edba6f
Improve: Faster optional UTF-8 validation
ashvardanian Nov 29, 2025
62ad6f7
Improve: Optional `start`/`end` for folded find
ashvardanian Nov 29, 2025
e5227ad
Improve: Faster serial baselines for ASCII needles
ashvardanian Nov 29, 2025
d8aac4a
Improve: Avoid UTF-8 checks in case-fold
ashvardanian Nov 30, 2025
b13aef4
Improve: Faster LUT on Ice Lake and Zen4+
ashvardanian Nov 30, 2025
4d30daa
Add: Draft case-insensitive search on Ice Lake
ashvardanian Nov 30, 2025
3ca6695
Add: Draft TR29 Unicode word-bound iterators
ashvardanian Nov 30, 2025
f642fa9
Improve: Cleaner Raita kernels - unstable
ashvardanian Nov 30, 2025
c8b6ae1
Docs: Missing table info
ashvardanian Nov 30, 2025
2db5e54
Improve: Use ring-buffers for O(1) prefix hashes
ashvardanian Dec 1, 2025
024f677
Improve: Avoid modulo division
ashvardanian Dec 1, 2025
ea258c1
Add: Branchless `.empty()` for small strings
ashvardanian Dec 1, 2025
be9e2d7
Improve: Length-returning small-string API
ashvardanian Dec 1, 2025
83ca417
Docs: Small-string safety comments
ashvardanian Dec 1, 2025
b325b1c
Improve: Self-equality & overflow protection
ashvardanian Dec 1, 2025
025b36d
Improve: Vietnamese fastt case-folding path
ashvardanian Dec 2, 2025
c1c0305
Add: Latin-1 case-folded search
ashvardanian Dec 3, 2025
fd89a88
Improve: Case-insensitive search for Ry, Vi, El, Hy (Am)
ashvardanian Dec 3, 2025
726bbbd
Fix: Case-insensitive search passes test
ashvardanian Dec 3, 2025
c19f11c
Improve: Unnecassary checks in ci-find
ashvardanian Dec 3, 2025
89d5530
Chore: Word-bounds code formatting
ashvardanian Dec 3, 2025
ddc8b7a
Improve: Cleaner case-insensitive fuzzing
ashvardanian Dec 3, 2025
9d5b9e3
Fix: Passing case-insensitive tests
ashvardanian Dec 3, 2025
917bc03
Improve: Test more scripts
ashvardanian Dec 3, 2025
094eba8
Improve: Reuse needle anomalies logic
ashvardanian Dec 3, 2025
3d6b244
Improve: 40% smalles fast-path selector state
ashvardanian Dec 3, 2025
01f493b
Docs: Explore more scripts with examples
ashvardanian Dec 3, 2025
473d9db
Improve: Log running tests
ashvardanian Dec 3, 2025
217055e
Docs: Missing API coverage
ashvardanian Dec 3, 2025
29c5732
Fix: Named args in `hmac_sha256`
ashvardanian Dec 3, 2025
718f9c1
Fix: Missing `Strs.tape` accessors
ashvardanian Dec 3, 2025
8614658
Fix: Stale `pending_idx` in fast ASCII iterator
ashvardanian Dec 3, 2025
e5c477d
Add: Hash-free search kernel for small needles
ashvardanian Dec 3, 2025
8b136f3
Add: ASCII fast paths for small inputs
ashvardanian Dec 3, 2025
b836970
Add: Fast-path Ice Lake case-insensitive substring search for needles…
ashvardanian Dec 4, 2025
a0507ee
Add: `sz_utf8_case_agnostic` API
ashvardanian Dec 4, 2025
4c6cf68
Improve: Cleaner Ice Lake kernels
ashvardanian Dec 4, 2025
32b3df4
Fix: Stale folded rune state
ashvardanian Dec 5, 2025
a6d75b9
Improve: New safety profiles for Unicode scripts
ashvardanian Dec 5, 2025
c811f3b
Chore: Consistent variable naming
ashvardanian Dec 5, 2025
b56ee54
Improve: Check "safe windows" even for small needles
ashvardanian Dec 5, 2025
a534597
Improve: Uniform logic for case-insensitive search
ashvardanian Dec 6, 2025
e751fbc
Improve: Uniform function naming
ashvardanian Dec 6, 2025
f30fb20
Fix: Using enum masks for character safety profiles
ashvardanian Dec 6, 2025
6aa2893
Fix: Mask offsets and Latin-A/B extensions
ashvardanian Dec 6, 2025
d96cee7
Add: Seeding & iterations multipliers for fuzzing
ashvardanian Dec 6, 2025
351236c
Fix: Remove Ligature detection from the hot path
ashvardanian Dec 6, 2025
659c2c7
Fix: Serial fallback for archaic Polytonic Greek chars
ashvardanian Dec 6, 2025
b4e269e
Improve: Print env settings at start
ashvardanian Dec 6, 2025
fb09351
Fix: Special Cyrillic folding cases
ashvardanian Dec 6, 2025
0cfd2fd
Add: Serial verification for Ice Lake search
ashvardanian Dec 6, 2025
5e0de6c
Fix: Multiplication/division signs on Vietnamese path
ashvardanian Dec 6, 2025
1588a2d
Improve: Default safe-window selection
ashvardanian Dec 6, 2025
b66ebd4
Fix: Steping logic for safe slices under 16 bytes
ashvardanian Dec 6, 2025
afa24f7
Improve: New safety profiles
ashvardanian Dec 7, 2025
8974271
Fix: 'k' and C6 policy for Vietnamese
ashvardanian Dec 7, 2025
e0f8e22
Chore: Remove exploration notebooks from history
ashvardanian Dec 7, 2025
b313a8c
Fix: Match new rune safety profiles
ashvardanian Dec 7, 2025
c34f94c
Chore: Deprecate old Ice Lake case-insensitive kernels
ashvardanian Dec 8, 2025
9ce5a6f
Improve: Simpler design for Ice-Lake case-insensitive search
ashvardanian Dec 8, 2025
24e43aa
Fix: Mostlly passing tests
ashvardanian Dec 8, 2025
a9a7d85
Improve: Test coverage for case-insensitive search
ashvardanian Dec 8, 2025
2226e25
Docs: Policy for historical S sign 'ſ' (U+017F)
ashvardanian Dec 8, 2025
524ec7b
Fix: 's' removed from the ASCII path
ashvardanian Dec 8, 2025
aabb45e
Improve: Test case-insensitive search against fold+find
ashvardanian Dec 8, 2025
0ab964e
Fix: Classifying Armenian as bicameral
ashvardanian Dec 8, 2025
74060ed
Improve: Faster test suite
ashvardanian Dec 8, 2025
65c6c98
Fix: Detecting bicameral chars on Ice Lake
ashvardanian Dec 8, 2025
e3a6bb6
Improve: Propagate metadata between queries
ashvardanian Dec 8, 2025
8b2385d
Improve: Case-insensitive test coverage
ashvardanian Dec 8, 2025
5a1ba33
Fix: Cleaner script-specific window tracking
ashvardanian Dec 8, 2025
55c7c92
Improve: Share abstractions for match validation
ashvardanian Dec 9, 2025
1e050ad
Fix: Pass stress-tests under 10x multiple
ashvardanian Dec 9, 2025
d9e2409
Improve: Deduplicate body/tail kernel logic
ashvardanian Dec 9, 2025
b8e106f
Add: New Cyrillic search kernels
ashvardanian Dec 9, 2025
f087711
Add: Central European block
ashvardanian Dec 9, 2025
984ace2
Add: Armenian & Greek paths
ashvardanian Dec 9, 2025
8ec7de7
Add: Vietnamese fast path
ashvardanian Dec 9, 2025
39516b3
Fix: Handling Micro sign and Armenian ligatures
ashvardanian Dec 9, 2025
bda1321
Fix: Folding Greek final sigma in AVX-512
ashvardanian Dec 9, 2025
fa30741
Fix: Match new reusable needle ABI in Rust & Python
ashvardanian Dec 9, 2025
0c8626d
Add: Reusable case-insensitive finder for Rust
ashvardanian Dec 9, 2025
ad036ef
Fix: Check for incomplete set of 3-byte chars in case_fold_ice
ashvardanian Dec 9, 2025
4dcbe62
Improve: Fuzzing case-folding equivalene
ashvardanian Dec 9, 2025
68cd557
Fix: Case-folding around Glagolitic E2 ranges
ashvardanian Dec 9, 2025
4ee616c
Improve: Case folding variables naming
ashvardanian Dec 9, 2025
de6ea0d
Chore: Unit tests for case-insensitive search
ashvardanian Dec 10, 2025
9ad155e
Improve: Better fuzzing for substring search
ashvardanian Dec 10, 2025
d327cf8
Improve: Detect more danger zones
ashvardanian Dec 10, 2025
d9ceb8c
Improve: New probe refinement & tail verification
ashvardanian Dec 10, 2025
368bf5d
Docs: Describe problematic chars
ashvardanian Dec 10, 2025
7dd6209
Fix: Compile-time Ice-Lake dispatch
ashvardanian Dec 10, 2025
29e9cd2
Improve: New regression tests for ligatures
ashvardanian Dec 10, 2025
d927ea7
Fix: Serial match verification mid-character
ashvardanian Dec 10, 2025
6eee0a9
Improve: Tighten safety profiles
ashvardanian Dec 10, 2025
66cade8
Fix: Ban "ss" prefix/suffix for Western European path
ashvardanian Dec 11, 2025
2a8a9b6
Fix: Dispatch Central European path
ashvardanian Dec 12, 2025
900033e
Fix: Eastern European case folding
ashvardanian Dec 12, 2025
d7e4c58
Chore: Spelling mistakes
ashvardanian Dec 12, 2025
ac31704
Improve: Reproduce Ice Lake bugs
ashvardanian Dec 12, 2025
be52b86
Fix: Danger zone length
ashvardanian Dec 13, 2025
5948374
Fix: Modifiers exclusion from case-less chars
ashvardanian Dec 13, 2025
409a44d
Fix: Vietnamese old-even fold in ZMM
ashvardanian Dec 13, 2025
be360c7
Fix: Mid-rune serial matches
ashvardanian Dec 13, 2025
cbcd685
Fix: Missing danger marker in Western kernel
ashvardanian Dec 13, 2025
45e81f7
Fix: Outdated case-insensitive metadata in Rust
ashvardanian Dec 13, 2025
e67f3f7
Fix: Shrink step proportional to danger zones
ashvardanian Dec 13, 2025
46b7135
Improve: Test more problematic chars
ashvardanian Dec 13, 2025
916b23e
Fix: Missing `sized_match_t` constructor
ashvardanian Dec 13, 2025
09ca314
Fix: Micro case-fold in Georgian path
ashvardanian Dec 13, 2025
13bc864
Fix: Handle failed downloads of UCD specs
ashvardanian Dec 13, 2025
7e3dd35
Fix: `NULL` missing - use `SZ_NULL`
ashvardanian Dec 13, 2025
bde1fad
Fix: Generalize static asserts to 32-bit archs
ashvardanian Dec 13, 2025
dce1773
Improve: Higher-efficiency Ice Lake kernels
ashvardanian Dec 13, 2025
7847671
Make: Bump Rust & Go CI
ashvardanian Dec 13, 2025
a315ee8
Improve: VPSHUFB & VPTERNLOG for search
ashvardanian Dec 13, 2025
a8e3f66
Improve: Flatten danger zone checks
ashvardanian Dec 13, 2025
999ec64
Make: Install `bash` on Alpine for Rust toolchain
ashvardanian Dec 13, 2025
45e3c92
Add: Reusable case-insensitive needles with metadata for Rust & C++
ashvardanian Dec 13, 2025
936fc22
Improve: Separate "alarm" functions for danger zones
ashvardanian Dec 13, 2025
22dc88c
Improve: Greek alarm with less register pressure
ashvardanian Dec 13, 2025
cc2b5a6
Chore: Variable naming
ashvardanian Dec 14, 2025
fe94e1c
Improve: Western European register pressure
ashvardanian Dec 14, 2025
68287fc
Improve: Deduplicate benchmark input tokens
ashvardanian Dec 14, 2025
e6626a8
Improve: Faster ASCII kernels for ≤ 3 probes
ashvardanian Dec 14, 2025
1239bea
Improve: Generalize case-invariant logic
ashvardanian Dec 14, 2025
8a3f25d
Docs: Arm NEON case-folding plans
ashvardanian Dec 14, 2025
85af5b5
Make: Install `curl` on Alpine for Rust kit
ashvardanian Dec 14, 2025
7fff78b
Fix: Rust UTF-8 iterator doctest
ashvardanian Dec 14, 2025
908d7f9
Fix: Shaddowing template param on NVCC
ashvardanian Dec 14, 2025
9b6911a
Fix: Missing `span::operator==0` for new NVCC benchamrks
ashvardanian Dec 14, 2025
48a8ccb
Improve: Prefetch on massive inputs
ashvardanian Dec 14, 2025
b69c49d
Docs: UTF-8 Fold & Search with PErf numbers
ashvardanian Dec 14, 2025
93bc9c4
Add: Case-folding for JavaScript
ashvardanian Dec 14, 2025
2e310d6
Add: Case-folding for GoLang
ashvardanian Dec 14, 2025
f621419
Add: Case-folding for Swift
ashvardanian Dec 14, 2025
b9aa985
Docs: Badges, CLI, & inconsistencies
ashvardanian Dec 14, 2025
fb20b6c
Fix: Pointer cast in GoLang
ashvardanian Dec 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 15 additions & 24 deletions .github/workflows/prerelease.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ jobs:
uses: actions/setup-go@v6
with:
go-version: ">=1.24"
cache: false
- name: Test Go binding
working-directory: golang
env:
Expand Down Expand Up @@ -169,11 +170,8 @@ jobs:
run: npm install && npm test

# Rust
- name: Test Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable

test_ubuntu_clang:
name: Ubuntu (Clang 16) - ${{ matrix.os }}
Expand Down Expand Up @@ -240,9 +238,10 @@ jobs:
cmake -B build_shared -DCMAKE_BUILD_TYPE=RelWithDebInfo -DSTRINGZILLA_BUILD_SHARED=1
cmake --build build_shared --target stringzilla_shared --config RelWithDebInfo
- name: Set up Go
uses: actions/setup-go@v5
uses: actions/setup-go@v6
with:
go-version: ">=1.24"
cache: false
- name: Test Go binding
working-directory: golang
env:
Expand Down Expand Up @@ -283,11 +282,8 @@ jobs:
run: python -X faulthandler -m pytest scripts/test_stringzilla.py -s -vv --maxfail=1 --full-trace

# Rust
- name: Test Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable

# Swift
# Fails due to: https://github.com/swift-actions/setup-swift/issues/591
Expand Down Expand Up @@ -517,7 +513,7 @@ jobs:
target_arch: x86-64
target: x86_64-linux-gnu
target_processor: amd64

env:
CC: clang-16
CXX: clang++-16
Expand Down Expand Up @@ -550,7 +546,7 @@ jobs:
sudo ./llvm.sh 16

- name: Build C/C++ for ${{ matrix.target_arch }}
run: |
run: |
# Configure and build the project
cmake -B build_artifacts \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
Expand Down Expand Up @@ -647,11 +643,8 @@ jobs:
run: swift test

# Rust
- name: Test Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable

test_windows:
name: Windows - ${{ matrix.os }}
Expand Down Expand Up @@ -734,9 +727,10 @@ jobs:
image: alpine:latest
options: --privileged # If needed for certain Docker operations
steps:
# bash and curl are required by dtolnay/rust-toolchain
- name: Install Git for checkout
run: |
apk add --no-cache git openssh ca-certificates
apk add --no-cache git openssh ca-certificates bash curl
git --version
- name: Log Alpine and Git versions
run: |
Expand Down Expand Up @@ -782,11 +776,8 @@ jobs:
run: pytest scripts/test_stringzilla.py -s -x

# Rust
- name: Test Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable

build_wheels:
name: Build Python ${{ matrix.python-version }} for ${{ matrix.os }}
Expand Down
6 changes: 2 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -534,10 +534,8 @@ jobs:
- name: Hide submodule Crates
run: |
mv fork_union/Cargo.toml fork_union/Cargo.toml.bak
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- uses: katyo/publish-crates@v2
with:
registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}
Expand Down
17 changes: 6 additions & 11 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,17 +1,11 @@
# Primary build folders
build/
build_debug/
build_release/
build_relwithdebinfo/
build_go/
build_golang/
build_test/
build_artifacts*
# Primary root-level build folders
/build*/

# Yes, everyone loves keeping this file in the history.
# But with a very minimalistic binding and just a couple of dependencies
# But with a very minimalistic binding and just a couple of dependencies
# it brings 7000 lines of text polluting the entire repo.
package-lock.json
uv.lock

# Temporary files
.DS_Store
Expand All @@ -34,6 +28,7 @@ CMakeFiles
node_modules/
.vs/
*.tar.gz
.tmp/

# Recommended datasets
utf8.txt
Expand All @@ -49,4 +44,4 @@ acgt_1m.txt

# StringZilla-specific log files
/failed_sz_*
/.cache/
/.cache/
3 changes: 2 additions & 1 deletion .vscode/extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
"ms-vscode.cmake-tools",
"ms-python.python",
"ms-python.black-formatter",
"esbenp.prettier-vscode",
"yzhang.markdown-all-in-one",
"aaron-bond.better-comments",
"cheshirekow.cmake-format"
]
}
}
12 changes: 9 additions & 3 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -203,16 +203,22 @@
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true,
"args": ["./leipzig1M.txt"]
"args": [
"./leipzig1M.txt"
]
},
{
"name": "Current PyTest File",
"type": "debugpy",
"request": "launch",
"module": "pytest",
"args": ["${file}", "-s", "-x"],
"args": [
"${file}",
"-s",
"-x"
],
"console": "integratedTerminal",
"justMyCode": false
}
]
}
}
52 changes: 33 additions & 19 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,16 @@
"editor.insertSpaces": true,
"editor.tabSize": 2
},
"[jsonc]": {
"editor.defaultFormatter": "vscode.json-language-features",
"editor.insertSpaces": true,
"editor.tabSize": 2
},
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.insertSpaces": true,
"editor.tabSize": 4
},
"[typescript]": {
"editor.defaultFormatter": "vscode.typescript-language-features",
"editor.insertSpaces": true,
Expand Down Expand Up @@ -261,24 +271,10 @@
"editor.detectIndentation": false,
"editor.formatOnSave": true,
"editor.insertSpaces": true,
"editor.rulers": [120],
"editor.rulers": [
120
],
"editor.tabSize": 4,
// Rust analyzer memory optimizations
"rust-analyzer.checkOnSave.enable": true,
"rust-analyzer.checkOnSave.allTargets": false,
"rust-analyzer.cargo.allFeatures": false,
"rust-analyzer.cargo.buildScripts.enable": false,
"rust-analyzer.procMacro.enable": false,
"rust-analyzer.diagnostics.enable": true,
"rust-analyzer.diagnostics.experimental.enable": false,
"rust-analyzer.completion.autoimport.enable": false,
"rust-analyzer.lens.enable": false,
"rust-analyzer.inlayHints.enable": false,
"rust-analyzer.hover.actions.enable": false,
"rust-analyzer.assist.emitMustUse": false,
"rust-analyzer.cachePriming.enable": false,
"rust-analyzer.files.watcher": "client",
"rust-analyzer.updates.channel": "stable",
"files.associations": {
"__availability": "cpp",
"__bit_reference": "cpp",
Expand Down Expand Up @@ -395,6 +391,7 @@
"types.h": "c",
"unordered_map": "cpp",
"unordered_set": "cpp",
"utf8_unpack.h": "c",
"utility": "cpp",
"variant": "cpp",
"vector": "cpp",
Expand All @@ -414,5 +411,22 @@
"xtr1common": "cpp",
"xtree": "cpp",
"xutility": "cpp"
}
}
},
"notebook.formatOnSave.enabled": true,
"rust-analyzer.assist.emitMustUse": false,
"rust-analyzer.cachePriming.enable": false,
"rust-analyzer.cargo.allFeatures": false,
"rust-analyzer.cargo.buildScripts.enable": false,
"rust-analyzer.checkOnSave.allTargets": false,
// Rust analyzer memory optimizations
"rust-analyzer.checkOnSave.enable": true,
"rust-analyzer.completion.autoimport.enable": false,
"rust-analyzer.diagnostics.enable": true,
"rust-analyzer.diagnostics.experimental.enable": false,
"rust-analyzer.files.watcher": "client",
"rust-analyzer.hover.actions.enable": false,
"rust-analyzer.inlayHints.enable": false,
"rust-analyzer.lens.enable": false,
"rust-analyzer.procMacro.enable": false,
"rust-analyzer.updates.channel": "stable"
}
30 changes: 30 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,36 @@ build_debug/stringzilla_test_cpp20_serial # Arm variant compiled without Neo

Note, that Address Sanitizers have a hard time with masked load and store instructions in AVX-512 and SVE.

The C++ and Python test suites support environment variables for reproducible stress testing and CI fuzzing:

| Variable | Description | Default |
| :-------------------- | :-------------------------------------------------- | ------: |
| `SZ_TESTS_SEED` | Seed for the random number generator | Random |
| `SZ_TESTS_MULTIPLIER` | Scales all baseline iteration counts proportionally | 1.0 |

Each test has its own baseline iteration count tuned for its operation complexity.
The multiplier scales all baselines proportionally - use `0.1` for quick smoke tests or `10` for thorough stress testing.

```bash
# Run with a specific seed for reproducibility
SZ_TESTS_SEED=42 build_debug/stringzilla_test_cpp20

# Quick smoke test (10% of normal iterations)
SZ_TESTS_MULTIPLIER=0.1 build_debug/stringzilla_test_cpp20

# Thorough CI stress test (10x normal iterations)
SZ_TESTS_MULTIPLIER=10 build_debug/stringzilla_test_cpp20

# Combine both for CI fuzzing
SZ_TESTS_SEED=12345 SZ_TESTS_MULTIPLIER=5 build_debug/stringzilla_test_cpp20

# Python tests also respect SZ_TESTS_SEED
SZ_TESTS_SEED=42 pytest scripts/test_stringzilla.py -v
```

When a test fails, note the seed from the output and re-run with that exact seed to reproduce the issue.
This is particularly useful for debugging SIMD edge cases that only manifest with specific input patterns.

To use CppCheck for static analysis make sure to export the compilation commands.
Overall, CppCheck and Clang-Tidy are extremely noisy and not suitable for CI, but may be useful for local development.

Expand Down
Loading
Loading