import { expect } from 'expect'
-import { CircularArray } from '../../../lib/circular-array.cjs'
+import { CircularBuffer } from '../../../lib/circular-buffer.cjs'
import {
DynamicClusterPool,
DynamicThreadPool,
FixedClusterPool,
FixedThreadPool,
- WorkerChoiceStrategies
+ WorkerChoiceStrategies,
} from '../../../lib/index.cjs'
describe('Selection strategies test suite', () => {
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
await pool.destroy()
pool = new DynamicThreadPool(
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
// We need to clean up the resources after our test
await pool.destroy()
runTime: {
aggregate: false,
average: false,
- median: false
+ median: false,
},
waitTime: {
aggregate: false,
average: false,
- median: false
+ median: false,
},
elu: {
aggregate: false,
average: false,
- median: false
- }
+ median: false,
+ },
})
await pool.destroy()
pool = new DynamicThreadPool(
runTime: {
aggregate: false,
average: false,
- median: false
+ median: false,
},
waitTime: {
aggregate: false,
average: false,
- median: false
+ median: false,
},
elu: {
aggregate: false,
average: false,
- median: false
- }
+ median: false,
+ },
})
// We need to clean up the resources after our test
await pool.destroy()
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
waitTime: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
elu: {
idle: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
active: {
- history: new CircularArray()
- }
- }
+ history: expect.any(CircularBuffer),
+ },
+ },
})
}
expect(
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
waitTime: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
elu: {
idle: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
active: {
- history: new CircularArray()
- }
- }
+ history: expect.any(CircularBuffer),
+ },
+ },
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
await pool.destroy()
pool = new DynamicThreadPool(
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
// We need to clean up the resources after our test
await pool.destroy()
runTime: {
aggregate: false,
average: false,
- median: false
+ median: false,
},
waitTime: {
aggregate: false,
average: false,
- median: false
+ median: false,
},
elu: {
aggregate: false,
average: false,
- median: false
- }
+ median: false,
+ },
})
await pool.destroy()
pool = new DynamicThreadPool(
runTime: {
aggregate: false,
average: false,
- median: false
+ median: false,
},
waitTime: {
aggregate: false,
average: false,
- median: false
+ median: false,
},
elu: {
aggregate: false,
average: false,
- median: false
- }
+ median: false,
+ },
})
// We need to clean up the resources after our test
await pool.destroy()
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
waitTime: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
elu: {
idle: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
active: {
- history: new CircularArray()
- }
- }
+ history: expect.any(CircularBuffer),
+ },
+ },
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
waitTime: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
elu: {
idle: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
active: {
- history: new CircularArray()
- }
- }
+ history: expect.any(CircularBuffer),
+ },
+ },
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
await pool.destroy()
pool = new DynamicThreadPool(
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
// We need to clean up the resources after our test
await pool.destroy()
runTime: {
aggregate: true,
average: false,
- median: false
+ median: false,
},
waitTime: {
aggregate: true,
average: false,
- median: false
+ median: false,
},
elu: {
aggregate: false,
average: false,
- median: false
- }
+ median: false,
+ },
})
await pool.destroy()
pool = new DynamicThreadPool(
runTime: {
aggregate: true,
average: false,
- median: false
+ median: false,
},
waitTime: {
aggregate: true,
average: false,
- median: false
+ median: false,
},
elu: {
aggregate: false,
average: false,
- median: false
- }
+ median: false,
+ },
})
// We need to clean up the resources after our test
await pool.destroy()
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
waitTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
elu: {
idle: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
active: {
- history: new CircularArray()
- }
- }
+ history: expect.any(CircularBuffer),
+ },
+ },
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
waitTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
elu: {
idle: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
active: {
- history: new CircularArray()
- }
- }
+ history: expect.any(CircularBuffer),
+ },
+ },
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
await pool.destroy()
pool = new DynamicThreadPool(
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
// We need to clean up the resources after our test
await pool.destroy()
runTime: {
aggregate: false,
average: false,
- median: false
+ median: false,
},
waitTime: {
aggregate: false,
average: false,
- median: false
+ median: false,
},
elu: {
aggregate: true,
average: false,
- median: false
- }
+ median: false,
+ },
})
await pool.destroy()
pool = new DynamicThreadPool(
runTime: {
aggregate: false,
average: false,
- median: false
+ median: false,
},
waitTime: {
aggregate: false,
average: false,
- median: false
+ median: false,
},
elu: {
aggregate: true,
average: false,
- median: false
- }
+ median: false,
+ },
})
// We need to clean up the resources after our test
await pool.destroy()
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
waitTime: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
elu: expect.objectContaining({
idle: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
active: expect.objectContaining({
- history: expect.any(CircularArray)
- })
- })
+ history: expect.any(CircularBuffer),
+ }),
+ }),
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
waitTime: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
elu: expect.objectContaining({
idle: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
active: expect.objectContaining({
- history: expect.any(CircularArray)
- })
- })
+ history: expect.any(CircularBuffer),
+ }),
+ }),
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
await pool.destroy()
pool = new DynamicThreadPool(
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
// We need to clean up the resources after our test
await pool.destroy()
runTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
waitTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
elu: {
aggregate: true,
average: true,
- median: false
- }
+ median: false,
+ },
})
await pool.destroy()
pool = new DynamicThreadPool(
runTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
waitTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
elu: {
aggregate: true,
average: true,
- median: false
- }
+ median: false,
+ },
})
// We need to clean up the resources after our test
await pool.destroy()
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
waitTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
elu: expect.objectContaining({
idle: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
active: expect.objectContaining({
- history: expect.any(CircularArray)
- })
- })
+ history: expect.any(CircularBuffer),
+ }),
+ }),
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
waitTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
elu: expect.objectContaining({
idle: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
active: expect.objectContaining({
- history: expect.any(CircularArray)
- })
- })
+ history: expect.any(CircularBuffer),
+ }),
+ }),
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
{
workerChoiceStrategy: WorkerChoiceStrategies.FAIR_SHARE,
workerChoiceStrategyOptions: {
- runTime: { median: true }
- }
+ runTime: { median: true },
+ },
}
)
// TODO: Create a better test to cover `FairShareChoiceStrategy#choose`
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
waitTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
elu: expect.objectContaining({
idle: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
active: expect.objectContaining({
- history: expect.any(CircularArray)
- })
- })
+ history: expect.any(CircularBuffer),
+ }),
+ }),
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
)
for (const workerNode of pool.workerNodes) {
workerNode.strategyData = {
- virtualTaskEndTimestamp: performance.now()
+ virtualTaskEndTimestamp: performance.now(),
}
}
pool.setWorkerChoiceStrategy(workerChoiceStrategy)
)
for (const workerNode of pool.workerNodes) {
workerNode.strategyData = {
- virtualTaskEndTimestamp: performance.now()
+ virtualTaskEndTimestamp: performance.now(),
}
}
pool.setWorkerChoiceStrategy(workerChoiceStrategy)
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
await pool.destroy()
pool = new DynamicThreadPool(
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
// We need to clean up the resources after our test
await pool.destroy()
runTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
waitTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
elu: {
aggregate: false,
average: false,
- median: false
- }
+ median: false,
+ },
})
await pool.destroy()
pool = new DynamicThreadPool(
runTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
waitTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
elu: {
aggregate: false,
average: false,
- median: false
- }
+ median: false,
+ },
})
// We need to clean up the resources after our test
await pool.destroy()
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
waitTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
elu: {
idle: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
active: {
- history: new CircularArray()
- }
- }
+ history: expect.any(CircularBuffer),
+ },
+ },
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
waitTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
elu: {
idle: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
active: {
- history: new CircularArray()
- }
- }
+ history: expect.any(CircularBuffer),
+ },
+ },
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
{
workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN,
workerChoiceStrategyOptions: {
- runTime: { median: true }
- }
+ runTime: { median: true },
+ },
}
)
// TODO: Create a better test to cover `WeightedRoundRobinWorkerChoiceStrategy#choose`
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
waitTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
elu: {
idle: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
active: {
- history: new CircularArray()
- }
- }
+ history: expect.any(CircularBuffer),
+ },
+ },
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
await pool.destroy()
pool = new DynamicThreadPool(
)
expect(pool.workerChoiceStrategiesContext.getPolicy()).toStrictEqual({
dynamicWorkerUsage: false,
- dynamicWorkerReady: true
+ dynamicWorkerReady: true,
})
// We need to clean up the resources after our test
await pool.destroy()
runTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
waitTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
elu: {
aggregate: false,
average: false,
- median: false
- }
+ median: false,
+ },
})
await pool.destroy()
pool = new DynamicThreadPool(
runTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
waitTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
elu: {
aggregate: false,
average: false,
- median: false
- }
+ median: false,
+ },
})
// We need to clean up the resources after our test
await pool.destroy()
'./tests/worker-files/thread/testWorker.mjs',
{
workerChoiceStrategy:
- WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN
+ WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN,
}
)
// TODO: Create a better test to cover `InterleavedWeightedRoundRobinWorkerChoiceStrategy#choose`
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
waitTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
elu: {
idle: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
active: {
- history: new CircularArray()
- }
- }
+ history: expect.any(CircularBuffer),
+ },
+ },
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(
'./tests/worker-files/thread/testWorker.mjs',
{
workerChoiceStrategy:
- WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN
+ WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN,
}
)
// TODO: Create a better test to cover `InterleavedWeightedRoundRobinWorkerChoiceStrategy#choose`
maxQueued: 0,
sequentiallyStolen: 0,
stolen: 0,
- failed: 0
+ failed: 0,
},
runTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
waitTime: expect.objectContaining({
- history: expect.any(CircularArray)
+ history: expect.any(CircularBuffer),
}),
elu: {
idle: {
- history: new CircularArray()
+ history: expect.any(CircularBuffer),
},
active: {
- history: new CircularArray()
- }
- }
+ history: expect.any(CircularBuffer),
+ },
+ },
})
expect(workerNode.usage.tasks.executed).toBeGreaterThanOrEqual(0)
expect(workerNode.usage.tasks.executed).toBeLessThanOrEqual(