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.
		
		
		
		
			
				
					312 lines
				
				6.5 KiB
			
		
		
			
		
	
	
					312 lines
				
				6.5 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								/* 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])
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 |