iirs 1.0.2

Inverted repeats finder
Documentation
# Clean trash files
clean:
  rm -rf iirs.out
  rm -f rand.fasta
  rm -f IUPACpal.out
  rm -f perf.data*
  rm -rf tmp

clippy *args:
  cargo clippy --all-targets --all-features {{args}} -- \
  -W clippy::nursery -W clippy::pedantic \
  -A clippy::must_use_candidate \
  -A clippy::manual_range_contains \
  -A clippy::cast_sign_loss \
  -A clippy::missing_errors_doc \
  -A clippy::inline_always \
  # -A clippy::cast_possible_truncation \
  # -A clippy::cast_possible_wrap \
  # -A clippy::cast_precision_loss \

# Test input.fasta - testseq
test:
  cargo run --release -- \
    -s testseq -m 3 -g 5

# Test input.fasta - banana
testbanana:
  cargo run --release -- \
    -s banana -m 3 -g 5

# Test input.fasta - star
teststar:
  cargo run --release -- \
    -s tstar -m 2 -g 5 -F csv

# Test truncation edge case
testedge:
  cargo run --release -- \
    -f tests/test_data/truncation_edge_case.fasta -m 8 -M 100 -g 10 -x 6

# Test ALL_SEQUENCES with --output-file
testallseq:
  mkdir tmp
  cargo run --release -- \
    -s ALL_SEQUENCES -m 3 -g 5 -o "tmp"

# Test ALL_SEQUENCES with --output-file when only one sequence is present
testallseqone:
  cargo run --release -- \
    -f tests/test_data/test3.fasta -s ALL_SEQUENCES -m 3 -g 5 -o "tmp"

# Test alys
testalys *features:
  cargo run --release --features '{{ features }}' -- \
    -f tests/test_data/alys.fna -s NZ_CP059564.1 -m 3 -M 100 -g 20 -q

# Perf test for alys (sequential)
testalys-perf *features:
  cargo build --profile=release-with-debug --features '{{ features }}'
  sudo perf record -g "target/release-with-debug/iirs" -f tests/test_data/alys.fna -s NZ_CP059564.1 -m 3 -M 100 -g 20
  sudo perf report

# Test full N (stress test the algorithm and not the writing)
testn *features:
  cargo run --release --features '{{ features }}' -- \
    -f tests/test_data/200000N.fasta -m 2 -M 100 -g 20 -x 1

BENCH_RUN := "cargo run --release --quiet --manifest-path 'bench/Cargo.toml'"

# Build with features
build *features:
  cargo build --release --features '{{ features }}'

# Write results.csv
compare *features: (build features)
  {{ BENCH_RUN }} --bin logs -- --write

# Test that the results of the rust / cpp binaries are the same
compare-correct *features: (build features)
  {{ BENCH_RUN }} --bin logs -- --verbose --random-bench 1000 20
  {{ BENCH_RUN }} --bin logs -- --verbose --random-bench 5000 10
  {{ BENCH_RUN }} --bin logs -- --verbose --random-bench 20000 5

# Test how the results of the rust / cpp binaries perform
compare-performance *features: (build features)
  {{ BENCH_RUN }} --bin logs -- --verbose --random-bench 1000000 1

# Does not play nice with parallel
# Make a heatmap
heatmap *features: (build features)
  {{ BENCH_RUN }} --bin logs -- --write
  python3 bench/heatmaps.py

# Bench against alys
bench *features: (build features)
  {{ BENCH_RUN }} --bin bench