2025-08-18 17:49:57 -07:00
/ * *
* Simple test setup for Brainy library
* No direct TensorFlow references - patches are handled internally by Brainy
* /
2025-08-20 09:42:38 -07:00
import { beforeAll , beforeEach , afterEach , afterAll } from 'vitest'
2025-08-18 17:49:57 -07:00
import { existsSync , rmSync } from 'fs'
import { join } from 'path'
2025-08-20 09:42:38 -07:00
// Configure model loading for tests
beforeAll ( ( ) = > {
// Set model path to local models directory
const modelsPath = join ( process . cwd ( ) , 'models' )
// Check if models exist
if ( existsSync ( modelsPath ) ) {
process . env . BRAINY_MODELS_PATH = modelsPath
console . log ( '✅ Using local models for tests:' , modelsPath )
} else {
console . warn ( '⚠️ Models directory not found, tests may download models' )
}
// Disable remote model downloads in tests to avoid network dependencies
process . env . BRAINY_ALLOW_REMOTE_MODELS = 'false'
// Set test environment
process . env . NODE_ENV = 'test'
// Disable verbose logging in tests
process . env . BRAINY_LOG_LEVEL = 'error'
} )
2025-08-18 17:49:57 -07:00
// Define the test utilities type for reuse
type TestUtilsType = {
createTestVector : ( dimensions : number ) = > number [ ]
timeout : number
}
// Extend global type definitions for both global and globalThis
declare global {
let testUtils : TestUtilsType | undefined
let __ENV__ : any
}
// Explicitly declare globalThis interface to ensure TypeScript recognizes these properties
declare global {
interface globalThis {
testUtils? : TestUtilsType | undefined
__ENV__? : any
}
}
// Clean up between tests
beforeEach ( ( ) = > {
// Clear any global state that might interfere with tests
if ( typeof globalThis !== 'undefined' && globalThis . __ENV__ ) {
delete globalThis . __ENV__
}
if ( typeof global !== 'undefined' && global . __ENV__ ) {
delete global . __ENV__
}
// Clean up test data directory to prevent file accumulation
const testDataDir = join ( process . cwd ( ) , 'brainy-data' )
if ( existsSync ( testDataDir ) ) {
try {
rmSync ( testDataDir , { recursive : true , force : true } )
} catch ( error ) {
// Ignore errors during cleanup
}
}
} )
// Clean up after each test
afterEach ( ( ) = > {
// Force garbage collection if available (requires --expose-gc flag)
if ( global . gc ) {
global . gc ( )
}
} )
// Final cleanup after all tests
afterAll ( ( ) = > {
// Clean up test data directory
const testDataDir = join ( process . cwd ( ) , 'brainy-data' )
if ( existsSync ( testDataDir ) ) {
try {
rmSync ( testDataDir , { recursive : true , force : true } )
} catch ( error ) {
// Ignore errors during cleanup
}
}
} )
// Add simple test utilities to both global and globalThis for compatibility
const testUtilsObject = {
// Create a simple test vector with predictable values
createTestVector : ( dimensions : number ) : number [ ] = > {
return Array . from ( { length : dimensions } , ( _ , i ) = > ( i + 1 ) / dimensions )
} ,
// Standard timeout for async operations
timeout : 30000
}
global . testUtils = testUtilsObject
globalThis . testUtils = testUtilsObject
// Set a clear test environment flag for embedding system
globalThis . __BRAINY_TEST_ENV__ = true
if ( typeof global !== 'undefined' ) {
( global as any ) . __BRAINY_TEST_ENV__ = true
}