encoding_index_tests/
index_tests.rs
1#[macro_export]
9macro_rules! single_byte_tests {
10 (
11 mod = $parentmod:ident ) => (
13 mod tests {
14 extern crate test;
15 use $parentmod::{forward, backward};
16
17 #[test]
18 fn test_correct_table() {
19 for i in 0x80..0x100 {
20 let i = i as u8;
21 let j = forward(i);
22 if j != 0xffff { assert_eq!(backward(j as u32), i); }
23 }
24 }
25
26 #[bench]
27 fn bench_forward_sequential_128(bencher: &mut test::Bencher) {
28 bencher.iter(|| {
29 for i in 0x80..0x100 {
30 test::black_box(forward(i as u8));
31 }
32 })
33 }
34
35 #[bench]
36 fn bench_backward_sequential_128(bencher: &mut test::Bencher) {
37 let mut start: u32 = 0;
38 bencher.iter(|| {
39 for i in start..(start + 0x80) {
40 test::black_box(backward(i));
41 }
42 start += 0x80;
43 })
44 }
45 }
46 );
47}
48
49#[macro_export]
51macro_rules! multi_byte_tests {
52 (make shared tests and benches with dups = $dups:expr) => ( #[test]
54 fn test_correct_table() {
55 static DUPS: &'static [u16] = &$dups;
56 for i in 0..0x10000 {
57 let i = i as u16;
58 if DUPS.contains(&i) { continue; }
59 let j = forward(i);
60 if j != 0xffff { assert_eq!(backward(j), i); }
61 }
62 }
63
64 #[bench]
65 fn bench_forward_sequential_128(bencher: &mut test::Bencher) {
66 let mut start: u32 = 0;
67 bencher.iter(|| {
68 for i in start..(start + 0x80) {
69 test::black_box(forward(i as u16));
70 }
71 start += 0x80;
72 })
73 }
74
75 #[bench]
76 fn bench_backward_sequential_128(bencher: &mut test::Bencher) {
77 let mut start: u32 = 0;
78 bencher.iter(|| {
79 for i in start..(start + 0x80) {
80 test::black_box(backward(i));
81 }
82 start += 0x80;
83 if start >= 0x110000 { start = 0; }
84 })
85 }
86 );
87
88 (
89 mod = $parentmod:ident, dups = $dups:expr
91 ) => (
92 mod tests {
93 extern crate test;
94 use $parentmod::{forward, backward};
95
96 multi_byte_tests!(make shared tests and benches with dups = $dups);
97 }
98 );
99
100 (
101 mod = $parentmod:ident, remap = [$remap_min:expr, $remap_max:expr],
103 dups = $dups:expr
104 ) => (
105 mod tests {
106 extern crate test;
107 use $parentmod::{forward, backward, backward_remapped};
108
109 multi_byte_tests!(make shared tests and benches with dups = $dups);
110
111 static REMAP_MIN: u16 = $remap_min;
112 static REMAP_MAX: u16 = $remap_max;
113
114 #[test]
115 fn test_correct_remapping() {
116 for i in REMAP_MIN..(REMAP_MAX+1) {
117 let j = forward(i);
118 if j != 0xffff {
119 let ii = backward_remapped(j);
120 assert!(ii != i && ii != 0xffff);
121 let jj = forward(ii);
122 assert_eq!(j, jj);
123 }
124 }
125 }
126
127 #[bench]
128 fn bench_backward_remapped_sequential_128(bencher: &mut test::Bencher) {
129 let mut start: u32 = 0;
130 bencher.iter(|| {
131 for i in start..(start + 0x80) {
132 test::black_box(backward_remapped(i));
133 }
134 start += 0x80;
135 if start >= 0x110000 { start = 0; }
136 })
137 }
138 }
139 );
140}
141
142#[macro_export]
144macro_rules! multi_byte_range_tests {
145 (
146 mod = $parentmod:ident,
147 key = [$minkey:expr, $maxkey:expr], key < $keyubound:expr,
148 value = [$minvalue:expr, $maxvalue:expr], value < $valueubound:expr
149 ) => (
150 mod tests {
151 extern crate test;
152 use $parentmod::{forward, backward};
153
154 static MIN_KEY: u32 = $minkey;
155 static MAX_KEY: u32 = $maxkey;
156 static KEY_UBOUND: u32 = $keyubound;
157 static MIN_VALUE: u32 = $minvalue;
158 static MAX_VALUE: u32 = $maxvalue;
159 static VALUE_UBOUND: u32 = $valueubound;
160
161 #[test]
162 #[allow(unused_comparisons)]
163 fn test_no_failure() {
164 for i in (if MIN_KEY>0 {MIN_KEY-1} else {0})..(MAX_KEY+2) {
165 forward(i);
166 }
167 for j in (if MIN_VALUE>0 {MIN_VALUE-1} else {0})..(MAX_VALUE+2) {
168 backward(j);
169 }
170 }
171
172 #[test]
173 fn test_correct_table() {
174 for i in MIN_KEY..(MAX_KEY+2) {
175 let j = forward(i);
176 if j == 0xffffffff { continue; }
177 let i_ = backward(j);
178 if i_ == 0xffffffff { continue; }
179 assert!(i_ == i,
180 "backward(forward({})) = backward({}) = {} != {}", i, j, i_, i);
181 }
182 }
183
184 #[bench]
185 fn bench_forward_sequential_128(bencher: &mut test::Bencher) {
186 let mut start: u32 = 0;
187 bencher.iter(|| {
188 for i in start..(start + 0x80) {
189 test::black_box(forward(i));
190 }
191 start += 0x80;
192 if start >= KEY_UBOUND { start = 0; }
193 })
194 }
195
196 #[bench]
197 fn bench_backward_sequential_128(bencher: &mut test::Bencher) {
198 let mut start: u32 = 0;
199 bencher.iter(|| {
200 for i in start..(start + 0x80) {
201 test::black_box(backward(i));
202 }
203 start += 0x80;
204 if start >= VALUE_UBOUND { start = 0; }
205 })
206 }
207 }
208 );
209}
210