use api_gemini::
{
client ::Client,
GenerateContentRequest,
Content,
Part,
};
#[ tokio::test ]
async fn test_comparator_creation()
{
let client = Client::new().expect( "Failed to create client" );
let _comparator = client.comparator();
}
#[ tokio::test ]
async fn test_compare_models_sequential()
{
let client = Client::new().expect( "Failed to create client" );
let comparator = client.comparator();
let request = GenerateContentRequest
{
contents: vec![ Content
{
parts: vec![ Part
{
text: Some( "Say 'Hello'".to_string() ),
..Default::default()
} ],
role: "user".to_string(),
} ],
..Default::default()
};
let model_names = vec![ "gemini-1.5-flash", "gemini-1.5-pro" ];
let results = comparator.compare_models( &model_names, &request ).await.expect( "Comparison failed" );
assert_eq!( results.results.len(), 2 );
assert!( results.total_time_ms > 0 );
}
#[ tokio::test ]
async fn test_compare_models_parallel()
{
let client = Client::new().expect( "Failed to create client" );
let comparator = client.comparator();
let request = GenerateContentRequest
{
contents: vec![ Content
{
parts: vec![ Part
{
text: Some( "Say 'Hello'".to_string() ),
..Default::default()
} ],
role: "user".to_string(),
} ],
..Default::default()
};
let model_names = vec![ "gemini-1.5-flash", "gemini-1.5-pro" ];
let results = comparator.compare_models_parallel( &model_names, &request ).await.expect( "Comparison failed" );
assert_eq!( results.results.len(), 2 );
assert!( results.total_time_ms > 0 );
}
#[ tokio::test ]
async fn test_comparison_fastest_slowest()
{
let client = Client::new().expect( "Failed to create client" );
let comparator = client.comparator();
let request = GenerateContentRequest
{
contents: vec![ Content
{
parts: vec![ Part
{
text: Some( "Count to 3".to_string() ),
..Default::default()
} ],
role: "user".to_string(),
} ],
..Default::default()
};
let model_names = vec![ "gemini-1.5-flash", "gemini-1.5-pro" ];
let results = comparator.compare_models( &model_names, &request ).await.expect( "Comparison failed" );
if let Some( fastest ) = results.get_fastest()
{
assert!( fastest.success );
assert!( results.fastest_model.is_some() );
}
if let Some( slowest ) = results.get_slowest()
{
assert!( slowest.success );
assert!( results.slowest_model.is_some() );
}
}
#[ tokio::test ]
async fn test_comparison_token_counts()
{
let client = Client::new().expect( "Failed to create client" );
let comparator = client.comparator();
let request = GenerateContentRequest
{
contents: vec![ Content
{
parts: vec![ Part
{
text: Some( "What is AI?".to_string() ),
..Default::default()
} ],
role: "user".to_string(),
} ],
..Default::default()
};
let model_names = vec![ "gemini-1.5-flash" ];
let results = comparator.compare_models( &model_names, &request ).await.expect( "Comparison failed" );
if let Some( result ) = results.results.first()
{
if result.success
{
let _input = result.input_tokens;
let _output = result.output_tokens;
}
}
}
#[ tokio::test ]
async fn test_parallel_comparison_speed()
{
let client = Client::new().expect( "Failed to create client" );
let comparator = client.comparator();
let request = GenerateContentRequest
{
contents: vec![ Content
{
parts: vec![ Part
{
text: Some( "Quick test".to_string() ),
..Default::default()
} ],
role: "user".to_string(),
} ],
..Default::default()
};
let model_names = vec![ "gemini-1.5-flash", "gemini-1.5-pro" ];
let sequential_results = comparator.compare_models( &model_names, &request ).await.expect( "Sequential comparison failed" );
let parallel_results = comparator.compare_models_parallel( &model_names, &request ).await.expect( "Parallel comparison failed" );
assert_eq!( sequential_results.results.len(), parallel_results.results.len() );
assert!( sequential_results.total_time_ms > 0 );
assert!( parallel_results.total_time_ms > 0 );
}
#[ tokio::test ]
async fn test_average_response_time_calculation()
{
let client = Client::new().expect( "Failed to create client" );
let comparator = client.comparator();
let request = GenerateContentRequest
{
contents: vec![ Content
{
parts: vec![ Part
{
text: Some( "Test".to_string() ),
..Default::default()
} ],
role: "user".to_string(),
} ],
..Default::default()
};
let model_names = vec![ "gemini-1.5-flash", "gemini-1.5-pro" ];
let results = comparator.compare_models( &model_names, &request ).await.expect( "Comparison failed" );
let avg = results.average_response_time();
if results.success_rate() > 0.0
{
assert!( avg > 0.0 );
}
}
#[ tokio::test ]
async fn test_comparison_error_handling()
{
let client = Client::new().expect( "Failed to create client" );
let comparator = client.comparator();
let request = GenerateContentRequest
{
contents: vec![ Content
{
parts: vec![ Part
{
text: Some( "Test".to_string() ),
..Default::default()
} ],
role: "user".to_string(),
} ],
..Default::default()
};
let model_names = vec![ "gemini-1.5-flash", "invalid-model-xyz" ];
let results = comparator.compare_models( &model_names, &request ).await.expect( "Comparison should handle errors" );
assert_eq!( results.results.len(), 2 );
let failures = results.results.iter().filter( | r | !r.success ).count();
assert!( failures > 0 ); }