source: trunk/libtest/bitblock_iterator_test.cpp @ 3671

Last change on this file since 3671 was 3671, checked in by ksherdy, 5 years ago

Added new regression tests for scanning.

File size: 3.5 KB
Line 
1#include "../lib/bitblock.hpp"
2#include "../lib/builtins.hpp"
3#include "../lib/bitblock_iterator.hpp"
4
5#include <iostream>
6using namespace std;
7
8int main() {
9        int failed_tests = 0;
10
11    //
12    // count_forward_zeroes and count_reverse_zeroes tests
13    //
14
15    BitBlock t = simd<BLOCK_SIZE>::constant<0>();
16    t = simd<BLOCK_SIZE>::constant<1>();
17
18    for (int i = 1; i < BLOCK_SIZE; i++) {
19                t = bitblock::slli<1>(t);
20
21                int count_f = count_forward_zeroes(t);
22                int count_b = count_reverse_zeroes(t);
23                if (count_forward_zeroes(t) != i) {
24                        failed_tests++;
25                        cout << "Test failure: count_forward_zeroes(bitblock::sll(one, " << i << ") == " << count_f << endl;
26                }
27        if (count_reverse_zeroes(t) != (BLOCK_SIZE-i-1)) {
28                        failed_tests++;
29                        cout << "Test failure: count_reverse_zeroes(bitblock::sll(one, " << i << ") == " << count_b << endl;
30                }
31        }
32
33    //
34    // ForwardScanner and ReverseScanner tests
35    //
36
37    t = simd<BLOCK_SIZE>::constant<0>();
38
39    ForwardScanner<BitBlock, ScanWord> f(&t);
40
41        f.scan_to_next();               
42        if (f.get_pos() != -1) {
43                failed_tests++;
44                cout << "Test failure: ForwardScanner Expected: " << -1 << " Actual: " << f.get_pos() << endl;
45        }
46
47    ReverseScanner<BitBlock, ScanWord> r(&t);
48
49        r.scan_to_next();               
50        if (r.get_pos() != -1) {
51                failed_tests++;
52                cout << "Test failure: ReverseScanner Expected: " << -1 << " Actual: " << r.get_pos() << endl;
53        }
54
55    t = simd<BLOCK_SIZE>::constant<1>();
56
57    for (int i = 1; i < BLOCK_SIZE; i++) {
58                t = bitblock::slli<1>(t);
59
60        ForwardScanner<BitBlock, ScanWord> f(&t);
61        ReverseScanner<BitBlock, ScanWord> r(&t);
62
63                f.scan_to_next();               
64                if (f.get_pos() != i) {
65                        failed_tests++;
66                        cout << "Test failure: ForwardScanner Expected: " << i << " Actual: " << f.get_pos() << endl;
67                }
68
69                r.scan_to_next();
70                if (r.get_pos() != i) {
71                        failed_tests++;
72                        cout << "Test failure: ReverseScanner Expected: " << i << " Actual: " << f.get_pos() << endl;
73
74                }
75        }
76
77    //
78    // BitBlockScanner tests
79    //
80
81    t = simd<BLOCK_SIZE>::constant<0>();
82
83    BitBlockScanner<BitBlock, ScanWord> s;
84    s.init(&t);
85
86    int pos = s.scan_to_next();
87    if (pos != 0) {
88        failed_tests++;
89        cout << "Test failure: BitBlockScanner Expected: " << 0 << " Actual: " << pos << endl;
90    }
91
92    t = simd<BLOCK_SIZE>::constant<1>();
93
94    for (int i = 1; i < BLOCK_SIZE; i++) {
95        t = bitblock::slli<1>(t);
96
97        BitBlockScanner<BitBlock, ScanWord> s;
98        s.init(&t);
99
100        int pos = s.scan_to_next();
101        if (pos != i) {
102            failed_tests++;
103            cout << "Test failure: BitBlockScanner Expected: " << i << " Actual: " << pos << endl;
104        }
105
106    }
107
108    //
109    // BitStreamScanner tests
110    //
111
112    const int N =  BitStreamScanner<BitBlock,  ScanWord, ScanWord>::max_bitblock_count;
113
114    for (int blk = 0; blk < N; blk++) {
115
116        t = simd<BLOCK_SIZE>::constant<1>();
117
118        for(int bit = 0; bit < BLOCK_SIZE ; bit++) {
119
120            BitStreamScanner<BitBlock, ScanWord, ScanWord> bss;
121            bss.init();
122
123            for(int j = 0; j < blk; j++) {
124                bss.load_block(simd<BLOCK_SIZE>::constant<0>(), j);
125            }
126
127            bss.load_block(t,blk);
128            t = bitblock::slli<1>(t);
129
130            int i = blk * BLOCK_SIZE + bit;
131            int pos = bss.scan_to_next();
132
133            if (pos != i) {
134                failed_tests++;
135                cout << "Test failure: BitBlockScanner Expected: " << i << " Actual: " << pos << endl;
136            }
137        }
138    }
139
140        if (failed_tests == 0) cout << "All tests succeeded." << endl;
141
142}
143
144
Note: See TracBrowser for help on using the repository browser.