]> gitweb.factorcode.org Git - factor.git/blob - basis/math/bitwise/bitwise-tests.factor
endian: replaces io.binary and io.binary.fast.
[factor.git] / basis / math / bitwise / bitwise-tests.factor
1 USING: accessors math math.bitwise tools.test kernel words
2 specialized-arrays alien.c-types alien.data math.vectors.simd
3 sequences destructors libc literals classes.struct ;
4 SPECIALIZED-ARRAY: int
5 IN: math.bitwise.tests
6
7 { 0 } [ 1 0 0 bitroll ] unit-test
8 { 1 } [ 1 0 1 bitroll ] unit-test
9 { 1 } [ 1 1 1 bitroll ] unit-test
10 { 1 } [ 1 0 2 bitroll ] unit-test
11 { 1 } [ 1 0 1 bitroll ] unit-test
12 { 1 } [ 1 20 2 bitroll ] unit-test
13 { 1 } [ 1 8 8 bitroll ] unit-test
14 { 1 } [ 1 -8 8 bitroll ] unit-test
15 { 1 } [ 1 -32 8 bitroll ] unit-test
16 { 128 } [ 1 -1 8 bitroll ] unit-test
17 { 8 } [ 1 3 32 bitroll ] unit-test
18
19 { 0 } [ { } bitfield ] unit-test
20 { 256 } [ 1 { 8 } bitfield ] unit-test
21 { 268 } [ 3 1 { 8 2 } bitfield ] unit-test
22 { 268 } [ 1 { 8 { 3 2 } } bitfield ] unit-test
23 : test-1+ ( x -- y ) 1 + ;
24 { 512 } [ 1 { { test-1+ 8 } } bitfield ] unit-test
25
26 { 8 } [ 0 3 toggle-bit ] unit-test
27 { 0 } [ 8 3 toggle-bit ] unit-test
28
29 { 4 } [ 0b1010101 bit-count ] unit-test
30 { 0 } [ 0b0 bit-count ] unit-test
31 { 1 } [ 0b1 bit-count ] unit-test
32 { 2 } [ B{ 1 1 } bit-count ] unit-test
33 { 64 } [ 0xffffffffffffffff bit-count ] unit-test
34
35 STRUCT: bit-count-struct { a uint } ;
36
37 { 2 } [ S{ bit-count-struct { a 3 } } bit-count ] unit-test
38
39
40 SPECIALIZED-ARRAY: uint
41 SPECIALIZED-ARRAY: uint-4
42
43 { 1 } [ uint-4{ 1 0 0 0 } bit-count ] unit-test
44
45 { 1 } [
46     [
47         2 int malloc-array &free 1 0 pick set-nth bit-count
48     ] with-destructors
49 ] unit-test
50
51 { 1 } [ B{ 1 0 0 } bit-count ] unit-test
52 { 3 } [ B{ 1 1 1 } bit-count ] unit-test
53
54 { t } [ 0b0 even-parity? ] unit-test
55 { f } [ 0b1 even-parity? ] unit-test
56 { f } [ 0b0 odd-parity? ] unit-test
57 { t } [ 0b1 odd-parity? ] unit-test
58
59 { -1 } [ 0xff 4 >signed ] unit-test
60 { -1 } [ 0xff 8 >signed ] unit-test
61 { 255 } [ 0xff 16 >signed ] unit-test
62
63 { 2 } [ 3 >even ] unit-test
64 { 3 } [ 3 >odd ] unit-test
65 { 5 } [ 4 >odd ] unit-test
66
67 { t } [ 0b111 0b110 mask? ] unit-test
68 { f } [ 0b101 0b110 mask? ] unit-test
69 { t } [ 0xff 1 mask? ] unit-test
70 { f } [ 0x0 1 mask? ] unit-test
71
72 { 7 } [ 5 next-odd ] unit-test
73 { 7 } [ 6 next-odd ] unit-test
74
75 { 6 } [ 5 next-even ] unit-test
76 { 8 } [ 6 next-even ] unit-test
77
78 [ -1 bit-count ] [ non-negative-integer-expected? ] must-fail-with
79 [ -1 bit-length ] [ non-negative-integer-expected? ] must-fail-with
80
81 { 0b1111 } [ 4 on-bits ] unit-test
82 { 0 } [ 0 on-bits ] unit-test
83 { 0 } [ -2 on-bits ] unit-test
84
85 { 0b11 } [ 0b1111 2 bits ] unit-test
86 { 0b111 } [ 0b1111 3 bits ] unit-test
87 { 0 } [ 0b1111 0 bits ] unit-test
88 { 0 } [ 0b1111 -2 bits ] unit-test
89
90 { 0b111 } [ 0b111 -1 clear-bit ] unit-test
91 { 0b110 } [ 0b111 0 clear-bit ] unit-test
92 { 0b101 } [ 0b111 1 clear-bit ] unit-test
93
94 { 0 } [ 0 -1 set-bit ] unit-test
95 { 0b1 } [ 0 0 set-bit ] unit-test
96 { 0b10 } [ 0 1 set-bit ] unit-test
97
98 { 0 } [ 0 -1 toggle-bit ] unit-test
99 { 0b1 } [ 0 0 toggle-bit ] unit-test
100 { 0b10 } [ 0 1 toggle-bit ] unit-test
101 { 0 } [ 0 0 toggle-bit 0 toggle-bit ] unit-test
102 { 0 } [ 0 1 toggle-bit 1 toggle-bit ] unit-test
103
104 { 0 } [ 0b1111 33 33 bit-range ] unit-test
105 { 0 } [ 0b1111 33 20 bit-range ] unit-test
106 { 0b11 } [ 0b1111 3 2 bit-range ] unit-test
107 [ 0b1111 2 3 bit-range ] [ T{ bit-range-error f 0b1111 2 3 } = ] must-fail-with
108 [ 0b1111 -2 -4 bit-range ] [ T{ bit-range-error f 0b1111 -2 -4 } = ] must-fail-with
109
110 { 0 } [ 0b0 bit-length ] unit-test
111 { 1 } [ 0b1 bit-length ] unit-test
112 { 1 } [ 0b01 bit-length ] unit-test
113 { 2 } [ 0b10 bit-length ] unit-test
114 { 2 } [ 0b11 bit-length ] unit-test
115 { 3 } [ 0b100 bit-length ] unit-test
116 { 3 } [ 0b101 bit-length ] unit-test
117 { 3 } [ 0b110 bit-length ] unit-test
118 { 3 } [ 0b111 bit-length ] unit-test
119
120 { 0x56780000 0x12340000 } [ 0x1234000056780000 d>w/w ] unit-test
121 { 0x5678 0x1234 } [ 0x12345678 w>h/h ] unit-test
122 { 0x34 0x12 } [ 0x1234 h>b/b ] unit-test