fn test_time_to_first_token_percentile()

in src/results.rs [359:444]


    fn test_time_to_first_token_percentile() {
        let request = Arc::from(TextGenerationRequest {
            id: None,
            prompt: "test".to_string(),
            num_prompt_tokens: 10,
            num_decode_tokens: None,
        });
        let mut response1 = TextGenerationAggregatedResponse::new(request.clone());
        response1.start_time = Some(tokio::time::Instant::now());
        response1.end_time =
            Some(tokio::time::Instant::now() + tokio::time::Duration::from_millis(100));
        response1.num_generated_tokens = 100;
        response1.failed = false;
        response1.times_to_tokens = vec![
            Duration::from_millis(100),
            Duration::from_millis(200),
            Duration::from_millis(300),
            Duration::from_millis(400),
            Duration::from_millis(500),
        ];

        let mut response2 = TextGenerationAggregatedResponse::new(request.clone());
        response2.start_time = Some(tokio::time::Instant::now());
        response2.end_time =
            Some(tokio::time::Instant::now() + tokio::time::Duration::from_millis(200));
        response2.num_generated_tokens = 100;
        response2.failed = false;
        response2.times_to_tokens = vec![
            Duration::from_millis(600),
            Duration::from_millis(700),
            Duration::from_millis(800),
            Duration::from_millis(900),
            Duration::from_millis(1000),
        ];

        let mut response3 = TextGenerationAggregatedResponse::new(request.clone());
        response3.start_time = Some(tokio::time::Instant::now());
        response3.end_time =
            Some(tokio::time::Instant::now() + tokio::time::Duration::from_millis(300));
        response3.num_generated_tokens = 100;
        response3.failed = false;
        response3.times_to_tokens = vec![
            Duration::from_millis(1100),
            Duration::from_millis(1200),
            Duration::from_millis(1300),
            Duration::from_millis(1400),
            Duration::from_millis(1500),
        ];

        let mut response4 = TextGenerationAggregatedResponse::new(request.clone());
        response4.start_time = Some(tokio::time::Instant::now());
        response4.end_time =
            Some(tokio::time::Instant::now() + tokio::time::Duration::from_millis(300));
        response4.num_generated_tokens = 100;
        response4.failed = false;
        response4.times_to_tokens = vec![
            Duration::from_millis(1600),
            Duration::from_millis(1700),
            Duration::from_millis(1800),
            Duration::from_millis(1900),
            Duration::from_millis(2000),
        ];

        let mut results = BenchmarkResults::new(
            "test".to_string(),
            ExecutorType::ConstantArrivalRate,
            ExecutorConfig {
                max_vus: 0,
                duration: Default::default(),
                rate: None,
            },
        );
        results.add_response(response1);
        results.add_response(response2);
        results.add_response(response3);
        results.add_response(response4);

        assert_eq!(
            results.time_to_first_token_percentile(0.9).unwrap(),
            Duration::from_millis(1450)
        );
        assert_eq!(
            results.time_to_first_token_percentile(0.5).unwrap(),
            Duration::from_millis(850)
        );
    }