OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-booking / node_modules / random-array-iterator / test.js

97 lines · javascript ref:
const tape = require('tape')
const Iterator = require('./')

tape('basic', function (t) {
  let diff = 0

  for (let n = 0; n < 5; n++) {
    const values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    const old = values.join(',')

    const cnts = {}
    for (const i of new Iterator(values)) {
      cnts[i] = (cnts[i] || 0) + 1
      t.same(cnts[i], 1)
    }

    if (values.join(',') !== old) diff++
    t.same(Object.keys(cnts).length, values.length)
  }

  t.ok(diff > 1)
  t.end()
})

tape('requeue', function (t) {
  const values = [1, 2, 3, 4, 5]

  let requeues = 2

  const cnts = {}
  const ite = new Iterator(values)
  for (const i of ite) {
    if ((i === 1 || i === 3) && requeues-- > 0) {
      ite.requeue()
    }
    cnts[i] = (cnts[i] || 0) + 1
  }

  t.same(cnts, {
    1: 2,
    2: 1,
    3: 2,
    4: 1,
    5: 1
  })

  t.end()
})

tape('dequeue', function (t) {
  const values = [1, 2, 3, 4, 5]

  const ite = new Iterator(values)
  for (const i of ite) {
    if (i === 2 || i === 5) ite.dequeue()
  }

  t.same(values.sort(), [1, 3, 4])
  t.end()
})

tape('dequeue all', function (t) {
  const values = [1, 2, 3, 4, 5]

  const trace = []
  const ite = new Iterator(values)
  for (const i of ite) {
    ite.dequeue()
    trace.push(i)
  }

  t.same(trace.sort(), [1, 2, 3, 4, 5])
  t.same(values, [])
  t.end()
})

tape('dequeue and requeue', function (t) {
  const values = [1, 2, 3, 4, 5]

  const ite = new Iterator(values)
  const trace = []
  let requeue = true

  for (const i of ite) {
    if (i === 2 || i === 5) ite.dequeue()
    if (requeue && i === 3) {
      requeue = false
      ite.requeue()
    }
    trace.push(i)
  }

  t.same(values.sort(), [1, 3, 4])
  t.same(trace.sort(), [1, 2, 3, 3, 4, 5])
  t.end()
})