#![cfg(feature = "gpu-wgpu")]
#![allow(unused_macros, unused_imports, unused_variables, unused_mut, dead_code)]
macro_rules! gpu_test {
($name:ident, $body:block) => {
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
fn $name() $body
};
}
use std::time::{Duration, Instant};
#[cfg(feature = "gpu-wgpu")]
use trueno_viz::monitor::ffi::wgpu::{GpuAdapterInfo, WgpuBackendType, WgpuMonitor};
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_26_wgpu_detects_all_gpus() {
let monitor = WgpuMonitor::new();
let adapters = monitor.adapters();
assert!(!adapters.is_empty(), "FALSIFIED Claim 26: No GPUs detected by WGPU");
println!("Detected {} GPU adapter(s):", adapters.len());
for adapter in adapters {
println!(" - {} ({:?})", adapter.name, adapter.backend);
}
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(all(feature = "gpu-wgpu", target_os = "macos"))]
fn claim_27_dual_amd_w5700x_enumerated() {
let monitor = WgpuMonitor::new();
if monitor.has_dual_amd() {
let amd_count =
monitor.adapters().iter().filter(|a| a.name.contains("AMD") && a.is_discrete()).count();
assert_eq!(amd_count, 2, "FALSIFIED Claim 27: Expected 2 AMD GPUs, found {}", amd_count);
} else {
println!("Skipping Claim 27: No dual AMD configuration detected");
}
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_28_gpu_names_accurate() {
let monitor = WgpuMonitor::new();
for adapter in monitor.adapters() {
assert!(!adapter.name.is_empty(), "FALSIFIED Claim 28: GPU name is empty");
assert!(!adapter.name.contains("Unknown"), "FALSIFIED Claim 28: GPU name is 'Unknown'");
println!("GPU name: {}", adapter.name);
}
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(all(feature = "gpu-wgpu", target_os = "macos"))]
fn claim_29_metal_backend_on_macos() {
let monitor = WgpuMonitor::new();
if let Some(primary) = monitor.primary_adapter() {
assert!(
matches!(primary.backend, WgpuBackendType::Metal),
"FALSIFIED Claim 29: Expected Metal backend on macOS, got {:?}",
primary.backend
);
}
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(all(feature = "gpu-wgpu", target_os = "linux"))]
fn claim_30_vulkan_backend_on_linux() {
let monitor = WgpuMonitor::new();
if let Some(primary) = monitor.primary_adapter() {
assert!(
matches!(primary.backend, WgpuBackendType::Vulkan),
"FALSIFIED Claim 30: Expected Vulkan backend on Linux, got {:?}",
primary.backend
);
}
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_31_discrete_gpu_type() {
let monitor = WgpuMonitor::new();
for adapter in monitor.adapters() {
if adapter.name.contains("Radeon")
|| adapter.name.contains("GeForce")
|| adapter.name.contains("RTX")
{
assert!(
adapter.is_discrete(),
"FALSIFIED Claim 31: {} should be DiscreteGpu",
adapter.name
);
}
}
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_32_wgpu_init_under_100ms() {
let start = Instant::now();
let _monitor = WgpuMonitor::new();
let elapsed = start.elapsed();
assert!(
elapsed < Duration::from_millis(100),
"FALSIFIED Claim 32: WGPU init took {elapsed:?}, expected < 100ms"
);
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_33_adapter_enum_under_50ms() {
let monitor = WgpuMonitor::new();
let start = Instant::now();
let _adapters = monitor.adapters();
let elapsed = start.elapsed();
assert!(
elapsed < Duration::from_millis(50),
"FALSIFIED Claim 33: Adapter enumeration took {elapsed:?}, expected < 50ms"
);
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_34_non_blocking_discovery() {
let start = Instant::now();
let monitor = WgpuMonitor::new();
let _ = monitor.adapters();
let _ = monitor.discrete_gpu_count();
let elapsed = start.elapsed();
assert!(
elapsed < Duration::from_millis(500),
"FALSIFIED Claim 34: Discovery appears to block ({elapsed:?})"
);
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_35_graceful_without_gpu() {
let monitor = WgpuMonitor::new();
let adapters = monitor.adapters();
let count = monitor.discrete_gpu_count();
let primary = monitor.primary_adapter();
println!(
"Adapters: {}, Discrete: {}, Primary: {:?}",
adapters.len(),
count,
primary.map(|a| a.name.clone())
);
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_36_queue_submission_tracking() {
let mut monitor = WgpuMonitor::new();
let initial = monitor.queue_submissions(0);
monitor.record_submission(0);
monitor.record_submission(0);
monitor.record_submission(0);
let final_count = monitor.queue_submissions(0);
assert_eq!(
final_count,
initial + 3,
"FALSIFIED Claim 36: Expected {} submissions, got {}",
initial + 3,
final_count
);
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_37_buffer_allocation_tracking() {
let mut monitor = WgpuMonitor::new();
let test_size = 1024 * 1024; monitor.record_buffer_allocation(0, test_size);
let tracked = monitor.buffer_allocated_bytes(0);
let error = (tracked as i64 - test_size as i64).unsigned_abs();
assert!(error <= 1024, "FALSIFIED Claim 37: Buffer tracking error {error} > 1KB");
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_38_compute_dispatch_counting() {
let mut monitor = WgpuMonitor::new();
let initial = monitor.compute_dispatches(0);
monitor.record_dispatch(0);
monitor.record_dispatch(0);
let final_count = monitor.compute_dispatches(0);
assert_eq!(final_count, initial + 2, "FALSIFIED Claim 38: Dispatch count mismatch");
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_39_per_gpu_isolation() {
let mut monitor = WgpuMonitor::new();
monitor.record_dispatch(0);
monitor.record_dispatch(0);
monitor.record_dispatch(0);
let gpu1_dispatches = monitor.compute_dispatches(1);
assert_eq!(gpu1_dispatches, 0, "FALSIFIED Claim 39: GPU 1 affected by GPU 0 operations");
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_40_wgpu_is_safe_rust() {
let _ = WgpuMonitor::new();
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
fn claim_41_wgpu_feature_optional() {
#[cfg(feature = "gpu-wgpu")]
{
let _ = WgpuMonitor::new();
}
#[cfg(not(feature = "gpu-wgpu"))]
{
}
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_42_graceful_fallback() {
let monitor = WgpuMonitor::new();
let _ = monitor.adapters();
let _ = monitor.discrete_gpu_count();
let _ = monitor.primary_adapter();
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_43_error_handling() {
let monitor = WgpuMonitor::new();
let result = monitor.adapter_info(999);
assert!(result.is_none(), "FALSIFIED Claim 43: Invalid index should return None");
let dispatches = monitor.compute_dispatches(999);
assert_eq!(dispatches, 0, "Invalid GPU should return 0 dispatches");
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_44_memory_limits() {
let monitor = WgpuMonitor::new();
if let Some(adapter) = monitor.primary_adapter() {
let limits = monitor.adapter_limits(0);
assert!(limits.max_buffer_size > 0, "FALSIFIED Claim 44: Invalid memory limits");
println!("Max buffer size: {} bytes", limits.max_buffer_size);
}
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_45_instance_reusable() {
let mut monitor = WgpuMonitor::new();
for i in 0..100 {
let adapters = monitor.adapters();
let _ = monitor.collect_metrics();
if i == 0 {
println!("First collection: {} adapters", adapters.len());
}
}
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_46_adapter_caching() {
let monitor = WgpuMonitor::new();
let adapters1 = monitor.adapters();
let adapters2 = monitor.adapters();
assert_eq!(
adapters1.len(),
adapters2.len(),
"FALSIFIED Claim 46: Adapter count changed between calls"
);
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_47_async_compatible() {
let monitor = WgpuMonitor::new();
fn assert_send_sync<T: Send + Sync>() {}
assert_send_sync::<WgpuMonitor>();
let _ = monitor.adapters();
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_48_load_balancing() {
let mut monitor = WgpuMonitor::new();
if monitor.discrete_gpu_count() >= 2 {
for i in 0..10 {
let gpu = monitor.next_gpu_round_robin();
monitor.record_dispatch(gpu);
}
let gpu0_load = monitor.compute_dispatches(0);
let gpu1_load = monitor.compute_dispatches(1);
let diff = (gpu0_load as i64 - gpu1_load as i64).unsigned_abs();
assert!(
diff <= 2,
"FALSIFIED Claim 48: Imbalanced load: GPU0={gpu0_load}, GPU1={gpu1_load}"
);
}
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_49_hotplug_handling() {
let mut monitor = WgpuMonitor::new();
monitor.invalidate_adapter(0);
let info = monitor.adapter_info(0);
monitor.refresh_adapters();
let _ = monitor.adapters();
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn claim_50_update_rate() {
let mut monitor = WgpuMonitor::new();
let start = Instant::now();
let mut updates = 0;
while start.elapsed() < Duration::from_millis(200) {
let _ = monitor.collect_metrics();
updates += 1;
}
assert!(updates >= 2, "FALSIFIED Claim 50: Only {updates} updates in 200ms (need 10Hz)");
let hz = f64::from(updates) / 0.2;
println!("Update rate: {hz:.1} Hz");
}
#[test]
#[ignore = "Requires real GPU - run with --ignored"]
#[cfg(feature = "gpu-wgpu")]
fn test_wgpu_monitor_full_api() {
let mut monitor = WgpuMonitor::new();
let _ = monitor.adapters();
let _ = monitor.discrete_gpu_count();
let _ = monitor.primary_adapter();
let _ = monitor.adapter_info(0);
let _ = monitor.adapter_limits(0);
let _ = monitor.has_dual_amd();
monitor.record_submission(0);
monitor.record_dispatch(0);
monitor.record_buffer_allocation(0, 1024);
let _ = monitor.queue_submissions(0);
let _ = monitor.compute_dispatches(0);
let _ = monitor.buffer_allocated_bytes(0);
let _ = monitor.next_gpu_round_robin();
monitor.invalidate_adapter(0);
monitor.refresh_adapters();
let _ = monitor.collect_metrics();
}