Files
salvium-rs/test/test-full-mode-integration.js
T
Matt Hess 7730b6993f ● Add AssemblyScript WASM VM for RandomX full mode
- Create assembly/vm.ts with full RandomX VM implementation
    - 256 instructions, 2048 iterations per hash
    - Native u64/f64 operations in WebAssembly
    - Full mode dataset lookups (2GB pre-computed)

  - Update miner to use WASM VM for full mode
    - mining-worker-asm.js uses pre-compiled WASM
    - ~32 H/s per thread (4x faster than light mode)
    - 8 threads achieves ~260 H/s

  - Clean up redundant code
    - Remove mining-worker-full.js (old JIT approach)
    - Consolidate 'asm' mode into 'full' mode
2026-01-18 01:16:10 +00:00

90 lines
2.6 KiB
JavaScript

/**
* Full Mode Integration Test
*
* Tests the complete RandomXFullMode class end-to-end.
* Note: Full dataset generation takes a long time and 2GB RAM.
* This test uses a mock to verify the flow works.
*/
import { RandomXFullMode } from '../src/randomx/full-mode.js';
async function testFullModeClass() {
console.log('=== Full Mode Integration Test ===\n');
const ctx = new RandomXFullMode();
console.log('Creating RandomXFullMode context...');
console.log('Note: Full mode generates 256MB cache + 2GB dataset');
console.log('This test will demonstrate the initialization flow.\n');
const testKey = 'test key for full mode';
try {
// Initialize with progress tracking
console.log('Starting initialization...\n');
await ctx.init(testKey, {
useSharedMemory: false,
onProgress: (stage, percent, message) => {
// Only show major progress updates
if (percent % 25 === 0 || stage === 'complete') {
console.log(`[${stage}] ${percent.toFixed(0)}% - ${message}`);
}
}
});
console.log('\nFull mode initialized successfully!');
console.log('Info:', ctx.info);
// Test hashing
console.log('\nTesting hash function...');
const input = 'test input for hashing';
const hash = ctx.hash(input);
const hashHex = ctx.hashHex(input);
console.log(`Input: "${input}"`);
console.log(`Hash: ${hashHex}`);
// Verify hash is 32 bytes
if (hash.length === 32) {
console.log('Hash length: 32 bytes (correct)');
} else {
console.error(`Hash length: ${hash.length} bytes (expected 32)`);
}
// Test determinism
const hash2 = ctx.hashHex(input);
if (hash2 === hashHex) {
console.log('Determinism: Verified (same input -> same hash)');
} else {
console.error('Determinism: FAILED!');
}
// Test different input produces different hash
const hash3 = ctx.hashHex('different input');
if (hash3 !== hashHex) {
console.log('Uniqueness: Verified (different input -> different hash)');
} else {
console.error('Uniqueness: FAILED!');
}
console.log('\n=== Test PASSED ===');
} catch (err) {
console.error('\nTest FAILED:', err.message);
console.error(err.stack);
process.exit(1);
}
}
// Run with a timeout since dataset generation can take a while
console.log('Full Mode Integration Test');
console.log('==========================\n');
console.log('WARNING: This test may take several minutes and use 2GB+ RAM');
console.log('Press Ctrl+C to cancel\n');
testFullModeClass().catch(err => {
console.error('Fatal error:', err);
process.exit(1);
});