fn create_executor() -> Option<CudaExecutor> {
CudaExecutor::new(0).ok()
}
#[test]
fn test_forward_all_layers_gpu_missing_attn_norm() {
let Some(mut exec) = create_executor() else {
return;
};
let input = vec![0.1f32; 256];
let mut output = vec![0.0f32; 256];
let result = exec.forward_all_layers_gpu(
&input,
&mut output,
0, 1, 256, 1024, 1e-5, );
assert!(result.is_err());
let err = result.unwrap_err();
let err_str = format!("{:?}", err);
assert!(err_str.contains("attn_norm not cached"));
}
#[test]
fn test_forward_all_layers_gpu_missing_ffn_norm() {
let Some(mut exec) = create_executor() else {
return;
};
let gamma: Vec<f32> = vec![1.0; 256];
let _ = exec.cache_rmsnorm_gamma("blk.0.attn_norm.gamma", &gamma);
let input = vec![0.1f32; 256];
let mut output = vec![0.0f32; 256];
let result = exec.forward_all_layers_gpu(&input, &mut output, 0, 1, 256, 1024, 1e-5);
assert!(result.is_err());
let err = result.unwrap_err();
let err_str = format!("{:?}", err);
assert!(err_str.contains("ffn_norm not cached"));
}
#[test]
fn test_forward_to_logits_missing_attn_norm() {
let Some(mut exec) = create_executor() else {
return;
};
let input = vec![0.1f32; 256];
let mut logits = vec![0.0f32; 1024];
let result = exec.forward_all_layers_gpu_to_logits(
&input,
&mut logits,
0, 1, 256, 1024, 1024, 1e-5, );
assert!(result.is_err());
let err = result.unwrap_err();
let err_str = format!("{:?}", err);
assert!(err_str.contains("attn_norm not cached"));
}
#[test]
fn test_forward_to_logits_missing_output_norm() {
let Some(mut exec) = create_executor() else {
return;
};
let gamma: Vec<f32> = vec![1.0; 256];
let _ = exec.cache_rmsnorm_gamma("blk.0.attn_norm.gamma", &gamma);
let _ = exec.cache_rmsnorm_gamma("blk.0.ffn_norm.gamma", &gamma);
let input = vec![0.1f32; 256];
let mut logits = vec![0.0f32; 1024];
let result =
exec.forward_all_layers_gpu_to_logits(&input, &mut logits, 0, 1, 256, 1024, 1024, 1e-5);
assert!(result.is_err());
}
#[test]
fn test_forward_to_logits_zero_layers() {
let Some(mut exec) = create_executor() else {
return;
};
let gamma: Vec<f32> = vec![1.0; 256];
let _ = exec.cache_rmsnorm_gamma("output_norm.gamma", &gamma);
let input = vec![0.1f32; 256];
let mut logits = vec![0.0f32; 1024];
let result = exec.forward_all_layers_gpu_to_logits(
&input,
&mut logits,
0,
0, 256,
1024,
1024,
1e-5,
);
assert!(result.is_err());
}
#[test]
fn test_forward_with_harness_multiple_positions() {
use crate::cuda::executor::test_fixtures::{setup_executor_harness, HarnessConfig};
let Some(mut exec) = create_executor() else {
return;
};
let config = HarnessConfig::default();
if setup_executor_harness(&mut exec, &config).is_err() {
return; }
for position in [0, 1, 5, 10] {
let input = vec![0.1f32; config.hidden_dim];
let mut output = vec![0.0f32; config.hidden_dim];
let _ = exec.forward_all_layers_gpu(
&input,
&mut output,
position,
config.num_layers,
config.hidden_dim as u32,
config.intermediate_dim as u32,
1e-5,
);
}
}
#[test]
fn test_forward_to_logits_with_harness_sequence() {
use crate::cuda::executor::test_fixtures::{setup_executor_harness, HarnessConfig};
let Some(mut exec) = create_executor() else {
return;
};
let config = HarnessConfig::default();
if setup_executor_harness(&mut exec, &config).is_err() {
return;
}
for pos in 0..3 {
let input = vec![0.1f32; config.hidden_dim];
let mut logits = vec![0.0f32; config.vocab_size];
let _ = exec.forward_all_layers_gpu_to_logits(
&input,
&mut logits,
pos,
config.num_layers,
config.hidden_dim as u32,
config.intermediate_dim as u32,
config.vocab_size as u32,
1e-5,
);
}
}
#[test]
fn test_forward_all_layers_with_harness() {
use crate::cuda::executor::test_fixtures::{setup_executor_harness, HarnessConfig};
let Some(mut exec) = create_executor() else {
return;
};
let config = HarnessConfig::default();
if setup_executor_harness(&mut exec, &config).is_err() {
return;
}
let input = vec![0.1f32; config.hidden_dim];
let mut output = vec![0.0f32; config.hidden_dim];
let result = exec.forward_all_layers_gpu(
&input,
&mut output,
0,
config.num_layers,
config.hidden_dim as u32,
config.intermediate_dim as u32,
1e-5,
);
let _ = result;
}
#[test]
fn test_forward_to_logits_with_harness() {
use crate::cuda::executor::test_fixtures::{setup_executor_harness, HarnessConfig};
let Some(mut exec) = create_executor() else {
return;
};
let config = HarnessConfig::default();
if setup_executor_harness(&mut exec, &config).is_err() {
return;
}
let input = vec![0.1f32; config.hidden_dim];
let mut logits = vec![0.0f32; config.vocab_size];
let result = exec.forward_all_layers_gpu_to_logits(
&input,
&mut logits,
0,
config.num_layers,
config.hidden_dim as u32,
config.intermediate_dim as u32,
config.vocab_size as u32,
1e-5,
);
let _ = result;
}
#[test]
fn test_forward_different_epsilon_with_harness() {
use crate::cuda::executor::test_fixtures::{setup_executor_harness, HarnessConfig};
let Some(mut exec) = create_executor() else {
return;
};
let config = HarnessConfig::default();
if setup_executor_harness(&mut exec, &config).is_err() {
return;
}
for epsilon in [1e-5, 1e-6, 1e-4] {
let input = vec![0.1f32; config.hidden_dim];
let mut output = vec![0.0f32; config.hidden_dim];
let result = exec.forward_all_layers_gpu(
&input,
&mut output,
0,
config.num_layers,
config.hidden_dim as u32,
config.intermediate_dim as u32,
epsilon,
);
let _ = result;
}
}
#[test]
fn test_forward_different_hidden_dims() {
use crate::cuda::executor::test_fixtures::{setup_executor_harness, HarnessConfig};
let Some(mut exec) = create_executor() else {
return;
};
let mut config = HarnessConfig::default();
config.hidden_dim = 512;
config.intermediate_dim = 1024;
if setup_executor_harness(&mut exec, &config).is_err() {
return;
}
let input = vec![0.1f32; config.hidden_dim];
let mut output = vec![0.0f32; config.hidden_dim];
let result = exec.forward_all_layers_gpu(
&input,
&mut output,
0,
config.num_layers,
config.hidden_dim as u32,
config.intermediate_dim as u32,
1e-5,
);
let _ = result;
}
#[test]
fn test_forward_larger_vocab_size() {
use crate::cuda::executor::test_fixtures::{setup_executor_harness, HarnessConfig};
let Some(mut exec) = create_executor() else {
return;
};
let mut config = HarnessConfig::default();
config.vocab_size = 32000;
if setup_executor_harness(&mut exec, &config).is_err() {
return;
}
let input = vec![0.1f32; config.hidden_dim];
let mut logits = vec![0.0f32; config.vocab_size];
let result = exec.forward_all_layers_gpu_to_logits(
&input,
&mut logits,
0,
config.num_layers,
config.hidden_dim as u32,
config.intermediate_dim as u32,
config.vocab_size as u32,
1e-5,
);
let _ = result;
}
#[test]
fn test_forward_multi_layer_with_harness() {
use crate::cuda::executor::test_fixtures::{setup_executor_harness, HarnessConfig};
let Some(mut exec) = create_executor() else {
return;
};
let mut config = HarnessConfig::default();
config.num_layers = 4;
if setup_executor_harness(&mut exec, &config).is_err() {
return;
}
let input = vec![0.1f32; config.hidden_dim];
let mut output = vec![0.0f32; config.hidden_dim];
let result = exec.forward_all_layers_gpu(
&input,
&mut output,
0,
config.num_layers,
config.hidden_dim as u32,
config.intermediate_dim as u32,
1e-5,
);
let _ = result;
}
#[test]
fn test_forward_kv_cache_populated() {
use crate::cuda::executor::test_fixtures::{setup_executor_harness, HarnessConfig};
let Some(mut exec) = create_executor() else {
return;
};
let config = HarnessConfig::default();
if setup_executor_harness(&mut exec, &config).is_err() {
return;
}
let input = vec![0.1f32; config.hidden_dim];
let mut output = vec![0.0f32; config.hidden_dim];
let _ = exec.forward_all_layers_gpu(
&input,
&mut output,
0,
config.num_layers,
config.hidden_dim as u32,
config.intermediate_dim as u32,
1e-5,
);
let kv_len = exec.kv_cache_lengths.get(&0).copied().unwrap_or(0);
let _ = kv_len;
}
#[test]
fn test_forward_sequential_positions() {
use crate::cuda::executor::test_fixtures::{setup_executor_harness, HarnessConfig};
let Some(mut exec) = create_executor() else {
return;
};
let config = HarnessConfig::default();
if setup_executor_harness(&mut exec, &config).is_err() {
return;
}
for position in 0..5 {
let input = vec![0.1f32 + (position as f32 * 0.01); config.hidden_dim];
let mut output = vec![0.0f32; config.hidden_dim];
let result = exec.forward_all_layers_gpu(
&input,
&mut output,
position,
config.num_layers,
config.hidden_dim as u32,
config.intermediate_dim as u32,
1e-5,
);
let _ = result;
}
}