func: static void test_function(const TestStruct test_sample)
  
  {
  
      int ret, i;
  
      void **output_data  = NULL;
  
      AVAudioFifo *afifo  = av_audio_fifo_alloc(test_sample.format, test_sample.nb_ch,
  
                                              test_sample.nb_samples_pch);
  
      if (!afifo) {
  
          ERROR("ERROR: av_audio_fifo_alloc returned NULL!");
  
      }
  
      ret = write_samples_to_audio_fifo(afifo, test_sample, test_sample.nb_samples_pch, 0);
  
      if (ret < 0){
  
          ERROR("ERROR: av_audio_fifo_write failed!");
  
      }
  
      printf("written: %d\n", ret);
  
  
  
      ret = write_samples_to_audio_fifo(afifo, test_sample, test_sample.nb_samples_pch, 0);
  
      if (ret < 0){
  
          ERROR("ERROR: av_audio_fifo_write failed!");
  
      }
  
      printf("written: %d\n", ret);
  
      printf("remaining samples in audio_fifo: %d\n\n", av_audio_fifo_size(afifo));
  
  
  
      ret = read_samples_from_audio_fifo(afifo, &output_data, test_sample.nb_samples_pch);
  
      if (ret < 0){
  
          ERROR("ERROR: av_audio_fifo_read failed!");
  
      }
  
      printf("read: %d\n", ret);
  
      print_audio_bytes(&test_sample, output_data, ret);
  
      printf("remaining samples in audio_fifo: %d\n\n", av_audio_fifo_size(afifo));
  
  
  
      /* test av_audio_fifo_peek */
  
      ret = av_audio_fifo_peek(afifo, output_data, afifo->nb_samples);
  
      if (ret < 0){
  
          ERROR("ERROR: av_audio_fifo_peek failed!");
  
      }
  
      printf("peek:\n");
  
      print_audio_bytes(&test_sample, output_data, ret);
  
      printf("\n");
  
  
  
      /* test av_audio_fifo_peek_at */
  
      printf("peek_at:\n");
  
      for (i = 0; i < afifo->nb_samples; ++i){
  
          ret = av_audio_fifo_peek_at(afifo, output_data, 1, i);
  
          if (ret < 0){
  
              ERROR("ERROR: av_audio_fifo_peek_at failed!");
  
          }
  
          printf("%d:\n", i);
  
          print_audio_bytes(&test_sample, output_data, ret);
  
      }
  
      printf("\n");
  
  
  
      /* test av_audio_fifo_drain */
  
      ret = av_audio_fifo_drain(afifo, afifo->nb_samples);
  
      if (ret < 0){
  
          ERROR("ERROR: av_audio_fifo_drain failed!");
  
      }
  
      if (afifo->nb_samples){
  
          ERROR("drain failed to flush all samples in audio_fifo!");
  
      }
  
  
  
      /* deallocate */
  
      for (i = 0; i < afifo->nb_buffers; ++i){
  
          av_freep(&output_data[i]);
  
      }
  
      av_freep(&output_data);
  
      av_audio_fifo_free(afifo);
  
  }
  