//! Test suite for PPOParams minibatch_size field //! //! This test file verifies that PPOParams struct includes the minibatch_size field //! and properly handles serialization, deserialization, and VRAM-bounded validation. use ml::hyperopt::adapters::ppo::PPOParams; #[test] fn test_ppo_params_has_minibatch_size_field() { let params = PPOParams::default(); assert_eq!(params.minibatch_size, 128); } #[test] fn test_minibatch_size_serialization() { let params = PPOParams { policy_learning_rate: 1e-6, value_learning_rate: 0.001, clip_epsilon: 0.2, value_loss_coeff: 1.0, entropy_coeff: 0.01, minibatch_size: 128, }; let json = serde_json::to_string(¶ms).unwrap(); let deserialized: PPOParams = serde_json::from_str(&json).unwrap(); assert_eq!(deserialized.minibatch_size, 128); } #[test] fn test_minibatch_size_vram_bounds() { // Minibatch size should be within VRAM limits (trainers/ppo.rs:185) let params = PPOParams::default(); assert!(params.minibatch_size >= 64); assert!(params.minibatch_size <= 230); } #[test] fn test_minibatch_size_custom_values() { // Test creation with various minibatch sizes let test_sizes = vec![64, 100, 128, 150, 200, 230]; for size in test_sizes { let params = PPOParams { policy_learning_rate: 1e-5, value_learning_rate: 1e-4, clip_epsilon: 0.2, value_loss_coeff: 1.0, entropy_coeff: 0.05, minibatch_size: size, }; assert_eq!(params.minibatch_size, size); assert!( params.minibatch_size >= 64, "Size {} is below minimum", size ); assert!( params.minibatch_size <= 230, "Size {} exceeds VRAM limit", size ); } }