!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 

uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/usr/local/lib/node_modules/homebridge-camera-ui/node_modules/number-allocator/test/   drwxr-xr-x
Free 13.18 GB of 57.97 GB (22.73%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     test.js (6.97 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// Copyright Takatoshi Kondo 2021
//
// Distributed under the MIT License

'use strict'

const NumberAllocator = require('..').NumberAllocator
const assert = require('chai').assert

describe('number-allocator', function () {
  it('should create without number', function (done) {
    const a = NumberAllocator(0, 0)
    assert.equal(a.intervalCount(), 1)
    done()
  })
  it('should work with one number', function (done) {
    const a = new NumberAllocator(0, 0)
    assert.equal(a.intervalCount(), 1)
    assert.equal(a.firstVacant(), 0)

    assert.equal(a.alloc(), 0)
    assert.equal(a.intervalCount(), 0)

    assert.equal(a.alloc(), null)
    assert.equal(a.firstVacant(), null)

    a.free(0)

    assert.equal(a.intervalCount(), 1)
    assert.equal(a.alloc(), 0)
    assert.equal(a.intervalCount(), 0)

    assert.equal(a.alloc(), null)

    assert.equal(a.use(0), false)
    assert.equal(a.use(1), false)
    assert.equal(a.use(-1), false)
    a.free(0)
    assert.equal(a.intervalCount(), 1)
    assert.equal(a.use(0), true)
    assert.equal(a.intervalCount(), 0)
    assert.equal(a.use(1), false)

    assert.equal(a.alloc(), null)

    a.free(0)
    assert.equal(a.intervalCount(), 1)

    assert.equal(a.alloc(), 0)
    assert.equal(a.intervalCount(), 0)

    done()
  })
  it('should work with one number (offset)', function (done) {
    const a = new NumberAllocator(5, 5)
    assert.equal(a.intervalCount(), 1)
    assert.equal(a.firstVacant(), 5)

    assert.equal(a.alloc(), 5)
    assert.equal(a.intervalCount(), 0)

    assert.equal(a.alloc(), null)
    assert.equal(a.firstVacant(), null)

    a.free(5)

    assert.equal(a.intervalCount(), 1)
    assert.equal(a.alloc(), 5)
    assert.equal(a.intervalCount(), 0)

    assert.equal(a.alloc(), null)

    assert.equal(a.use(5), false)
    assert.equal(a.use(1), false)
    a.free(5)
    assert.equal(a.intervalCount(), 1)
    assert.equal(a.use(5), true)
    assert.equal(a.intervalCount(), 0)
    assert.equal(a.use(1), false)

    assert.equal(a.alloc(), null)

    a.free(5)
    assert.equal(a.intervalCount(), 1)

    assert.equal(a.alloc(), 5)
    assert.equal(a.intervalCount(), 0)

    done()
  })
  it('should alloc/free work well on interval', function (done) {
    const a = new NumberAllocator(0, 4)
    assert.equal(a.intervalCount(), 1)
    assert.equal(a.alloc(), 0)
    assert.equal(a.intervalCount(), 1)

    assert.equal(a.alloc(), 1)
    assert.equal(a.intervalCount(), 1)

    assert.equal(a.alloc(), 2)
    assert.equal(a.intervalCount(), 1)

    assert.equal(a.alloc(), 3)
    assert.equal(a.intervalCount(), 1)

    assert.equal(a.alloc(), 4)
    assert.equal(a.intervalCount(), 0)

    assert.equal(a.alloc(), null)

    a.free(2)
    assert.equal(a.intervalCount(), 1)

    assert.equal(a.alloc(), 2)
    assert.equal(a.intervalCount(), 0)

    done()
  })
  it('should use/free work well on interval', function (done) {
    const a = new NumberAllocator(0, 4)
    assert.equal(a.intervalCount(), 1)
    assert.equal(a.use(0), true)
    assert.equal(a.intervalCount(), 1)
    assert.equal(a.use(4), true)
    assert.equal(a.intervalCount(), 1)
    assert.equal(a.use(2), true)
    assert.equal(a.intervalCount(), 2)
    assert.equal(a.use(1), true)
    assert.equal(a.intervalCount(), 1)
    assert.equal(a.use(3), true)
    assert.equal(a.intervalCount(), 0)
    assert.equal(a.use(0), false)
    assert.equal(a.use(1), false)
    assert.equal(a.use(2), false)
    assert.equal(a.use(3), false)
    assert.equal(a.use(4), false)
    a.free(2)
    assert.equal(a.intervalCount(), 1)
    assert.equal(a.use(2), true)
    assert.equal(a.intervalCount(), 0)
    done()
  })
  it('should clear work well and interval be updated well', function (done) {
    const a = new NumberAllocator(0, 4)

    assert.equal(a.alloc(), 0)
    assert.equal(a.intervalCount(), 1)

    assert.equal(a.use(1), true)

    assert.equal(a.alloc(), 2)
    assert.equal(a.intervalCount(), 1)

    assert.equal(a.use(3), true)

    assert.equal(a.alloc(), 4)
    assert.equal(a.intervalCount(), 0)

    a.clear()
    assert.equal(a.intervalCount(), 1)

    assert.equal(a.alloc(), 0)
    assert.equal(a.intervalCount(), 1)

    assert.equal(a.use(1), true)

    assert.equal(a.alloc(), 2)
    assert.equal(a.intervalCount(), 1)

    assert.equal(a.use(3), true)

    assert.equal(a.alloc(), 4)
    assert.equal(a.intervalCount(), 0)

    done()
  })
  it('should interval be concatinated well', function (done) {
    const prepare = function () {
      const a = new NumberAllocator(0, 4)
      assert.equal(a.use(0), true)
      assert.equal(a.use(1), true)
      assert.equal(a.use(2), true)
      assert.equal(a.use(3), true)
      assert.equal(a.use(4), true)
      return a
    }

    let a = prepare()
    a.free(0)
    assert.equal(a.intervalCount(), 1)
    a.free(4)
    assert.equal(a.intervalCount(), 2)
    a.free(2)
    assert.equal(a.intervalCount(), 3)
    a.free(1)
    assert.equal(a.intervalCount(), 2)
    // concat left and right
    a.free(3)
    assert.equal(a.intervalCount(), 1)

    a = prepare()
    a.free(3)
    assert.equal(a.intervalCount(), 1)
    // ....v
    // end concat right
    a.free(4)
    assert.equal(a.intervalCount(), 1)

    a = prepare()
    a.free(1)
    assert.equal(a.intervalCount(), 1)
    // begin concat left
    a.free(0)
    assert.equal(a.intervalCount(), 1)

    a = prepare()
    a.free(2)
    assert.equal(a.intervalCount(), 1)
    // begin no concat
    a.free(0)
    assert.equal(a.intervalCount(), 2)

    a = prepare()
    a.free(1)
    assert.equal(a.intervalCount(), 1)
    a.free(4)
    assert.equal(a.intervalCount(), 2)
    // concat left
    a.free(2)
    assert.equal(a.intervalCount(), 2)

    a = prepare()
    a.free(4)
    assert.equal(a.intervalCount(), 1)
    a.free(1)
    assert.equal(a.intervalCount(), 2)
    // concat right
    a.free(3)
    assert.equal(a.intervalCount(), 2)

    done()
  })
  it('should work well with negative numbers', function (done) {
    const a = new NumberAllocator(-2, 3)
    assert.equal(a.intervalCount(), 1)
    assert.equal(a.use(2), true)
    assert.equal(a.intervalCount(), 2)

    const value = a.alloc()
    assert.notEqual(value, null)
    assert.equal(value, -2)
    assert.equal(a.intervalCount(), 2)

    assert.equal(a.use(0), true)
    assert.equal(a.intervalCount(), 3)

    done()
  })
  it('should dump', function (done) {
    const a = new NumberAllocator(0, 4)
    a.dump()
    assert.equal(a.use(0), true)
    a.dump()
    assert.equal(a.use(1), true)
    a.dump()
    assert.equal(a.use(2), true)
    a.dump()
    a.free(0)
    a.dump()
    a.free(2)
    a.dump()
    a.free(1)
    a.dump()
    done()
  })
  it('should fail use the same number twice in the middle of interval', function (done) {
    const a = new NumberAllocator(0, 4)
    assert.equal(a.use(1), true)
    assert.equal(a.use(1), false)
    done()
  })
  it('should do nothing non allocated free', function (done) {
    const a = NumberAllocator(0, 1)
    // if DEBUG="nuber-allocator:error" then output error log
    a.free(0)
    a.free(1)
    a.free(5)
    done()
  })
})

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0058 ]--