You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					210 lines
				
				6.4 KiB
			
		
		
			
		
	
	
					210 lines
				
				6.4 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								var assert = require('assert');
							 | 
						||
| 
								 | 
							
								var Buffers = require('../');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function create (xs, split) {
							 | 
						||
| 
								 | 
							
								    var bufs = Buffers();
							 | 
						||
| 
								 | 
							
								    var offset = 0;
							 | 
						||
| 
								 | 
							
								    split.forEach(function (i) {
							 | 
						||
| 
								 | 
							
								        bufs.push(new Buffer(xs.slice(offset, offset + i)));
							 | 
						||
| 
								 | 
							
								        offset += i;
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    return bufs;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.slice = function () {
							 | 
						||
| 
								 | 
							
								    var xs = [0,1,2,3,4,5,6,7,8,9];
							 | 
						||
| 
								 | 
							
								    var splits = [ [4,2,3,1], [2,2,2,2,2], [1,6,3,1], [9,2], [10], [5,5] ];
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    splits.forEach(function (split) {
							 | 
						||
| 
								 | 
							
								        var bufs = create(xs, split);
							 | 
						||
| 
								 | 
							
								        assert.eql(new Buffer(xs), bufs.slice(),
							 | 
						||
| 
								 | 
							
								            '[' + xs.join(',') + ']'
							 | 
						||
| 
								 | 
							
								                + ' != ' + 
							 | 
						||
| 
								 | 
							
								            '[' + [].join.call(bufs.slice(), ',') + ']'
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        for (var i = 0; i < xs.length; i++) {
							 | 
						||
| 
								 | 
							
								            for (var j = i; j < xs.length; j++) {
							 | 
						||
| 
								 | 
							
								                var a = bufs.slice(i,j);
							 | 
						||
| 
								 | 
							
								                var b = new Buffer(xs.slice(i,j));
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								                assert.eql(a, b,
							 | 
						||
| 
								 | 
							
								                    '[' + [].join.call(a, ',') + ']'
							 | 
						||
| 
								 | 
							
								                        + ' != ' + 
							 | 
						||
| 
								 | 
							
								                    '[' + [].join.call(b, ',') + ']'
							 | 
						||
| 
								 | 
							
								                );
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.splice = function () {
							 | 
						||
| 
								 | 
							
								    var xs = [0,1,2,3,4,5,6,7,8,9];
							 | 
						||
| 
								 | 
							
								    var splits = [ [4,2,3,1], [2,2,2,2,2], [1,6,3,1], [9,2], [10], [5,5] ];
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    splits.forEach(function (split) {
							 | 
						||
| 
								 | 
							
								        for (var i = 0; i < xs.length; i++) {
							 | 
						||
| 
								 | 
							
								            for (var j = i; j < xs.length; j++) {
							 | 
						||
| 
								 | 
							
								                var bufs = create(xs, split);
							 | 
						||
| 
								 | 
							
								                var xs_ = xs.slice();
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								                var a_ = bufs.splice(i,j);
							 | 
						||
| 
								 | 
							
								                var a = [].slice.call(a_.slice());
							 | 
						||
| 
								 | 
							
								                var b = xs_.splice(i,j);
							 | 
						||
| 
								 | 
							
								                assert.eql(a, b,
							 | 
						||
| 
								 | 
							
								                    '[' + a.join(',') + ']'
							 | 
						||
| 
								 | 
							
								                        + ' != ' + 
							 | 
						||
| 
								 | 
							
								                    '[' + b.join(',') + ']'
							 | 
						||
| 
								 | 
							
								                );
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								                assert.eql(bufs.slice(), new Buffer(xs_),
							 | 
						||
| 
								 | 
							
								                    '[' + [].join.call(bufs.slice(), ',') + ']'
							 | 
						||
| 
								 | 
							
								                        + ' != ' + 
							 | 
						||
| 
								 | 
							
								                    '[' + [].join.call(xs_, ',') + ']'
							 | 
						||
| 
								 | 
							
								                );
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.spliceRep = function () {
							 | 
						||
| 
								 | 
							
								    var xs = [0,1,2,3,4,5,6,7,8,9];
							 | 
						||
| 
								 | 
							
								    var splits = [ [4,2,3,1], [2,2,2,2,2], [1,6,3,1], [9,2], [10], [5,5] ];
							 | 
						||
| 
								 | 
							
								    var reps = [ [], [1], [5,6], [3,1,3,3,7], [9,8,7,6,5,4,3,2,1,2,3,4,5] ];
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    splits.forEach(function (split) {
							 | 
						||
| 
								 | 
							
								        reps.forEach(function (rep) {
							 | 
						||
| 
								 | 
							
								            for (var i = 0; i < xs.length; i++) {
							 | 
						||
| 
								 | 
							
								                for (var j = i; j < xs.length; j++) {
							 | 
						||
| 
								 | 
							
								                    var bufs = create(xs, split);
							 | 
						||
| 
								 | 
							
								                    var xs_ = xs.slice();
							 | 
						||
| 
								 | 
							
								                    
							 | 
						||
| 
								 | 
							
								                    var a_ = bufs.splice.apply(
							 | 
						||
| 
								 | 
							
								                        bufs, [ i, j ].concat(new Buffer(rep))
							 | 
						||
| 
								 | 
							
								                    );
							 | 
						||
| 
								 | 
							
								                    var a = [].slice.call(a_.slice());
							 | 
						||
| 
								 | 
							
								                    var b = xs_.splice.apply(xs_, [ i, j ].concat(rep));
							 | 
						||
| 
								 | 
							
								                    
							 | 
						||
| 
								 | 
							
								                    assert.eql(a, b,
							 | 
						||
| 
								 | 
							
								                        '[' + a.join(',') + ']'
							 | 
						||
| 
								 | 
							
								                            + ' != ' + 
							 | 
						||
| 
								 | 
							
								                        '[' + b.join(',') + ']'
							 | 
						||
| 
								 | 
							
								                    );
							 | 
						||
| 
								 | 
							
								                    
							 | 
						||
| 
								 | 
							
								                    assert.eql(bufs.slice(), new Buffer(xs_),
							 | 
						||
| 
								 | 
							
								                        '[' + [].join.call(bufs.slice(), ',') + ']'
							 | 
						||
| 
								 | 
							
								                            + ' != ' + 
							 | 
						||
| 
								 | 
							
								                        '[' + [].join.call(xs_, ',') + ']'
							 | 
						||
| 
								 | 
							
								                    );
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								}; 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.copy = function () {
							 | 
						||
| 
								 | 
							
								    var xs = [0,1,2,3,4,5,6,7,8,9];
							 | 
						||
| 
								 | 
							
								    var splits = [ [4,2,3,1], [2,2,2,2,2], [1,6,3,1], [9,2], [10], [5,5] ];
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    splits.forEach(function (split) {
							 | 
						||
| 
								 | 
							
								        var bufs = create(xs, split);
							 | 
						||
| 
								 | 
							
								        var buf = new Buffer(xs);
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        for (var i = 0; i < xs.length; i++) {
							 | 
						||
| 
								 | 
							
								            for (var j = i; j < xs.length; j++) {
							 | 
						||
| 
								 | 
							
								                var t0 = new Buffer(j - i);
							 | 
						||
| 
								 | 
							
								                var t1 = new Buffer(j - i);
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								                assert.eql(
							 | 
						||
| 
								 | 
							
								                    bufs.copy(t0, 0, i, j),
							 | 
						||
| 
								 | 
							
								                    buf.copy(t1, 0, i, j)
							 | 
						||
| 
								 | 
							
								                );
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								                assert.eql(
							 | 
						||
| 
								 | 
							
								                    [].slice.call(t0),
							 | 
						||
| 
								 | 
							
								                    [].slice.call(t1)
							 | 
						||
| 
								 | 
							
								                );
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.push = function () {
							 | 
						||
| 
								 | 
							
								    var bufs = Buffers();
							 | 
						||
| 
								 | 
							
								    bufs.push(new Buffer([0]));
							 | 
						||
| 
								 | 
							
								    bufs.push(new Buffer([1,2,3]));
							 | 
						||
| 
								 | 
							
								    bufs.push(new Buffer([4,5]));
							 | 
						||
| 
								 | 
							
								    bufs.push(new Buffer([6,7,8,9]));
							 | 
						||
| 
								 | 
							
								    assert.eql(
							 | 
						||
| 
								 | 
							
								        [].slice.call(bufs.slice()),
							 | 
						||
| 
								 | 
							
								        [0,1,2,3,4,5,6,7,8,9]
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    assert.throws(function () {
							 | 
						||
| 
								 | 
							
								        bufs.push(new Buffer([11,12]), 'moo');
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    assert.eql(bufs.buffers.length, 4);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.unshift = function () {
							 | 
						||
| 
								 | 
							
								    var bufs = Buffers();
							 | 
						||
| 
								 | 
							
								    bufs.unshift(new Buffer([6,7,8,9]));
							 | 
						||
| 
								 | 
							
								    bufs.unshift(new Buffer([4,5]));
							 | 
						||
| 
								 | 
							
								    bufs.unshift(new Buffer([1,2,3]));
							 | 
						||
| 
								 | 
							
								    bufs.unshift(new Buffer([0]));
							 | 
						||
| 
								 | 
							
								    assert.eql(
							 | 
						||
| 
								 | 
							
								        [].slice.call(bufs.slice()),
							 | 
						||
| 
								 | 
							
								        [0,1,2,3,4,5,6,7,8,9]
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								    assert.throws(function () {
							 | 
						||
| 
								 | 
							
								        bufs.unshift(new Buffer([-2,-1]), 'moo');
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    assert.eql(bufs.buffers.length, 4);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.get = function () {
							 | 
						||
| 
								 | 
							
								    var bufs = Buffers();
							 | 
						||
| 
								 | 
							
								    bufs.unshift(new Buffer([6,7,8,9]));
							 | 
						||
| 
								 | 
							
								    bufs.unshift(new Buffer([4,5]));
							 | 
						||
| 
								 | 
							
								    bufs.unshift(new Buffer([1,2,3]));
							 | 
						||
| 
								 | 
							
								    bufs.unshift(new Buffer([0]));
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.get(0), 0 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.get(1), 1 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.get(2), 2 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.get(3), 3 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.get(4), 4 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.get(5), 5 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.get(6), 6 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.get(7), 7 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.get(8), 8 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.get(9), 9 );
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.set = function () {
							 | 
						||
| 
								 | 
							
								    var bufs = Buffers();
							 | 
						||
| 
								 | 
							
								    bufs.push(new Buffer("Hel"));
							 | 
						||
| 
								 | 
							
								    bufs.push(new Buffer("lo"));
							 | 
						||
| 
								 | 
							
								    bufs.push(new Buffer("!"));
							 | 
						||
| 
								 | 
							
								    bufs.set(0, 'h'.charCodeAt(0) );
							 | 
						||
| 
								 | 
							
								    bufs.set(3, 'L'.charCodeAt(0) );
							 | 
						||
| 
								 | 
							
								    bufs.set(5, '.'.charCodeAt(0) );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.slice(0).toString(), 'helLo.' );
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.indexOf = function () {
							 | 
						||
| 
								 | 
							
								    var bufs = Buffers();
							 | 
						||
| 
								 | 
							
								    bufs.push(new Buffer("Hel"));
							 | 
						||
| 
								 | 
							
								    bufs.push(new Buffer("lo,"));
							 | 
						||
| 
								 | 
							
								    bufs.push(new Buffer(" how are "));
							 | 
						||
| 
								 | 
							
								    bufs.push(new Buffer("you"));
							 | 
						||
| 
								 | 
							
								    bufs.push(new Buffer("?"));
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.indexOf("Hello"), 0 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.indexOf("Hello", 1), -1 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.indexOf("ello"), 1 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.indexOf("ello", 1), 1 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.indexOf("ello", 2), -1 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.indexOf("e"), 1 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.indexOf("e", 2), 13 );
							 | 
						||
| 
								 | 
							
								    assert.eql( bufs.indexOf(new Buffer([0x65]), 2), 13 );
							 | 
						||
| 
								 | 
							
								};
							 |