@c9up/technical-indicators-napi
Version:
A Rust-based indicator and Charts library compiled to napi.
60 lines (52 loc) • 2.06 kB
JavaScript
import { test } from '@japa/runner'
import pkg from '../../index.js'
const { patternMemory } = pkg
import { generateTestData } from './lib.mjs'
test.group('PatternMemory', (group) => {
let data
const kNeighbors = 5
group.setup(() => {
data = generateTestData(200)
})
test('all output arrays have the same length as input', ({ assert }) => {
const result = patternMemory(data, kNeighbors)
assert.equal(result.signal.length, data.length)
assert.equal(result.normalizedSignal.length, data.length)
assert.equal(result.bullishCount.length, data.length)
assert.equal(result.bearishCount.length, data.length)
assert.equal(result.avgDistance.length, data.length)
})
test('normalizedSignal values are between -1 and 1 where not NaN', ({ assert }) => {
const result = patternMemory(data, kNeighbors)
for (const val of result.normalizedSignal) {
if (!isNaN(val)) {
assert.isTrue(
val >= -1 && val <= 1,
`Expected normalizedSignal to be between -1 and 1 but got ${val}`
)
}
}
})
test('bullishCount[i] + bearishCount[i] <= kNeighbors', ({ assert }) => {
const result = patternMemory(data, kNeighbors)
for (let i = 0; i < data.length; i++) {
const bullish = result.bullishCount[i]
const bearish = result.bearishCount[i]
if (!isNaN(bullish) && !isNaN(bearish)) {
assert.isTrue(
bullish + bearish <= kNeighbors,
`Expected bullishCount + bearishCount <= ${kNeighbors} at index ${i}, got ${bullish + bearish}`
)
}
}
})
test('not enough data throws', ({ assert }) => {
const tinyData = generateTestData(2)
try {
patternMemory(tinyData)
assert.fail('Expected error was not thrown')
} catch (error) {
assert.isNotNull(error)
}
})
})