Skip to content

Commit 61f3f18

Browse files
committed
Add tests + depend on mmap-bitvec branch
1 parent 4a4fb34 commit 61f3f18

File tree

4 files changed

+111
-50
lines changed

4 files changed

+111
-50
lines changed

.github/workflows/ci.yml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
name: ci
2+
on: [push, pull_request]
3+
4+
# https://stackoverflow.com/questions/57612428/cloning-private-github-repository-within-organisation-in-actions
5+
# I created a token with private repo access in my account that I set in the rust-bfield repo vault
6+
jobs:
7+
test:
8+
name: test
9+
runs-on: ${{ matrix.os }}
10+
strategy:
11+
matrix:
12+
build: [pinned, stable]
13+
include:
14+
- build: pinned
15+
os: ubuntu-18.04
16+
rust: 1.40.0
17+
- build: stable
18+
os: ubuntu-18.04
19+
rust: stable
20+
steps:
21+
- uses: actions/checkout@v1
22+
- name: Install Rust
23+
uses: hecrj/setup-rust-action@v1
24+
with:
25+
rust-version: ${{ matrix.rust }}
26+
- name: Build System Info
27+
run: rustc --version
28+
- name: Run tests
29+
env:
30+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
31+
run: cargo test
32+
33+
test_with_features:
34+
name: test
35+
runs-on: ${{ matrix.os }}
36+
strategy:
37+
matrix:
38+
build: [pinned, stable]
39+
include:
40+
- build: pinned
41+
os: ubuntu-18.04
42+
rust: 1.40.0
43+
- build: stable
44+
os: ubuntu-18.04
45+
rust: stable
46+
steps:
47+
- uses: actions/checkout@v1
48+
- name: Install Rust
49+
uses: hecrj/setup-rust-action@v1
50+
with:
51+
rust-version: ${{ matrix.rust }}
52+
- name: Build System Info
53+
run: rustc --version
54+
- name: Run tests
55+
env:
56+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
57+
run: RUST_TEST_THREADS=1 cargo test --features marker_lookup

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ edition = "2018"
66

77
[dependencies]
88
bincode = "1"
9-
mmap-bitvec = { git="ssh://git@github.com/onecodex/mmap-bitvec.git", tag="v0.3.0" }
9+
mmap-bitvec = { git="ssh://git@github.com/onecodex/mmap-bitvec.git", branch="v0.3" }
1010
murmurhash3 = "0.0.5"
1111
serde = "1.0.15"
1212
serde_derive = "1.0.15"

src/bfield_member.rs

Lines changed: 53 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ impl<T: Clone + DeserializeOwned + Serialize> BFieldMember<T> {
7878
})
7979
}
8080

81+
#[cfg(test)]
8182
pub fn in_memory(
8283
size: usize,
8384
n_hashes: u8,
@@ -113,8 +114,7 @@ impl<T: Clone + DeserializeOwned + Serialize> BFieldMember<T> {
113114

114115
for marker_ix in 0usize..self.params.n_hashes as usize {
115116
let pos = marker_pos(hash, marker_ix, self.bitvec.size(), marker_width);
116-
self.bitvec
117-
.set_range(pos..pos + marker_width, marker);
117+
self.bitvec.set_range(pos..pos + marker_width, marker);
118118
}
119119
}
120120

@@ -217,62 +217,67 @@ fn marker_pos(hash: (u64, u64), n: usize, total_size: usize, marker_size: usize)
217217
((hash.0 as usize).wrapping_add(n.wrapping_mul(hash.1 as usize))) % (total_size - marker_size)
218218
}
219219

220-
#[test]
221-
fn test_bfield() {
222-
let mut bfield: BFieldMember<usize> = BFieldMember::in_memory(1024, 3, 64, 4).unwrap();
223-
// check that inserting keys adds new entries
224-
bfield.insert(b"test", 2);
225-
assert_eq!(bfield.get(b"test"), BFieldLookup::Some(2));
220+
#[cfg(test)]
221+
mod tests {
222+
use super::*;
226223

227-
bfield.insert(b"test2", 106);
228-
assert_eq!(bfield.get(b"test2"), BFieldLookup::Some(106));
224+
#[test]
225+
fn test_bfield() {
226+
let mut bfield: BFieldMember<usize> = BFieldMember::in_memory(1024, 3, 64, 4).unwrap();
227+
// check that inserting keys adds new entries
228+
bfield.insert(b"test", 2);
229+
assert_eq!(bfield.get(b"test"), BFieldLookup::Some(2));
229230

230-
// test3 was never added
231-
assert_eq!(bfield.get(b"test3"), BFieldLookup::None);
232-
}
231+
bfield.insert(b"test2", 106);
232+
assert_eq!(bfield.get(b"test2"), BFieldLookup::Some(106));
233+
234+
// test3 was never added
235+
assert_eq!(bfield.get(b"test3"), BFieldLookup::None);
236+
}
233237

234-
#[test]
235-
fn test_bfield_collisions() {
236-
// comically small bfield with too many (16) hashes
237-
// and too many bits (8) to cause saturation
238-
let mut bfield: BFieldMember<usize> = BFieldMember::in_memory(128, 16, 64, 8).unwrap();
238+
#[test]
239+
fn test_bfield_collisions() {
240+
// comically small bfield with too many (16) hashes
241+
// and too many bits (8) to cause saturation
242+
let mut bfield: BFieldMember<usize> = BFieldMember::in_memory(128, 16, 64, 8).unwrap();
239243

240-
bfield.insert(b"test", 100);
241-
assert_eq!(bfield.get(b"test"), BFieldLookup::Indeterminate);
242-
}
244+
bfield.insert(b"test", 100);
245+
assert_eq!(bfield.get(b"test"), BFieldLookup::Indeterminate);
246+
}
243247

244-
#[test]
245-
fn test_bfield_bits_set() {
246-
let mut bfield: BFieldMember<usize> = BFieldMember::in_memory(128, 2, 16, 4).unwrap();
248+
#[test]
249+
fn test_bfield_bits_set() {
250+
let mut bfield: BFieldMember<usize> = BFieldMember::in_memory(128, 2, 16, 4).unwrap();
247251

248-
bfield.insert(b"test", 100);
249-
assert_eq!(bfield.bitvec.rank(0..128), 8);
250-
bfield.insert(b"test2", 200);
251-
assert_eq!(bfield.bitvec.rank(0..128), 16);
252-
bfield.insert(b"test3", 300);
253-
assert!(bfield.bitvec.rank(0..128) < 24); // 23 bits set
254-
}
252+
bfield.insert(b"test", 100);
253+
assert_eq!(bfield.bitvec.rank(0..128), 8);
254+
bfield.insert(b"test2", 200);
255+
assert_eq!(bfield.bitvec.rank(0..128), 16);
256+
bfield.insert(b"test3", 300);
257+
assert!(bfield.bitvec.rank(0..128) < 24); // 23 bits set
258+
}
255259

256-
#[test]
257-
fn test_bfield_mask_or_insert() {
258-
let mut bfield: BFieldMember<usize> = BFieldMember::in_memory(1024, 2, 16, 4).unwrap();
260+
#[test]
261+
fn test_bfield_mask_or_insert() {
262+
let mut bfield: BFieldMember<usize> = BFieldMember::in_memory(1024, 2, 16, 4).unwrap();
259263

260-
bfield.insert(b"test", 2);
261-
assert_eq!(bfield.get(b"test"), BFieldLookup::Some(2));
264+
bfield.insert(b"test", 2);
265+
assert_eq!(bfield.get(b"test"), BFieldLookup::Some(2));
262266

263-
// `mask_or_insert`ing the same value doesn't change anything
264-
assert_eq!(bfield.mask_or_insert(b"test", 2), true);
265-
assert_eq!(bfield.get(b"test"), BFieldLookup::Some(2));
267+
// `mask_or_insert`ing the same value doesn't change anything
268+
assert_eq!(bfield.mask_or_insert(b"test", 2), true);
269+
assert_eq!(bfield.get(b"test"), BFieldLookup::Some(2));
266270

267-
// `mask_or_insert`ing a new value results in an indeterminate
268-
assert_eq!(bfield.mask_or_insert(b"test", 3), false);
269-
assert_eq!(bfield.get(b"test"), BFieldLookup::Indeterminate);
271+
// `mask_or_insert`ing a new value results in an indeterminate
272+
assert_eq!(bfield.mask_or_insert(b"test", 3), false);
273+
assert_eq!(bfield.get(b"test"), BFieldLookup::Indeterminate);
270274

271-
// `mask_or_insert`ing an indeterminate value is still indeterminate
272-
assert_eq!(bfield.mask_or_insert(b"test", 3), false);
273-
assert_eq!(bfield.get(b"test"), BFieldLookup::Indeterminate);
275+
// `mask_or_insert`ing an indeterminate value is still indeterminate
276+
assert_eq!(bfield.mask_or_insert(b"test", 3), false);
277+
assert_eq!(bfield.get(b"test"), BFieldLookup::Indeterminate);
274278

275-
// `mask_or_insert`ing a new key just sets that key
276-
assert_eq!(bfield.mask_or_insert(b"test2", 2), true);
277-
assert_eq!(bfield.get(b"test2"), BFieldLookup::Some(2));
279+
// `mask_or_insert`ing a new key just sets that key
280+
assert_eq!(bfield.mask_or_insert(b"test2", 2), true);
281+
assert_eq!(bfield.get(b"test2"), BFieldLookup::Some(2));
282+
}
278283
}

src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
#![cfg_attr(feature = "marker_lookup", feature(const_fn))]
21
#![cfg_attr(feature = "prefetching", feature(core_intrinsics))]
32

43
#[macro_use]

0 commit comments

Comments
 (0)