bdf/
lib.rs

1#[cfg(test)]
2mod tests {
3
4    use super::io::BDFWriter;
5    use crate::chunks::{DataEntry, HashEntry};
6    use crate::io::BDFReader;
7    use std::fs::{remove_file, File};
8    use std::io::Error;
9
10    const FOO: &str = "foo";
11    const BAR: &str = "bar";
12
13    #[test]
14    fn it_writes_uncompressed() -> Result<(), Error> {
15        let mut writer = new_writer("tmp1.bdf", 2, false)?;
16        writer.set_entries_per_chunk(24)?;
17
18        writer.add_lookup_entry(HashEntry::new(BAR.to_string(), 5))?;
19        writer.add_lookup_entry(HashEntry::new(FOO.to_string(), 4))?;
20
21        let mut entry_1 = DataEntry::new("lol".to_string());
22        entry_1.add_hash_value(FOO.to_string(), vec![0, 1, 0, 2]);
23        entry_1.add_hash_value(BAR.to_string(), vec![0, 2, 3, 4, 5]);
24        writer.add_data_entry(entry_1)?;
25
26        let mut entry_2 = DataEntry::new("lel".to_string());
27        entry_2.add_hash_value(BAR.to_string(), vec![0, 3, 2, 1, 5]);
28        entry_2.add_hash_value(FOO.to_string(), vec![4, 5, 2, 3]);
29        writer.add_data_entry(entry_2)?;
30
31        writer.finish()?;
32        remove_file("tmp1.bdf")?;
33
34        Ok(())
35    }
36
37    #[test]
38    fn it_writes_compressed() -> Result<(), Error> {
39        let mut writer = new_writer("tmp2.bdf", 4, true)?;
40        writer.set_compression_level(3);
41        writer.set_entries_per_chunk(3)?;
42
43        writer.add_lookup_entry(HashEntry::new(FOO.to_string(), 4))?;
44        writer.add_lookup_entry(HashEntry::new(BAR.to_string(), 5))?;
45
46        let mut entry_1 = DataEntry::new("lol".to_string());
47        entry_1.add_hash_value(FOO.to_string(), vec![2, 4, 0, 2]);
48        entry_1.add_hash_value(BAR.to_string(), vec![5, 2, 1, 4, 5]);
49        writer.add_data_entry(entry_1)?;
50
51        let mut entry_2 = DataEntry::new("lel".to_string());
52        entry_2.add_hash_value(BAR.to_string(), vec![0, 3, 2, 1, 5]);
53        entry_2.add_hash_value(FOO.to_string(), vec![4, 5, 2, 3]);
54        writer.add_data_entry(entry_2)?;
55
56        let mut entry_3 = DataEntry::new("lool".to_string());
57        entry_3.add_hash_value(BAR.to_string(), vec![1, 3, 2, 1, 5]);
58        entry_3.add_hash_value(FOO.to_string(), vec![5, 5, 2, 3]);
59        writer.add_data_entry(entry_3)?;
60
61        let mut entry_4 = DataEntry::new("lool".to_string());
62        entry_4.add_hash_value(BAR.to_string(), vec![1, 3, 2, 1, 5]);
63        entry_4.add_hash_value(FOO.to_string(), vec![5, 5, 2, 3]);
64        writer.add_data_entry(entry_4)?;
65
66        writer.finish()?;
67
68        remove_file("tmp2.bdf")?;
69
70        Ok(())
71    }
72
73    #[test]
74    fn it_reads() -> Result<(), Error> {
75        create_simple_file("tmp3.bdf", false)?;
76        let mut reader = new_reader("tmp3.bdf")?;
77        reader.read_start()?;
78        let lookup_table = &reader.lookup_table.clone().unwrap();
79        let mut next_chunk = reader.next_chunk()?;
80        let data_entries = next_chunk.data_entries(lookup_table)?;
81        assert_eq!(data_entries[0].plain, "lol".to_string());
82
83        remove_file("tmp3.bdf")?;
84
85        Ok(())
86    }
87
88    #[test]
89    fn it_reads_compressed() -> Result<(), Error> {
90        create_simple_file("tmp4.bdf", true)?;
91        let mut reader = new_reader("tmp4.bdf")?;
92        reader.read_metadata()?;
93        let lookup_table = &reader.read_lookup_table()?.clone();
94        let mut next_chunk = reader.next_chunk()?;
95        let data_entries = next_chunk.data_entries(lookup_table)?;
96        assert_eq!(data_entries[0].plain, "lol".to_string());
97
98        remove_file("tmp4.bdf")?;
99
100        Ok(())
101    }
102
103    fn create_simple_file(name: &str, compressed: bool) -> Result<(), Error> {
104        let mut writer = new_writer(name, 1, compressed)?;
105
106        writer.add_lookup_entry(HashEntry::new(FOO.to_string(), 4))?;
107        let mut entry_1 = DataEntry::new("lol".to_string());
108        entry_1.add_hash_value(FOO.to_string(), vec![2, 4, 0, 2]);
109        writer.add_data_entry(entry_1)?;
110
111        writer.finish()?;
112
113        Ok(())
114    }
115
116    fn new_reader(file_name: &str) -> Result<BDFReader, Error> {
117        let file = File::open(file_name)?;
118
119        Ok(BDFReader::new(file))
120    }
121
122    fn new_writer(file_name: &str, entries: u64, compress: bool) -> Result<BDFWriter, Error> {
123        let file = File::create(file_name)?;
124
125        Ok(BDFWriter::new(file, entries, compress))
126    }
127}
128
129pub mod chunks;
130pub mod io;