test_timing_data
This commit is contained in:
+20
-19
@@ -1,4 +1,4 @@
|
||||
bin_PROGRAMS = stepmania test_audio_readers test_file_readers
|
||||
bin_PROGRAMS = stepmania test_audio_readers test_file_readers test_timing_data
|
||||
|
||||
AM_LDFLAGS =
|
||||
AM_CXXFLAGS =
|
||||
@@ -219,42 +219,43 @@ stepmania_LDADD = \
|
||||
$(srcdir)/libresample/libresample.a
|
||||
|
||||
# XXX: Make ArchHooks not depend on Display
|
||||
# A hack for now:
|
||||
test_audio_readers_SOURCES = tests/test_audio_readers.cpp \
|
||||
all_test_SOURCES = \
|
||||
RageDisplay.cpp RageDisplay.h \
|
||||
RageMath.cpp RageMath.h \
|
||||
RageUtil.cpp RageLog.cpp RageThreads.cpp RageException.cpp \
|
||||
RageUtil_FileDB.cpp RageUtil_FileDB.h \
|
||||
RageTimer.cpp RageTimer.h \
|
||||
$(RageFile) \
|
||||
RageSoundReader_FileReader.cpp RageSoundReader_FileReader.h \
|
||||
PrefsManager.cpp PrefsManager.h \
|
||||
Grade.cpp Grade.h \
|
||||
arch/ArchHooks/ArchHooks.cpp arch/ArchHooks/ArchHooks.h \
|
||||
IniFile.cpp IniFile.h \
|
||||
$(RageSoundFileReaders) \
|
||||
$(PCRE)
|
||||
|
||||
test_audio_readers_SOURCES = $(all_test_SOURCES) \
|
||||
tests/test_audio_readers.cpp \
|
||||
RageSoundReader_FileReader.cpp RageSoundReader_FileReader.h \
|
||||
$(RageSoundFileReaders) \
|
||||
RageSoundReader_Resample.cpp RageSoundReader_Resample.h \
|
||||
RageSoundReader_Resample_Fast.cpp RageSoundReader_Resample_Fast.h \
|
||||
RageSoundResampler.cpp RageSoundResampler.h \
|
||||
RageSoundReader_Resample_Good.cpp RageSoundReader_Resample_Good.h \
|
||||
RageSoundReader_Preload.cpp RageSoundReader_Preload.h
|
||||
|
||||
test_audio_readers_LDADD = \
|
||||
$(USE_SDL_LIBS) \
|
||||
$(AUDIO_LIBS)
|
||||
$(USE_SDL_LIBS) \
|
||||
$(AUDIO_LIBS) \
|
||||
$(srcdir)/libresample/libresample.a
|
||||
|
||||
test_file_readers_SOURCES = tests/test_file_readers.cpp \
|
||||
RageDisplay.cpp RageDisplay.h \
|
||||
RageMath.cpp RageMath.h \
|
||||
RageUtil.cpp RageLog.cpp RageThreads.cpp RageException.cpp \
|
||||
RageUtil_FileDB.cpp RageUtil_FileDB.h \
|
||||
RageTimer.cpp RageTimer.h \
|
||||
$(RageFile) \
|
||||
PrefsManager.cpp PrefsManager.h \
|
||||
Grade.cpp Grade.h \
|
||||
arch/ArchHooks/ArchHooks.cpp arch/ArchHooks/ArchHooks.h \
|
||||
IniFile.cpp IniFile.h \
|
||||
$(PCRE)
|
||||
test_file_readers_SOURCES = $(all_test_SOURCES) \
|
||||
tests/test_file_readers.cpp
|
||||
|
||||
test_file_readers_LDADD = \
|
||||
$(USE_SDL_LIBS)
|
||||
|
||||
test_timing_data_SOURCES = $(all_test_SOURCES) \
|
||||
tests/test_timing_data.cpp TimingData.cpp TimingData.h
|
||||
|
||||
INCLUDES = $(SDL_CFLAGS)
|
||||
|
||||
if HAVE_GTK
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
#include "global.h"
|
||||
#include "RageLog.h"
|
||||
#include "RageFile.h"
|
||||
#include "RageUtil.h"
|
||||
#include "RageUtil_FileDB.h"
|
||||
#include "PrefsManager.h"
|
||||
#include "RageFileManager.h"
|
||||
#include "TimingData.h"
|
||||
|
||||
CString InitialWorkingDirectory = ".";
|
||||
CString DirOfExecutable = ".";
|
||||
|
||||
void run()
|
||||
{
|
||||
#define CHECK(call, exp) \
|
||||
{ \
|
||||
float ret = call; \
|
||||
if( call != exp ) { \
|
||||
LOG->Warn( "Line %i: Got %f, expected %f", __LINE__, ret, exp); \
|
||||
return; \
|
||||
} \
|
||||
}
|
||||
|
||||
TimingData test;
|
||||
test.AddBPMSegment( BPMSegment(0, 60) );
|
||||
|
||||
/* First, trivial sanity checks. */
|
||||
CHECK( test.GetBeatFromElapsedTime(60), 60.0f );
|
||||
CHECK( test.GetElapsedTimeFromBeat(60), 60.0f );
|
||||
|
||||
/* The first BPM segment extends backwards in time. */
|
||||
CHECK( test.GetBeatFromElapsedTime(-60), -60.0f );
|
||||
CHECK( test.GetElapsedTimeFromBeat(-60), -60.0f );
|
||||
|
||||
CHECK( test.GetBeatFromElapsedTime(100000), 100000.0f );
|
||||
CHECK( test.GetElapsedTimeFromBeat(100000), 100000.0f );
|
||||
CHECK( test.GetBeatFromElapsedTime(-100000), -100000.0f );
|
||||
CHECK( test.GetElapsedTimeFromBeat(-100000), -100000.0f );
|
||||
|
||||
CHECK( test.GetBPMAtBeat(0), 60.0f );
|
||||
CHECK( test.GetBPMAtBeat(100000), 60.0f );
|
||||
CHECK( test.GetBPMAtBeat(-100000), 60.0f );
|
||||
|
||||
/* 120BPM at beat 10: */
|
||||
test.AddBPMSegment( BPMSegment(10, 120) );
|
||||
CHECK( test.GetBPMAtBeat(9.99), 60.0f );
|
||||
CHECK( test.GetBPMAtBeat(10), 120.0f );
|
||||
|
||||
CHECK( test.GetBeatFromElapsedTime(9), 9.0f );
|
||||
CHECK( test.GetBeatFromElapsedTime(10), 10.0f );
|
||||
CHECK( test.GetBeatFromElapsedTime(10.5), 11.0f );
|
||||
|
||||
CHECK( test.GetElapsedTimeFromBeat(9), 9.0f );
|
||||
CHECK( test.GetElapsedTimeFromBeat(10), 10.0f );
|
||||
CHECK( test.GetElapsedTimeFromBeat(11), 10.5f );
|
||||
|
||||
/* Add a 5-second stop at beat 10. */
|
||||
test.AddStopSegment( StopSegment(10, 5) );
|
||||
|
||||
/* The stop shouldn't affect GetBPMAtBeat at all. */
|
||||
CHECK( test.GetBPMAtBeat(9.99), 60.0f );
|
||||
CHECK( test.GetBPMAtBeat(10), 120.0f );
|
||||
|
||||
CHECK( test.GetBeatFromElapsedTime(9), 9.0f );
|
||||
CHECK( test.GetBeatFromElapsedTime(10), 10.0f );
|
||||
CHECK( test.GetBeatFromElapsedTime(12), 10.0f );
|
||||
CHECK( test.GetBeatFromElapsedTime(14), 10.0f );
|
||||
CHECK( test.GetBeatFromElapsedTime(15), 10.0f );
|
||||
CHECK( test.GetBeatFromElapsedTime(15.5), 11.0f );
|
||||
|
||||
CHECK( test.GetElapsedTimeFromBeat(9), 9.0f );
|
||||
CHECK( test.GetElapsedTimeFromBeat(10), 10.0f );
|
||||
CHECK( test.GetElapsedTimeFromBeat(11), 15.5f );
|
||||
|
||||
/* Add a 2-second stop at beat 5 and a 5-second stop at beat 15. */
|
||||
test.m_StopSegments.clear();
|
||||
test.AddStopSegment( StopSegment(5, 2) );
|
||||
test.AddStopSegment( StopSegment(15, 5) );
|
||||
CHECK( test.GetBPMAtBeat(9.99), 60.0f );
|
||||
CHECK( test.GetBPMAtBeat(10), 120.0f );
|
||||
|
||||
CHECK( test.GetBeatFromElapsedTime(1), 1.0f );
|
||||
CHECK( test.GetBeatFromElapsedTime(2), 2.0f );
|
||||
CHECK( test.GetBeatFromElapsedTime(5), 5.0f ); // stopped
|
||||
CHECK( test.GetBeatFromElapsedTime(6), 5.0f ); // stopped
|
||||
CHECK( test.GetBeatFromElapsedTime(7), 5.0f ); // stop finished
|
||||
CHECK( test.GetBeatFromElapsedTime(8), 6.0f );
|
||||
CHECK( test.GetBeatFromElapsedTime(12), 10.0f ); // bpm changes to 120
|
||||
CHECK( test.GetBeatFromElapsedTime(13), 12.0f );
|
||||
CHECK( test.GetBeatFromElapsedTime(14), 14.0f );
|
||||
CHECK( test.GetBeatFromElapsedTime(14.5f), 15.0f ); // stopped
|
||||
CHECK( test.GetBeatFromElapsedTime(15), 15.0f ); // stopped
|
||||
CHECK( test.GetBeatFromElapsedTime(17), 15.0f ); // stopped
|
||||
CHECK( test.GetBeatFromElapsedTime(19.5f), 15.0f ); // stop finished
|
||||
CHECK( test.GetBeatFromElapsedTime(20), 16.0f );
|
||||
|
||||
CHECK( test.GetElapsedTimeFromBeat(1), 1.0f );
|
||||
CHECK( test.GetElapsedTimeFromBeat(2), 2.0f );
|
||||
CHECK( test.GetElapsedTimeFromBeat(5), 5.0f ); // stopped
|
||||
CHECK( test.GetElapsedTimeFromBeat(6), 8.0f );
|
||||
CHECK( test.GetElapsedTimeFromBeat(10), 12.0f ); // bpm changes to 120
|
||||
CHECK( test.GetElapsedTimeFromBeat(12), 13.0f );
|
||||
CHECK( test.GetElapsedTimeFromBeat(14), 14.0f );
|
||||
CHECK( test.GetElapsedTimeFromBeat(15.0f), 14.5f ); // stopped
|
||||
CHECK( test.GetElapsedTimeFromBeat(16), 20.0f );
|
||||
|
||||
RageTimer foobar;
|
||||
/* We can look up the time of any given beat, then look up the beat of that
|
||||
* time and get the original value. (We can't do this in reverse; the beat
|
||||
* doesn't move during stop segments.) */
|
||||
int q = 0;
|
||||
for( float f = -10; f < 250; f += 0.002 )
|
||||
{
|
||||
++q;
|
||||
// const float t = test.GetElapsedTimeFromBeat( f );
|
||||
const float b = test.GetBeatFromElapsedTime( f );
|
||||
|
||||
/* b == f */
|
||||
|
||||
// if( fabsf(b-f) > 0.001 )
|
||||
// {
|
||||
// LOG->Warn( "%f != %f", b, f );
|
||||
// return;
|
||||
// }
|
||||
}
|
||||
LOG->Trace("... %i in %f", q, foobar.GetDeltaTime());
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
FILEMAN = new RageFileManager;
|
||||
LOG = new RageLog();
|
||||
PREFSMAN = new PrefsManager; // TimingData needs PREFSMAN; it probably shouldn't
|
||||
LOG->ShowLogOutput( true );
|
||||
LOG->SetFlushing( true );
|
||||
|
||||
run();
|
||||
|
||||
delete PREFSMAN;
|
||||
delete LOG;
|
||||
delete FILEMAN;
|
||||
|
||||
exit(0);
|
||||
}
|
||||
Reference in New Issue
Block a user