UNPKG

@c9up/technical-indicators-napi

Version:

A Rust-based indicator and Charts library compiled to napi.

67 lines (58 loc) 2.35 kB
import { test } from '@japa/runner' import pkg from '../../index.js' const { directionalMovementIndex } = pkg import { generateTestData } from "./lib.mjs"; test.group('Directional movement index', (group) => { test('test invalid period zero', ({ assert }) => { try { const data = generateTestData(10) directionalMovementIndex(data, 0) assert.fail() } catch (error) { assert.equal(error.message, 'Period must be greater than 0.') } }) test('test empty data', ({ assert }) => { const data = [] try { directionalMovementIndex(data, 14) assert.fail() } catch (error) { assert.equal(error.message, 'Not enough data points. Need at least 28') } }) test('test with insufficient data', ({ assert }) => { const testData = generateTestData(3) try { directionalMovementIndex(testData, 10) assert.fail() } catch (error) { assert.equal(error.message, 'Not enough data points. Need at least 20') } }) test('test invalid period', ({ assert }) => { const testData = generateTestData(30) try { directionalMovementIndex(testData, -1) assert.fail() } catch (error) { assert.equal(error.message, 'Period must be greater than 0.') } }) test('test valid calculation', ({ assert }) => { const testData = generateTestData(30) // Doit être >= 2 * période const period = 14 const result = directionalMovementIndex(testData, period) assert.lengthOf(result.plusDi, 30) assert.lengthOf(result.minusDi, 30) assert.lengthOf(result.adx, 30) // First `period` values should be NaN for plusDi and minusDi for (let i = 0; i < period; i++) { assert.isTrue(isNaN(result.plusDi[i]), `plusDi[${i}] should be NaN`) assert.isTrue(isNaN(result.minusDi[i]), `minusDi[${i}] should be NaN`) } // Values after the initial period should be valid (non-NaN) assert.isFalse(isNaN(result.plusDi[period]), `plusDi[${period}] should be a valid number`) assert.isFalse(isNaN(result.minusDi[period]), `minusDi[${period}] should be a valid number`) }) })