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.
		
		
		
		
		
			
		
			
				
					
					
						
							311 lines
						
					
					
						
							6.5 KiB
						
					
					
				
			
		
		
	
	
							311 lines
						
					
					
						
							6.5 KiB
						
					
					
				/* eslint-env mocha */ | 
						|
/* eslint-disable max-nested-callbacks */ | 
						|
 | 
						|
'use strict' | 
						|
 | 
						|
const { assert } = require('chai') | 
						|
const Hoopy = require('.') | 
						|
 | 
						|
test('interface is correct', () => { | 
						|
  assert.isFunction(Hoopy) | 
						|
  assert.lengthOf(Hoopy, 1) | 
						|
  assert.throws(() => new Hoopy(0)) | 
						|
  assert.doesNotThrow(() => new Hoopy(1)) | 
						|
  assert.throws(() => new Hoopy(-1)) | 
						|
  assert.throws(() => new Hoopy(1).push()) | 
						|
  assert.throws(() => new Hoopy(1).pop()) | 
						|
  assert.throws(() => new Hoopy(1).shift()) | 
						|
  assert.throws(() => new Hoopy(1).unshift()) | 
						|
}) | 
						|
 | 
						|
suite('instantiate, size=1:', () => { | 
						|
  let hoopy | 
						|
 | 
						|
  setup(() => { | 
						|
    hoopy = new Hoopy(1) | 
						|
  }) | 
						|
 | 
						|
  test('instance is array', () => { | 
						|
    assert.isTrue(Array.isArray(hoopy)) | 
						|
  }) | 
						|
 | 
						|
  test('length is correct', () => { | 
						|
    assert.equal(hoopy.length, 1) | 
						|
  }) | 
						|
 | 
						|
  test('[0] is undefined', () => { | 
						|
    assert.isUndefined(hoopy[0]) | 
						|
  }) | 
						|
 | 
						|
  test('[1] is undefined', () => { | 
						|
    assert.isUndefined(hoopy[1]) | 
						|
  }) | 
						|
 | 
						|
  test('[-1] is undefined', () => { | 
						|
    assert.isUndefined(hoopy[-1]) | 
						|
  }) | 
						|
 | 
						|
  test('grow method is implemented', () => { | 
						|
    assert.isFunction(hoopy.grow) | 
						|
    assert.lengthOf(hoopy.grow, 1) | 
						|
  }) | 
						|
 | 
						|
  test('grow throws if by=0', () => { | 
						|
    assert.throws(() => hoopy.grow(0)) | 
						|
  }) | 
						|
 | 
						|
  suite('assign to [0]:', () => { | 
						|
    setup(() => { | 
						|
      hoopy[0] = 'foo' | 
						|
    }) | 
						|
 | 
						|
    test('[0] is set correctly', () => { | 
						|
      assert.equal(hoopy[0], 'foo') | 
						|
    }) | 
						|
 | 
						|
    test('[1] is set correctly', () => { | 
						|
      assert.equal(hoopy[1], 'foo') | 
						|
    }) | 
						|
 | 
						|
    test('[-1] is set correctly', () => { | 
						|
      assert.equal(hoopy[-1], 'foo') | 
						|
    }) | 
						|
 | 
						|
    suite('assign to [1]:', () => { | 
						|
      setup(() => { | 
						|
        hoopy[1] = 'bar' | 
						|
      }) | 
						|
 | 
						|
      test('[0] is set correctly', () => { | 
						|
        assert.equal(hoopy[0], 'bar') | 
						|
      }) | 
						|
 | 
						|
      test('[1] is set correctly', () => { | 
						|
        assert.equal(hoopy[1], 'bar') | 
						|
      }) | 
						|
 | 
						|
      test('[-1] is set correctly', () => { | 
						|
        assert.equal(hoopy[-1], 'bar') | 
						|
      }) | 
						|
    }) | 
						|
 | 
						|
    suite('grow, by=1:', () => { | 
						|
      setup(() => { | 
						|
        hoopy.grow(1) | 
						|
      }) | 
						|
 | 
						|
      test('length is correct', () => { | 
						|
        assert.equal(hoopy.length, 2) | 
						|
      }) | 
						|
 | 
						|
      test('[0] is set correctly', () => { | 
						|
        assert.equal(hoopy[0], 'foo') | 
						|
      }) | 
						|
 | 
						|
      test('[1] is undefined', () => { | 
						|
        assert.isUndefined(hoopy[1]) | 
						|
      }) | 
						|
 | 
						|
      test('[-1] is undefined', () => { | 
						|
        assert.isUndefined(hoopy[-1]) | 
						|
      }) | 
						|
    }) | 
						|
  }) | 
						|
}) | 
						|
 | 
						|
suite('instantiate, size=2:', () => { | 
						|
  let hoopy | 
						|
 | 
						|
  setup(() => { | 
						|
    hoopy = new Hoopy(2) | 
						|
  }) | 
						|
 | 
						|
  test('length is correct', () => { | 
						|
    assert.equal(hoopy.length, 2) | 
						|
  }) | 
						|
 | 
						|
  suite('assign to [0]:', () => { | 
						|
    setup(() => { | 
						|
      hoopy[0] = 'foo' | 
						|
    }) | 
						|
 | 
						|
    test('[0] is set correctly', () => { | 
						|
      assert.equal(hoopy[0], 'foo') | 
						|
    }) | 
						|
 | 
						|
    test('[1] is undefined', () => { | 
						|
      assert.isUndefined(hoopy[1]) | 
						|
    }) | 
						|
 | 
						|
    test('[2] is set correctly', () => { | 
						|
      assert.equal(hoopy[2], 'foo') | 
						|
    }) | 
						|
 | 
						|
    test('[3] is undefined', () => { | 
						|
      assert.isUndefined(hoopy[3]) | 
						|
    }) | 
						|
 | 
						|
    test('[-1] is undefined', () => { | 
						|
      assert.isUndefined(hoopy[-1]) | 
						|
    }) | 
						|
 | 
						|
    suite('assign to [1]:', () => { | 
						|
      setup(() => { | 
						|
        hoopy[1] = 'bar' | 
						|
      }) | 
						|
 | 
						|
      test('[0] is set correctly', () => { | 
						|
        assert.equal(hoopy[0], 'foo') | 
						|
      }) | 
						|
 | 
						|
      test('[1] is set correctly', () => { | 
						|
        assert.equal(hoopy[1], 'bar') | 
						|
      }) | 
						|
 | 
						|
      test('[2] is set correctly', () => { | 
						|
        assert.equal(hoopy[2], 'foo') | 
						|
      }) | 
						|
 | 
						|
      test('[-1] is set correctly', () => { | 
						|
        assert.equal(hoopy[-1], 'bar') | 
						|
      }) | 
						|
 | 
						|
      suite('assign to [2]:', () => { | 
						|
        setup(() => { | 
						|
          hoopy[2] = 'baz' | 
						|
        }) | 
						|
 | 
						|
        test('[0] is set correctly', () => { | 
						|
          assert.equal(hoopy[0], 'baz') | 
						|
        }) | 
						|
 | 
						|
        test('[1] is set correctly', () => { | 
						|
          assert.equal(hoopy[1], 'bar') | 
						|
        }) | 
						|
 | 
						|
        test('[2] is set correctly', () => { | 
						|
          assert.equal(hoopy[2], 'baz') | 
						|
        }) | 
						|
 | 
						|
        test('[-1] is set correctly', () => { | 
						|
          assert.equal(hoopy[-1], 'bar') | 
						|
        }) | 
						|
 | 
						|
        suite('grow, by=1:', () => { | 
						|
          setup(() => { | 
						|
            hoopy.grow(1) | 
						|
          }) | 
						|
 | 
						|
          test('length is correct', () => { | 
						|
            assert.equal(hoopy.length, 3) | 
						|
          }) | 
						|
 | 
						|
          test('[0] is undefined', () => { | 
						|
            assert.isUndefined(hoopy[0]) | 
						|
          }) | 
						|
 | 
						|
          test('[1] is set correctly', () => { | 
						|
            assert.equal(hoopy[1], 'bar') | 
						|
          }) | 
						|
 | 
						|
          test('[2] is set correctly', () => { | 
						|
            assert.equal(hoopy[2], 'baz') | 
						|
          }) | 
						|
 | 
						|
          test('[3] is undefined', () => { | 
						|
            assert.isUndefined(hoopy[3]) | 
						|
          }) | 
						|
        }) | 
						|
 | 
						|
        suite('grow, by=2:', () => { | 
						|
          setup(() => { | 
						|
            hoopy.grow(2) | 
						|
          }) | 
						|
 | 
						|
          test('length is correct', () => { | 
						|
            assert.equal(hoopy.length, 4) | 
						|
          }) | 
						|
 | 
						|
          test('[0] is undefined', () => { | 
						|
            assert.isUndefined(hoopy[0]) | 
						|
          }) | 
						|
 | 
						|
          test('[1] is set correctly', () => { | 
						|
            assert.equal(hoopy[1], 'bar') | 
						|
          }) | 
						|
 | 
						|
          test('[2] is set correctly', () => { | 
						|
            assert.equal(hoopy[2], 'baz') | 
						|
          }) | 
						|
 | 
						|
          test('[3] is undefined', () => { | 
						|
            assert.isUndefined(hoopy[3]) | 
						|
          }) | 
						|
 | 
						|
          test('[4] is undefined', () => { | 
						|
            assert.isUndefined(hoopy[4]) | 
						|
          }) | 
						|
 | 
						|
          test('[5] is set correctly', () => { | 
						|
            assert.equal(hoopy[5], 'bar') | 
						|
          }) | 
						|
        }) | 
						|
      }) | 
						|
    }) | 
						|
  }) | 
						|
}) | 
						|
 | 
						|
suite('instantiate and overflow, size=3:', () => { | 
						|
  let hoopy | 
						|
 | 
						|
  setup(() => { | 
						|
    hoopy = new Hoopy(3) | 
						|
    hoopy[2] = 'foo' | 
						|
    hoopy[3] = 'bar' | 
						|
    hoopy[4] = 'baz' | 
						|
  }) | 
						|
 | 
						|
  test('data is correct', () => { | 
						|
    assert.equal(hoopy.length, 3) | 
						|
    assert.equal(hoopy[2], 'foo') | 
						|
    assert.equal(hoopy[3], 'bar') | 
						|
    assert.equal(hoopy[4], 'baz') | 
						|
    assert.equal(hoopy[0], hoopy[3]) | 
						|
    assert.equal(hoopy[1], hoopy[4]) | 
						|
  }) | 
						|
 | 
						|
  test('slice works correctly', () => { | 
						|
    assert.equal(hoopy.slice(0, 3)[2], hoopy[2]) | 
						|
  }) | 
						|
 | 
						|
  suite('grow, by=1:', () => { | 
						|
    setup(() => { | 
						|
      hoopy.grow(1) | 
						|
    }) | 
						|
 | 
						|
    test('data is correct', () => { | 
						|
      assert.equal(hoopy.length, 4) | 
						|
      assert.equal(hoopy[2], 'foo') | 
						|
      assert.equal(hoopy[3], 'bar') | 
						|
      assert.equal(hoopy[4], 'baz') | 
						|
      assert.equal(hoopy[0], hoopy[4]) | 
						|
      assert.isUndefined(hoopy[1]) | 
						|
    }) | 
						|
  }) | 
						|
 | 
						|
  suite('grow, by=2:', () => { | 
						|
    setup(() => { | 
						|
      hoopy.grow(2) | 
						|
    }) | 
						|
 | 
						|
    test('data is correct', () => { | 
						|
      assert.equal(hoopy.length, 5) | 
						|
      assert.equal(hoopy[2], 'foo') | 
						|
      assert.equal(hoopy[3], 'bar') | 
						|
      assert.equal(hoopy[4], 'baz') | 
						|
      assert.isUndefined(hoopy[0]) | 
						|
      assert.isUndefined(hoopy[1]) | 
						|
    }) | 
						|
  }) | 
						|
}) | 
						|
 | 
						|
 |