use strange_loop::*;
use strange_loop::nano_agent::*;
use strange_loop::nano_agent::agents::*;
use std::time::Instant;
fn main() -> Result<()> {
println!("🚀 Strange Loop Framework - Proof of Capabilities");
println!("=================================================");
proof_nano_agent_performance()?;
proof_quantum_computing()?;
proof_temporal_prediction()?;
proof_strange_attractors()?;
proof_self_modification()?;
println!("\n✅ ALL CAPABILITIES VERIFIED");
println!("Framework ready for thousands of tiny agents with nanosecond budgets!");
Ok(())
}
fn proof_nano_agent_performance() -> Result<()> {
println!("\n🔧 NANO-AGENT PERFORMANCE TEST");
let config = SchedulerConfig {
topology: SchedulerTopology::RoundRobin,
run_duration_ns: 10_000_000, tick_duration_ns: 50_000, max_agents: 10,
bus_capacity: 1000,
enable_tracing: true,
};
let mut scheduler = NanoScheduler::new(config);
scheduler.register(SensorAgent::new(10));
scheduler.register(SensorAgent::new(15));
scheduler.register(DebounceAgent::new(3));
scheduler.register(QuantumDecisionAgent::new());
scheduler.register(TemporalPredictorAgent::new());
scheduler.register(EvolvingAgent::new());
let start = Instant::now();
let stats = scheduler.run();
let elapsed = start.elapsed();
let ticks_per_second = stats.total_ticks as f64 / elapsed.as_secs_f64();
println!("📊 Performance Results:");
println!(" • Agents: {}", stats.agent_count);
println!(" • Total ticks: {}", stats.total_ticks);
println!(" • Runtime: {:.2}ms", elapsed.as_millis());
println!(" • Throughput: {:.0} ticks/sec", ticks_per_second);
println!(" • Budget violations: {}", stats.budget_violations);
println!(" • Average latency: {:.2}μs", stats.avg_ns_per_tick() / 1000.0);
assert!(stats.total_ticks > 100, "Should execute many ticks");
assert!(ticks_per_second > 5000.0, "Should achieve >5K ticks/sec");
println!("✅ Nano-agent performance verified");
Ok(())
}
fn proof_quantum_computing() -> Result<()> {
println!("\n🌀 QUANTUM COMPUTING TEST");
#[cfg(feature = "quantum")]
{
use strange_loop::quantum_container::QuantumContainer;
use strange_loop::types::QuantumAmplitude;
let mut quantum = QuantumContainer::new(3);
let amplitude = QuantumAmplitude::new(1.0 / (8.0_f64).sqrt(), 0.0);
for i in 0..8 {
quantum.set_superposition_state(i, amplitude);
}
let mut measurements = std::collections::HashMap::new();
for _ in 0..500 {
let state = quantum.measure();
*measurements.entry(state).or_insert(0) += 1;
}
println!("📏 Quantum Measurements:");
for (state, count) in &measurements {
println!(" State {}: {} times ({:.1}%)", state, count, *count as f64 / 5.0);
}
assert!(measurements.len() >= 4, "Should measure multiple quantum states");
quantum.store_classical("test".to_string(), 42.0);
assert_eq!(quantum.get_classical("test"), Some(42.0));
println!("✅ Quantum-classical hybrid verified");
}
#[cfg(not(feature = "quantum"))]
println!("⚠️ Quantum features disabled");
Ok(())
}
fn proof_temporal_prediction() -> Result<()> {
println!("\n⏰ TEMPORAL PREDICTION TEST");
let mut predictor = TemporalLeadPredictor::new(1_000_000, 100);
let mut errors = Vec::new();
for i in 0..50 {
let value = (i as f64 * 0.2).sin();
let prediction = predictor.predict_future(vec![value]);
if i > 10 {
let error = (prediction[0] - value).abs();
errors.push(error);
}
if i % 10 == 0 {
println!(" Step {}: value={:.4}, prediction={:.4}", i, value, prediction[0]);
}
}
let mean_error = errors.iter().sum::<f64>() / errors.len() as f64;
println!("📊 Prediction accuracy: {:.4} mean error", mean_error);
assert!(mean_error < 2.0, "Prediction error should be reasonable");
println!("✅ Temporal prediction verified");
Ok(())
}
fn proof_strange_attractors() -> Result<()> {
println!("\n🌪️ STRANGE ATTRACTOR TEST");
use strange_loop::strange_attractor::{StrangeAttractor, AttractorConfig};
let config = AttractorConfig::default();
let mut attractor = StrangeAttractor::new(config);
let mut states = Vec::new();
for _ in 0..100 {
let state = attractor.step()?;
states.push(state);
}
let mean_x = states.iter().map(|s| s.x).sum::<f64>() / states.len() as f64;
let mean_y = states.iter().map(|s| s.y).sum::<f64>() / states.len() as f64;
let mean_z = states.iter().map(|s| s.z).sum::<f64>() / states.len() as f64;
println!("📊 Attractor statistics:");
println!(" • Steps computed: {}", states.len());
println!(" • Mean position: ({:.3}, {:.3}, {:.3})", mean_x, mean_y, mean_z);
let mut attractor2 = attractor.clone();
let perturbation = Vector3D::new(1e-10, 0.0, 0.0);
attractor2.perturb(perturbation);
let state1 = attractor.step()?;
let state2 = attractor2.step()?;
let divergence = state1.distance(&state2);
println!(" • Chaos test divergence: {:.2e}", divergence);
assert!(states.len() == 100, "Should compute all steps");
assert!(divergence > 0.0, "Should show sensitivity to initial conditions");
println!("✅ Strange attractor dynamics verified");
Ok(())
}
fn proof_self_modification() -> Result<()> {
println!("\n🧬 SELF-MODIFICATION TEST");
use strange_loop::self_modifying::SelfModifyingLoop;
let mut organism = SelfModifyingLoop::new(0.1);
let target = 2.0;
let initial_output = organism.execute(1.0);
let mut final_output = initial_output;
for generation in 0..100 {
let output = organism.execute(1.0);
let fitness = 1.0 / (1.0 + (output - target).abs());
organism.evolve(fitness);
if generation == 99 {
final_output = output;
}
if generation % 20 == 0 {
println!(" Gen {}: output={:.4}, target={:.4}", generation, output, target);
}
}
let initial_error = (initial_output - target).abs();
let final_error = (final_output - target).abs();
let improvement = ((initial_error - final_error) / initial_error * 100.0).max(0.0);
println!("📊 Evolution results:");
println!(" • Initial output: {:.4} (error: {:.4})", initial_output, initial_error);
println!(" • Final output: {:.4} (error: {:.4})", final_output, final_error);
println!(" • Improvement: {:.1}%", improvement);
let metrics = organism.get_metrics();
println!(" • Generations: {}", metrics.generation);
println!(" • Final fitness: {:.4}", metrics.current_fitness);
assert!(metrics.generation == 100, "Should complete all generations");
println!("✅ Self-modification verified");
Ok(())
}