#include "speech_diagnostics.h"
#include <cassert>
#include <memory>

int main() {
    SpeechFragmentClock clock;
    clock.part(true,1000000);
    clock.part(false,1200000);
    clock.part(false,3100000);
    assert(clock.frame.parts==3 && clock.frame.max_part_gap_us==1900000);
    assert(clock.frame.first_us==1000000);
    clock.part(true,3200000);
    assert(clock.frame.identity==2 && clock.frame.parts==1 && clock.frame.max_part_gap_us==0);
    auto old=std::make_shared<SpeechPlaybackMetrics>(); old->generation=1;
    old->accept(7056,1); old->accept(7056,2); old->in_flight=1;
    old->closed=true; old->discarded=old->accepted-old->played-old->in_flight;
    assert(old->discarded==1);
    auto current=std::make_shared<SpeechPlaybackMetrics>(); current->generation=2;
    // A write completing after stop/replacement still belongs to generation 1.
    old->writes(14,7056,80000,24000,1,0,1000000,1080000,true);
    old->in_flight=0; old->discarded=old->accepted-old->played;
    assert(old->played==1 && old->discarded==1 && old->bytes_written==7056);
    assert(old->write_calls==14 && old->slow_writes==1 && old->max_write_us==24000);
    assert(current->write_calls==0 && current->bytes_written==0);
    current->accept(7056,1);
    current->writes(2,512,24000,22000,1,1,1100000,1124000,false);
    assert(current->played==0 && current->bytes_written==512 && current->write_errors==1);
}
