@@ -5,59 +5,137 @@ if (Buffer.TYPED_ARRAY_SUPPORT) return;
5
5
6
6
var assert = require ( 'assert' ) ;
7
7
8
- var buf = Buffer . from ( [ 0x1 , 0x2 , 0x3 , 0x4 ] ) ;
8
+ // Test buffers small enough to use the JS implementation
9
+ const buf = Buffer . from ( [ 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , 0x09 ,
10
+ 0x0a , 0x0b , 0x0c , 0x0d , 0x0e , 0x0f , 0x10 ] ) ;
9
11
10
12
assert . strictEqual ( buf , buf . swap16 ( ) ) ;
11
- assert . deepStrictEqual ( buf , Buffer . from ( [ 0x2 , 0x1 , 0x4 , 0x3 ] ) ) ;
13
+ assert . deepStrictEqual ( buf , Buffer . from ( [ 0x02 , 0x01 , 0x04 , 0x03 , 0x06 , 0x05 ,
14
+ 0x08 , 0x07 , 0x0a , 0x09 , 0x0c , 0x0b ,
15
+ 0x0e , 0x0d , 0x10 , 0x0f ] ) ) ;
16
+ buf . swap16 ( ) ; // restore
12
17
13
18
assert . strictEqual ( buf , buf . swap32 ( ) ) ;
14
- assert . deepStrictEqual ( buf , Buffer . from ( [ 0x3 , 0x4 , 0x1 , 0x2 ] ) ) ;
15
-
16
- var buf_array = [ ] ;
17
- for ( var i = 1 ; i < 33 ; i ++ )
18
- buf_array . push ( i ) ;
19
- var buf2 = Buffer . from ( buf_array ) ;
20
- buf2 . swap32 ( ) ;
21
- assert . deepStrictEqual ( buf2 ,
22
- Buffer . from ( [ 0x04 , 0x03 , 0x02 , 0x01 , 0x08 , 0x07 , 0x06 , 0x05 , 0x0c ,
23
- 0x0b , 0x0a , 0x09 , 0x10 , 0x0f , 0x0e , 0x0d , 0x14 , 0x13 ,
24
- 0x12 , 0x11 , 0x18 , 0x17 , 0x16 , 0x15 , 0x1c , 0x1b , 0x1a ,
25
- 0x19 , 0x20 , 0x1f , 0x1e , 0x1d ] ) ) ;
26
- buf2 . swap16 ( ) ;
27
- assert . deepStrictEqual ( buf2 ,
28
- Buffer . from ( [ 0x03 , 0x04 , 0x01 , 0x02 , 0x07 , 0x08 , 0x05 , 0x06 , 0x0b ,
29
- 0x0c , 0x09 , 0x0a , 0x0f , 0x10 , 0x0d , 0x0e , 0x13 , 0x14 ,
30
- 0x11 , 0x12 , 0x17 , 0x18 , 0x15 , 0x16 , 0x1b , 0x1c , 0x19 ,
31
- 0x1a , 0x1f , 0x20 , 0x1d , 0x1e ] ) ) ;
19
+ assert . deepStrictEqual ( buf , Buffer . from ( [ 0x04 , 0x03 , 0x02 , 0x01 , 0x08 , 0x07 ,
20
+ 0x06 , 0x05 , 0x0c , 0x0b , 0x0a , 0x09 ,
21
+ 0x10 , 0x0f , 0x0e , 0x0d ] ) ) ;
22
+ buf . swap32 ( ) ; // restore
32
23
24
+ assert . strictEqual ( buf , buf . swap64 ( ) ) ;
25
+ assert . deepStrictEqual ( buf , Buffer . from ( [ 0x08 , 0x07 , 0x06 , 0x05 , 0x04 , 0x03 ,
26
+ 0x02 , 0x01 , 0x10 , 0x0f , 0x0e , 0x0d ,
27
+ 0x0c , 0x0b , 0x0a , 0x09 ] ) ) ;
28
+
29
+ // Operates in-place
33
30
var buf3 = Buffer . from ( [ 0x1 , 0x2 , 0x3 , 0x4 , 0x5 , 0x6 , 0x7 ] ) ;
34
31
buf3 . slice ( 1 , 5 ) . swap32 ( ) ;
35
32
assert . deepStrictEqual ( buf3 , Buffer . from ( [ 0x1 , 0x5 , 0x4 , 0x3 , 0x2 , 0x6 , 0x7 ] ) ) ;
36
33
37
34
buf3 . slice ( 1 , 5 ) . swap16 ( ) ;
38
35
assert . deepStrictEqual ( buf3 , Buffer . from ( [ 0x1 , 0x4 , 0x5 , 0x2 , 0x3 , 0x6 , 0x7 ] ) ) ;
39
36
37
+ const buf3_64 = Buffer . from ( [ 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 ,
38
+ 0x09 , 0x0a , 0x0b , 0x0c , 0x0d , 0x0e , 0x0f , 0x10 ,
39
+ 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 ,
40
+ 0x09 , 0x0a , 0x0b , 0x0c , 0x0d , 0x0e , 0x0f , 0x10 ] ) ;
41
+ buf3_64 . slice ( 2 , 18 ) . swap64 ( ) ;
42
+ assert . deepStrictEqual ( buf3_64 , Buffer . from ( [ 0x01 , 0x02 , 0x0a , 0x09 , 0x08 , 0x07 ,
43
+ 0x06 , 0x05 , 0x04 , 0x03 , 0x02 , 0x01 ,
44
+ 0x10 , 0x0f , 0x0e , 0x0d , 0x0c , 0x0b ,
45
+ 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 ,
46
+ 0x09 , 0x0a , 0x0b , 0x0c , 0x0d , 0x0e ,
47
+ 0x0f , 0x10 ] ) ) ;
48
+
40
49
// Force use of native code (Buffer size above threshold limit for js impl)
41
- var buf4 = Buffer . allocUnsafe ( 1024 ) . fill ( [ 0x1 , 0x2 , 0x3 , 0x4 ] ) ;
42
- var buf5 = Buffer . allocUnsafe ( 1024 ) . fill ( [ 0x2 , 0x1 , 0x4 , 0x3 ] ) ;
43
- var buf6 = Buffer . allocUnsafe ( 1024 )
44
- . fill ( [ 0x1 , 0x2 , 0x3 , 0x4 , 0x5 , 0x6 , 0x7 , 0x8 ] ) ;
45
- var buf7 = Buffer . allocUnsafe ( 1024 )
46
- . fill ( [ 0x4 , 0x3 , 0x2 , 0x1 , 0x8 , 0x7 , 0x6 , 0x5 ] ) ;
50
+ var buf4A = new Uint32Array ( 256 ) . fill ( 0x04030201 ) ;
51
+ var buf4 = Buffer . from ( buf4A . buffer , buf4A . byteOffset ) ;
52
+ var buf5A = new Uint32Array ( 256 ) . fill ( 0x03040102 ) ;
53
+ var buf5 = Buffer . from ( buf5A . buffer , buf5A . byteOffset ) ;
47
54
48
55
buf4 . swap16 ( ) ;
49
56
assert . deepStrictEqual ( buf4 , buf5 ) ;
50
57
58
+ var buf6A = new Uint32Array ( 256 ) . fill ( 0x04030201 ) ;
59
+ var buf6 = Buffer . from ( buf6A . buffer ) ;
60
+ var bu7A = new Uint32Array ( 256 ) . fill ( 0x01020304 ) ;
61
+ var buf7 = Buffer . from ( bu7A . buffer , bu7A . byteOffset ) ;
62
+
51
63
buf6 . swap32 ( ) ;
52
64
assert . deepStrictEqual ( buf6 , buf7 ) ;
53
65
54
66
55
- var re16 = / B u f f e r s i z e m u s t b e a m u l t i p l e o f 1 6 - b i t s / ;
56
- var re32 = / B u f f e r s i z e m u s t b e a m u l t i p l e o f 3 2 - b i t s / ;
67
+ var buf8A = new Uint8Array ( 256 * 8 ) ;
68
+ var buf9A = new Uint8Array ( 256 * 8 ) ;
69
+ for ( let i = 0 ; i < buf8A . length ; i ++ ) {
70
+ buf8A [ i ] = i % 8 ;
71
+ buf9A [ buf9A . length - i - 1 ] = i % 8 ;
72
+ }
73
+ var buf8 = Buffer . from ( buf8A . buffer , buf8A . byteOffset ) ;
74
+ var buf9 = Buffer . from ( buf9A . buffer , buf9A . byteOffset ) ;
75
+
76
+ buf8 . swap64 ( ) ;
77
+ assert . deepStrictEqual ( buf8 , buf9 ) ;
78
+
79
+ // Test native code with buffers that are not memory-aligned
80
+ var buf10A = new Uint8Array ( 256 * 8 ) ;
81
+ var buf11A = new Uint8Array ( 256 * 8 - 2 ) ;
82
+ for ( let i = 0 ; i < buf10A . length ; i ++ ) {
83
+ buf10A [ i ] = i % 2 ;
84
+ }
85
+ for ( let i = 1 ; i < buf11A . length ; i ++ ) {
86
+ buf11A [ buf11A . length - i ] = ( i + 1 ) % 2 ;
87
+ }
88
+ var buf10 = Buffer . from ( buf10A . buffer , buf10A . byteOffset ) ;
89
+ // 0|1 0|1 0|1...
90
+ var buf11 = Buffer . from ( buf11A . buffer , buf11A . byteOffset ) ;
91
+ // 0|0 1|0 1|0...
92
+
93
+ buf10 . slice ( 1 , buf10 . length - 1 ) . swap16 ( ) ;
94
+ assert . deepStrictEqual ( buf10 . slice ( 0 , buf11 . length ) , buf11 ) ;
95
+
96
+
97
+ var buf12A = new Uint8Array ( 256 * 8 ) ;
98
+ var buf13A = new Uint8Array ( 256 * 8 - 4 ) ;
99
+ for ( let i = 0 ; i < buf12A . length ; i ++ ) {
100
+ buf12A [ i ] = i % 4 ;
101
+ }
102
+ for ( let i = 1 ; i < buf13A . length ; i ++ ) {
103
+ buf13A [ buf13A . length - i ] = ( i + 1 ) % 4 ;
104
+ }
105
+ var buf12 = Buffer . from ( buf12A . buffer , buf12A . byteOffset ) ;
106
+ // 0|1 2 3 0|1 2 3...
107
+ var buf13 = Buffer . from ( buf13A . buffer , buf13A . byteOffset ) ;
108
+ // 0|0 3 2 1|0 3 2...
109
+
110
+ buf12 . slice ( 1 , buf12 . length - 3 ) . swap32 ( ) ;
111
+ assert . deepStrictEqual ( buf12 . slice ( 0 , buf13 . length ) , buf13 ) ;
112
+
113
+
114
+ var buf14A = new Uint8Array ( 256 * 8 ) ;
115
+ var buf15A = new Uint8Array ( 256 * 8 - 8 ) ;
116
+ for ( let i = 0 ; i < buf14A . length ; i ++ ) {
117
+ buf14A [ i ] = i % 8 ;
118
+ }
119
+ for ( let i = 1 ; i < buf15A . length ; i ++ ) {
120
+ buf15A [ buf15A . length - i ] = ( i + 1 ) % 8 ;
121
+ }
122
+ var buf14 = Buffer . from ( buf14A . buffer , buf14A . byteOffset ) ;
123
+ // 0|1 2 3 4 5 6 7 0|1 2 3 4...
124
+ var buf15 = Buffer . from ( buf15A . buffer , buf15A . byteOffset ) ;
125
+ // 0|0 7 6 5 4 3 2 1|0 7 6 5...
126
+
127
+ buf14 . slice ( 1 , buf14 . length - 7 ) . swap64 ( ) ;
128
+ assert . deepStrictEqual ( buf14 . slice ( 0 , buf15 . length ) , buf15 ) ;
129
+
130
+ // Length assertions
131
+ const re16 = / B u f f e r s i z e m u s t b e a m u l t i p l e o f 1 6 - b i t s / ;
132
+ const re32 = / B u f f e r s i z e m u s t b e a m u l t i p l e o f 3 2 - b i t s / ;
133
+ const re64 = / B u f f e r s i z e m u s t b e a m u l t i p l e o f 6 4 - b i t s / ;
57
134
58
135
assert . throws ( ( ) => Buffer . from ( buf3 ) . swap16 ( ) , re16 ) ;
59
136
assert . throws ( ( ) => Buffer . alloc ( 1025 ) . swap16 ( ) , re16 ) ;
60
137
assert . throws ( ( ) => Buffer . from ( buf3 ) . swap32 ( ) , re32 ) ;
61
138
assert . throws ( ( ) => buf3 . slice ( 1 , 3 ) . swap32 ( ) , re32 ) ;
62
139
assert . throws ( ( ) => Buffer . alloc ( 1025 ) . swap32 ( ) , re32 ) ;
63
-
140
+ assert . throws ( ( ) => buf3 . slice ( 1 , 3 ) . swap64 ( ) , re64 ) ;
141
+ assert . throws ( ( ) => Buffer . alloc ( 1025 ) . swap64 ( ) , re64 ) ;
0 commit comments