| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- #include "CUEParser.h"
- #include <stdio.h>
- #include <string.h>
- /* Unit test helpers */
- #define COMMENT(x) printf("\n----" x "----\n");
- #define TEST(x) \
- if (!(x)) { \
- fprintf(stderr, "\033[31;1mFAILED:\033[22;39m %s:%d %s\n", __FILE__, __LINE__, #x); \
- status = false; \
- } else { \
- printf("\033[32;1mOK:\033[22;39m %s\n", #x); \
- }
- bool test_basics()
- {
- bool status = true;
- const char *cue_sheet = R"(
- FILE "Image Name.bin" BINARY
- TRACK 01 MODE1/2048
- INDEX 01 00:00:00
- TRACK 02 AUDIO
- PREGAP 00:02:00
- INDEX 01 02:47:20
- TRACK 03 AUDIO
- INDEX 00 07:55:58
- INDEX 01 07:55:65
- FILE "Sound.wav" WAVE
- TRACK 11 AUDIO
- INDEX 00 00:00:00
- INDEX 01 00:02:00
- )";
- CUEParser parser(cue_sheet);
- COMMENT("test_basics()");
- COMMENT("Test TRACK 01 (data)");
- const CUETrackInfo *track = parser.next_track();
- TEST(track != NULL);
- if (track)
- {
- TEST(strcmp(track->filename, "Image Name.bin") == 0);
- TEST(track->file_mode == CUEFile_BINARY);
- TEST(track->file_offset == 0);
- TEST(track->track_number == 1);
- TEST(track->track_mode == CUETrack_MODE1_2048);
- TEST(track->sector_length == 2048);
- TEST(track->unstored_pregap_length == 0);
- TEST(track->data_start == 0);
- }
- COMMENT("Test TRACK 02 (audio with pregap)");
- track = parser.next_track();
- TEST(track != NULL);
- uint32_t start2 = ((2 * 60) + 47) * 75 + 20;
- if (track)
- {
- TEST(strcmp(track->filename, "Image Name.bin") == 0);
- TEST(track->file_mode == CUEFile_BINARY);
- TEST(track->file_offset == 2048 * start2);
- TEST(track->track_number == 2);
- TEST(track->track_mode == CUETrack_AUDIO);
- TEST(track->sector_length == 2352);
- TEST(track->unstored_pregap_length == 2 * 75);
- TEST(track->data_start == start2 + 2 * 75);
- }
- COMMENT("Test TRACK 03 (audio with index 0)");
- track = parser.next_track();
- TEST(track != NULL);
- uint32_t start3_i0 = ((7 * 60) + 55) * 75 + 58;
- uint32_t start3_i1 = ((7 * 60) + 55) * 75 + 65;
- if (track)
- {
- TEST(strcmp(track->filename, "Image Name.bin") == 0);
- TEST(track->file_mode == CUEFile_BINARY);
- TEST(track->file_offset == 2048 * start2 + 2352 * (start3_i0 - start2));
- TEST(track->track_number == 3);
- TEST(track->track_mode == CUETrack_AUDIO);
- TEST(track->sector_length == 2352);
- TEST(track->track_start == start3_i0);
- TEST(track->data_start == start3_i1);
- }
- COMMENT("Test TRACK 11 (audio from wav)");
- track = parser.next_track();
- TEST(track != NULL);
- if (track)
- {
- TEST(strcmp(track->filename, "Sound.wav") == 0);
- TEST(track->file_mode == CUEFile_WAVE);
- TEST(track->file_offset == 0);
- TEST(track->track_number == 11);
- TEST(track->track_mode == CUETrack_AUDIO);
- TEST(track->sector_length == 0);
- TEST(track->track_start == 0);
- TEST(track->data_start == 2 * 75);
- }
- COMMENT("Test end of file");
- track = parser.next_track();
- TEST(track == NULL);
- COMMENT("Test restart");
- parser.restart();
- track = parser.next_track();
- TEST(track != NULL && track->track_number == 1);
- return status;
- }
- bool test_datatracks()
- {
- bool status = true;
- const char *cue_sheet = R"(
- FILE "beos-5.0.3-professional-gobe.bin" BINARY
- TRACK 01 MODE1/2352
- INDEX 01 00:00:00
- TRACK 02 MODE1/2352
- INDEX 01 10:48:58
- TRACK 03 MODE1/2352
- INDEX 01 46:07:03
- )";
- CUEParser parser(cue_sheet);
- COMMENT("test_datatracks()");
- COMMENT("Test TRACK 01 (data)");
- const CUETrackInfo *track = parser.next_track();
- TEST(track != NULL);
- if (track)
- {
- TEST(strcmp(track->filename, "beos-5.0.3-professional-gobe.bin") == 0);
- TEST(track->file_mode == CUEFile_BINARY);
- TEST(track->file_offset == 0);
- TEST(track->track_number == 1);
- TEST(track->track_mode == CUETrack_MODE1_2352);
- TEST(track->sector_length == 2352);
- TEST(track->unstored_pregap_length == 0);
- TEST(track->data_start == 0);
- TEST(track->track_start == 0);
- }
- COMMENT("Test TRACK 02 (data)");
- track = parser.next_track();
- TEST(track != NULL);
- if (track)
- {
- TEST(track->file_mode == CUEFile_BINARY);
- TEST(track->file_offset == 0x6D24560);
- TEST(track->track_number == 2);
- TEST(track->track_mode == CUETrack_MODE1_2352);
- TEST(track->sector_length == 2352);
- TEST(track->unstored_pregap_length == 0);
- TEST(track->data_start == ((10 * 60) + 48) * 75 + 58);
- TEST(track->track_start == ((10 * 60) + 48) * 75 + 58);
- }
- COMMENT("Test TRACK 03 (data)");
- track = parser.next_track();
- TEST(track != NULL);
- if (track)
- {
- TEST(track->file_mode == CUEFile_BINARY);
- TEST(track->file_offset == 0x1D17E780);
- TEST(track->track_number == 3);
- TEST(track->track_mode == CUETrack_MODE1_2352);
- TEST(track->sector_length == 2352);
- TEST(track->unstored_pregap_length == 0);
- TEST(track->data_start == ((46 * 60) + 7) * 75 + 3);
- TEST(track->track_start == ((46 * 60) + 7) * 75 + 3);
- }
- track = parser.next_track();
- TEST(track == NULL);
- return status;
- }
- bool test_datatrackpregap()
- {
- bool status = true;
- const char *cue_sheet = R"(
- FILE "issue422.bin" BINARY
- TRACK 01 AUDIO
- INDEX 01 00:00:00
- TRACK 02 MODE1/2352
- PREGAP 00:02:00
- INDEX 01 01:06:19
- )";
- CUEParser parser(cue_sheet);
- COMMENT("test_datatrackpregap()");
- COMMENT("Test TRACK 01 (audio)");
- const CUETrackInfo *track = parser.next_track();
- TEST(track != NULL);
- if (track)
- {
- TEST(strcmp(track->filename, "issue422.bin") == 0);
- TEST(track->file_mode == CUEFile_BINARY);
- TEST(track->file_offset == 0);
- TEST(track->track_number == 1);
- TEST(track->track_mode == CUETrack_AUDIO);
- TEST(track->sector_length == 2352);
- TEST(track->unstored_pregap_length == 0);
- TEST(track->data_start == 0);
- TEST(track->track_start == 0);
- }
- COMMENT("Test TRACK 02 (data)");
- track = parser.next_track();
- TEST(track != NULL);
- if (track)
- {
- TEST(strcmp(track->filename, "issue422.bin") == 0);
- TEST(track->file_mode == CUEFile_BINARY);
- TEST(track->file_offset == 0xB254B0);
- TEST(track->track_number == 2);
- TEST(track->track_mode == CUETrack_MODE1_2352);
- TEST(track->sector_length == 2352);
- TEST(track->unstored_pregap_length == 75 * 2);
- TEST(track->data_start == (60 + 6 + 2) * 75 + 19);
- TEST(track->track_start == (60 + 6) * 75 + 19);
- }
- track = parser.next_track();
- TEST(track == NULL);
- return status;
- }
- int main()
- {
- if (test_basics() && test_datatracks() && test_datatrackpregap())
- {
- return 0;
- }
- else
- {
- printf("Some tests failed\n");
- return 1;
- }
- }
|