git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
153 lines
4.2 KiB
Rust
153 lines
4.2 KiB
Rust
//! WebAssembly tests for mincut-gated transformer.
|
|
//!
|
|
//! Run with: wasm-pack test --node
|
|
|
|
use ruvector_mincut_gated_transformer_wasm::{WasmGatePacket, WasmSpikePacket, WasmTransformer};
|
|
use wasm_bindgen_test::*;
|
|
|
|
wasm_bindgen_test_configure!(run_in_browser);
|
|
|
|
#[wasm_bindgen_test]
|
|
fn test_transformer_new() {
|
|
let transformer = WasmTransformer::new();
|
|
assert!(transformer.is_ok());
|
|
}
|
|
|
|
#[wasm_bindgen_test]
|
|
fn test_transformer_baseline() {
|
|
let transformer = WasmTransformer::new_baseline();
|
|
assert!(transformer.is_ok());
|
|
}
|
|
|
|
#[wasm_bindgen_test]
|
|
fn test_gate_packet_creation() {
|
|
let gate = WasmGatePacket::new();
|
|
assert_eq!(gate.lambda, 100);
|
|
assert_eq!(gate.lambda_prev, 100);
|
|
assert_eq!(gate.boundary_edges, 0);
|
|
assert_eq!(gate.partition_count, 1);
|
|
}
|
|
|
|
#[wasm_bindgen_test]
|
|
fn test_gate_packet_modification() {
|
|
let mut gate = WasmGatePacket::new();
|
|
gate.lambda = 150;
|
|
gate.lambda_prev = 140;
|
|
gate.boundary_edges = 10;
|
|
gate.partition_count = 3;
|
|
|
|
assert_eq!(gate.lambda, 150);
|
|
assert_eq!(gate.lambda_prev, 140);
|
|
assert_eq!(gate.boundary_edges, 10);
|
|
assert_eq!(gate.partition_count, 3);
|
|
}
|
|
|
|
#[wasm_bindgen_test]
|
|
fn test_spike_packet_creation() {
|
|
let spike = WasmSpikePacket::new();
|
|
assert_eq!(spike.fired, 1);
|
|
assert_eq!(spike.rate_q15, 0);
|
|
}
|
|
|
|
#[wasm_bindgen_test]
|
|
fn test_basic_inference() {
|
|
let mut transformer = WasmTransformer::new().unwrap();
|
|
|
|
let gate = WasmGatePacket::new();
|
|
let gate_js = serde_wasm_bindgen::to_value(&gate).unwrap();
|
|
|
|
let tokens = vec![1, 2, 3, 4];
|
|
let result = transformer.infer(&tokens, gate_js);
|
|
|
|
assert!(result.is_ok());
|
|
|
|
let result = result.unwrap();
|
|
assert_eq!(result.decision(), "Allow");
|
|
assert_eq!(result.reason(), "None");
|
|
assert_eq!(result.logits().len(), transformer.buffer_size());
|
|
}
|
|
|
|
#[wasm_bindgen_test]
|
|
fn test_inference_with_spikes() {
|
|
let mut transformer = WasmTransformer::new().unwrap();
|
|
|
|
let gate = WasmGatePacket::new();
|
|
let gate_js = serde_wasm_bindgen::to_value(&gate).unwrap();
|
|
|
|
let spike = WasmSpikePacket::new();
|
|
let spike_js = serde_wasm_bindgen::to_value(&spike).unwrap();
|
|
|
|
let tokens = vec![1, 2, 3, 4];
|
|
let result = transformer.infer_with_spikes(&tokens, gate_js, spike_js);
|
|
|
|
assert!(result.is_ok());
|
|
}
|
|
|
|
#[wasm_bindgen_test]
|
|
fn test_reset() {
|
|
let mut transformer = WasmTransformer::new().unwrap();
|
|
|
|
let gate = WasmGatePacket::new();
|
|
let gate_js = serde_wasm_bindgen::to_value(&gate).unwrap();
|
|
|
|
// Run inference
|
|
let tokens = vec![1, 2, 3, 4];
|
|
let _result = transformer.infer(&tokens, gate_js.clone());
|
|
|
|
// Reset
|
|
transformer.reset();
|
|
|
|
// Run again
|
|
let result = transformer.infer(&tokens, gate_js);
|
|
assert!(result.is_ok());
|
|
}
|
|
|
|
#[wasm_bindgen_test]
|
|
fn test_buffer_size() {
|
|
let transformer = WasmTransformer::new().unwrap();
|
|
assert_eq!(transformer.buffer_size(), 256); // Micro config logits
|
|
|
|
let transformer = WasmTransformer::new_baseline().unwrap();
|
|
assert_eq!(transformer.buffer_size(), 1024); // Baseline config logits
|
|
}
|
|
|
|
#[wasm_bindgen_test]
|
|
fn test_low_lambda_intervention() {
|
|
let mut transformer = WasmTransformer::new().unwrap();
|
|
|
|
let mut gate = WasmGatePacket::new();
|
|
gate.lambda = 10; // Very low lambda
|
|
gate.lambda_prev = 100;
|
|
|
|
let gate_js = serde_wasm_bindgen::to_value(&gate).unwrap();
|
|
|
|
let tokens = vec![1, 2, 3, 4];
|
|
let result = transformer.infer(&tokens, gate_js).unwrap();
|
|
|
|
// Should trigger intervention due to low lambda
|
|
assert_ne!(result.decision(), "Allow");
|
|
}
|
|
|
|
#[wasm_bindgen_test]
|
|
fn test_witness_fields() {
|
|
let mut transformer = WasmTransformer::new().unwrap();
|
|
|
|
let mut gate = WasmGatePacket::new();
|
|
gate.lambda = 100;
|
|
gate.lambda_prev = 95;
|
|
gate.boundary_edges = 5;
|
|
gate.partition_count = 3;
|
|
|
|
let gate_js = serde_wasm_bindgen::to_value(&gate).unwrap();
|
|
|
|
let tokens = vec![1, 2, 3, 4];
|
|
let result = transformer.infer(&tokens, gate_js).unwrap();
|
|
|
|
assert_eq!(result.lambda(), 100);
|
|
assert_eq!(result.lambda_prev(), 95);
|
|
assert_eq!(result.boundary_edges(), 5);
|
|
assert_eq!(result.partition_count(), 3);
|
|
assert!(result.effective_seq_len() > 0);
|
|
assert!(result.effective_window() > 0);
|
|
}
|