Skip to content

Commit 072c2e4

Browse files
Fix translation mistake in SA construction
1 parent 3f80beb commit 072c2e4

File tree

6 files changed

+37
-27
lines changed

6 files changed

+37
-27
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
/target
2+
/testdata
23
/crosscheck
34
**/*.rs.bk

original/divsufsort_private.h

+18-6
Original file line numberDiff line numberDiff line change
@@ -156,17 +156,29 @@ extern FILE *CROSSCHECK_FILE;
156156
#define SA_dump(SA, label) \
157157
do { \
158158
fprintf(CROSSCHECK_FILE, ":: %s\n", label); \
159-
fprintf(CROSSCHECK_FILE, "SA = ["); \
160159
for (int z = 0; z < n; z++) { \
161-
if (z == n - 1) { \
162-
fprintf(CROSSCHECK_FILE, "%d", SA[z]); \
163-
} else { \
164-
fprintf(CROSSCHECK_FILE, "%d, ", SA[z]); \
160+
fprintf(CROSSCHECK_FILE, "%d=%d ", z, SA[z]); \
161+
if ((z+1)%25==0) { \
162+
fprintf(CROSSCHECK_FILE, "\n"); \
165163
} \
166164
} \
167-
fprintf(CROSSCHECK_FILE, "]\n"); \
165+
fprintf(CROSSCHECK_FILE, "\n"); \
168166
} while (0);
169167

168+
// #define SA_dump(SA, label) \
169+
// do { \
170+
// fprintf(CROSSCHECK_FILE, ":: %s\n", label); \
171+
// fprintf(CROSSCHECK_FILE, "SA = ["); \
172+
// for (int z = 0; z < n; z++) { \
173+
// if (z == n - 1) { \
174+
// fprintf(CROSSCHECK_FILE, "%d", SA[z]); \
175+
// } else { \
176+
// fprintf(CROSSCHECK_FILE, "%d, ", SA[z]); \
177+
// } \
178+
// } \
179+
// fprintf(CROSSCHECK_FILE, "]\n"); \
180+
// } while (0);
181+
170182
#define A_dump(A, label) \
171183
do { \
172184
fprintf(CROSSCHECK_FILE, ":: %s\n", label); \

src/crosscheck.rs

+17-4
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,18 @@ pub fn flush() {
3232
pub fn SA_dump(SA: &SuffixArray, label: &str) {
3333
#[cfg(debug_assertions)]
3434
{
35-
crosscheck!(":: {}", label);
36-
crosscheck!("SA = {:?}", SA.0);
35+
use std::io::Write;
36+
let mut f = crate::crosscheck::CROSSCHECK_FILE.lock().unwrap();
37+
38+
writeln!(f, ":: {}", label).unwrap();
39+
// crosscheck!("SA = {:?}", SA.0);
40+
for i in 0..SA.0.len() {
41+
write!(f, "{}={} ", i, SA.0[i]).unwrap();
42+
if (i + 1) % 25 == 0 {
43+
writeln!(f, "").unwrap();
44+
}
45+
}
46+
writeln!(f, "").unwrap();
3747
}
3848
}
3949

@@ -48,10 +58,13 @@ pub fn A_dump(A: &ABucket, label: &str) {
4858
pub fn BSTAR_dump(B: &mut BMixBucket, label: &str) {
4959
#[cfg(debug_assertions)]
5060
{
51-
crosscheck!("{} B* dump:", label);
61+
use std::io::Write;
62+
let mut f = crate::crosscheck::CROSSCHECK_FILE.lock().unwrap();
63+
64+
writeln!(f, "{} B* dump:", label).unwrap();
5265
for ii in 0..(ALPHABET_SIZE as Idx) {
5366
for jj in 0..(ALPHABET_SIZE as Idx) {
54-
crosscheck!("{} B*[{},{}]={}", label, ii, jj, B.bstar()[(ii, jj)]);
67+
writeln!(f, "{} B*[{},{}]={}", label, ii, jj, B.bstar()[(ii, jj)]).unwrap();
5568
}
5669
}
5770
}

src/divsufsort.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ fn construct_SA(T: &Text, SA: &mut SuffixArray, mut A: ABucket, mut B: BMixBucke
474474
// Construct the suffix array by using the sorted order of type B suffixes
475475
c2 = T.get(n - 1);
476476
k = A[c2];
477-
SA[k] = if T.get(n - 1) < c2 { !(n - 1) } else { n - 1 };
477+
SA[k] = if T.get(n - 2) < c2 { !(n - 1) } else { n - 1 };
478478
k += 1;
479479
// Scan the suffix array from left to right
480480
{

testdata/input.txt

-7
This file was deleted.

testdata/input2.txt

-9
This file was deleted.

0 commit comments

Comments
 (0)