Skip to content

Commit 9018f3b

Browse files
committed
test: add tests for RANDOM ROWID
The test suite checks whether RANDOM ROWID keywords work and its input is validated in the parser.
1 parent 60170b7 commit 9018f3b

2 files changed

Lines changed: 53 additions & 0 deletions

File tree

test/rust_suite/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
mod random_rowid;
2+
13
#[cfg(test)]
24
mod tests {
35
use rusqlite::Connection;
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#[cfg(test)]
2+
mod tests {
3+
use rusqlite::Connection;
4+
5+
#[test]
6+
fn test_random_rowid_distribution() {
7+
let conn = Connection::open_in_memory().unwrap();
8+
9+
conn.execute("CREATE TABLE t(id)", ()).unwrap();
10+
conn.execute("CREATE TABLE tr(id) RANDOM ROWID", ())
11+
.unwrap();
12+
for _ in 1..=1024 {
13+
conn.execute("INSERT INTO t(id) VALUES (42)", ()).unwrap();
14+
conn.execute("INSERT INTO tr(id) VALUES (42)", ()).unwrap();
15+
}
16+
17+
let seq_rowids: Vec<i64> = conn
18+
.prepare("SELECT rowid FROM t")
19+
.unwrap()
20+
.query_map([], |row| Ok(row.get_unwrap(0)))
21+
.unwrap()
22+
.map(|r| r.unwrap())
23+
.collect();
24+
assert_eq!(seq_rowids, (1..=1024_i64).collect::<Vec<i64>>());
25+
26+
let random_rowids: Vec<i64> = conn
27+
.prepare("SELECT rowid FROM tr")
28+
.unwrap()
29+
.query_map([], |row| Ok(row.get_unwrap(0)))
30+
.unwrap()
31+
.map(|r| r.unwrap())
32+
.collect();
33+
// This assertion is technically just probabilistic, but in practice
34+
// precise enough to ~never cause false positives
35+
assert_ne!(random_rowids, (1..=1024_i64).collect::<Vec<i64>>())
36+
}
37+
38+
#[test]
39+
fn test_random_rowid_validate_create() {
40+
let conn = Connection::open_in_memory().unwrap();
41+
42+
for wrong in [
43+
"CREATE TABLE t(id) RANDOM ROWID WITHOUT ROWID",
44+
"CREATE TABLE t(id int PRIMARY KEY AUTOINCREMENT) RANDOM ROWID",
45+
"CREATE TABLE t(id) RANDOM ROW_ID",
46+
"CREATE TABLE t(id) RANDO ROWID",
47+
] {
48+
assert!(conn.execute(wrong, ()).is_err());
49+
}
50+
}
51+
}

0 commit comments

Comments
 (0)