blob: e35a0ecaa11bf67d452ad144000fca3e36143545 [file] [log] [blame]
/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include <stdio.h>
#include <string>
#include <vector>
#include "audio_coding_module.h"
#include "trace.h"
#include "APITest.h"
#include "EncodeDecodeTest.h"
#include "gtest/gtest.h"
#include "iSACTest.h"
#include "SpatialAudio.h"
#include "TestAllCodecs.h"
#include "TestFEC.h"
#include "TestStereo.h"
#include "TestVADDTX.h"
#include "TwoWayCommunication.h"
#include "testsupport/fileutils.h"
using webrtc::AudioCodingModule;
using webrtc::Trace;
// Be sure to create the following directories before running the tests:
// ./modules/audio_coding/main/test/res_tests
// ./modules/audio_coding/main/test/res_autotests
// Choose what tests to run by defining one or more of the following:
#define ACM_AUTO_TEST // Most common codecs and settings will be tested
//#define ACM_TEST_ENC_DEC // You decide what to test in run time.
// Used for debugging and for testing while implementing.
//#define ACM_TEST_TWO_WAY // Debugging
//#define ACM_TEST_ALL_ENC_DEC // Loop through all defined codecs and settings
//#define ACM_TEST_STEREO // Run stereo and spatial audio tests
//#define ACM_TEST_VAD_DTX // Run all VAD/DTX tests
//#define ACM_TEST_FEC // Test FEC (also called RED)
//#define ACM_TEST_CODEC_SPEC_API // Only iSAC has codec specfic APIs in this version
//#define ACM_TEST_FULL_API // Test all APIs with threads (long test)
void PopulateTests(std::vector<ACMTest*>* tests)
{
Trace::CreateTrace();
std::string trace_file = webrtc::test::OutputPath() + "acm_trace.txt";
Trace::SetTraceFile(trace_file.c_str());
printf("The following tests will be executed:\n");
#ifdef ACM_AUTO_TEST
printf(" ACM auto test\n");
tests->push_back(new webrtc::EncodeDecodeTest(0));
tests->push_back(new webrtc::TwoWayCommunication(0));
tests->push_back(new webrtc::TestAllCodecs(0));
tests->push_back(new webrtc::TestStereo(0));
tests->push_back(new webrtc::SpatialAudio(0));
tests->push_back(new webrtc::TestVADDTX(0));
tests->push_back(new webrtc::TestFEC(0));
tests->push_back(new webrtc::ISACTest(0));
#endif
#ifdef ACM_TEST_ENC_DEC
printf(" ACM encode-decode test\n");
tests->push_back(new webrtc::EncodeDecodeTest(2));
#endif
#ifdef ACM_TEST_TWO_WAY
printf(" ACM two-way communication test\n");
tests->push_back(new webrtc::TwoWayCommunication(1));
#endif
#ifdef ACM_TEST_ALL_ENC_DEC
printf(" ACM all codecs test\n");
tests->push_back(new webrtc::TestAllCodecs(1));
#endif
#ifdef ACM_TEST_STEREO
printf(" ACM stereo test\n");
tests->push_back(new webrtc::TestStereo(1));
tests->push_back(new webrtc::SpatialAudio(2));
#endif
#ifdef ACM_TEST_VAD_DTX
printf(" ACM VAD-DTX test\n");
tests->push_back(new webrtc::TestVADDTX(1));
#endif
#ifdef ACM_TEST_FEC
printf(" ACM FEC test\n");
tests->push_back(new webrtc::TestFEC(1));
#endif
#ifdef ACM_TEST_CODEC_SPEC_API
printf(" ACM codec API test\n");
tests->push_back(new webrtc::ISACTest(1));
#endif
#ifdef ACM_TEST_FULL_API
printf(" ACM full API test\n");
tests->push_back(new webrtc::APITest());
#endif
printf("\n");
}
// TODO(kjellander): Make this a proper gtest instead of using this single test
// to run all the tests.
TEST(AudioCodingModuleTest, RunAllTests)
{
std::vector<ACMTest*> tests;
PopulateTests(&tests);
std::vector<ACMTest*>::iterator it;
for (it=tests.begin() ; it < tests.end(); it++)
{
(*it)->Perform();
delete (*it);
}
Trace::ReturnTrace();
printf("ACM test completed\n");
}