bap_frame_batch_test.cpp 1.2 KB

1234567891011121314151617181920212223242526
  1. #include <cassert>
  2. #include <vector>
  3. #include "../Sunrise/src/server/transport/bap_frame_batch.h"
  4. struct Peer { unsigned streamSize=100, outputSize=0, next=0; };
  5. int main() {
  6. using sunrise::server::transport::drain_frame_batch;
  7. Peer p;
  8. std::vector<unsigned> order;
  9. bool blocked=false;
  10. auto drain=[&](Peer& peer) { if(peer.streamSize) { order.push_back(peer.next++); --peer.streamSize; peer.outputSize=2; } return true; };
  11. auto flush=[&](Peer& peer) { if(!blocked) peer.outputSize=0; return true; };
  12. assert(drain_frame_batch(p,drain,flush) && p.next==16);
  13. blocked=true;
  14. assert(drain_frame_batch(p,drain,flush) && p.next==17 && p.outputSize==2);
  15. assert(drain_frame_batch(p,drain,flush) && p.next==17);
  16. blocked=false; flush(p);
  17. while(p.streamSize) assert(drain_frame_batch(p,drain,flush));
  18. assert(p.next==100 && order.size()==100);
  19. for(unsigned i=0;i<order.size();++i) assert(order[i]==i);
  20. unsigned attempts=0;
  21. auto partial=[&](Peer&) { ++attempts; return true; };
  22. p.streamSize=3;
  23. assert(drain_frame_batch(p,partial,flush) && attempts==1);
  24. assert(!drain_frame_batch(p,[](Peer&){return false;},flush));
  25. assert(!drain_frame_batch(p,drain,[](Peer&){return false;}));
  26. }