CUEParser_test.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #include "CUEParser.h"
  2. #include <stdio.h>
  3. #include <string.h>
  4. /* Unit test helpers */
  5. #define COMMENT(x) printf("\n----" x "----\n");
  6. #define TEST(x) \
  7. if (!(x)) { \
  8. fprintf(stderr, "\033[31;1mFAILED:\033[22;39m %s:%d %s\n", __FILE__, __LINE__, #x); \
  9. status = 1; \
  10. } else { \
  11. printf("\033[32;1mOK:\033[22;39m %s\n", #x); \
  12. }
  13. int test_basics()
  14. {
  15. int status = 0;
  16. const char *cue_sheet = R"(
  17. FILE "Image Name.bin" BINARY
  18. TRACK 01 MODE1/2048
  19. INDEX 01 00:00:00
  20. TRACK 02 AUDIO
  21. PREGAP 00:02:00
  22. INDEX 01 02:47:20
  23. TRACK 03 AUDIO
  24. INDEX 00 07:55:58
  25. INDEX 01 07:55:65
  26. FILE "Sound.wav" WAVE
  27. TRACK 11 AUDIO
  28. INDEX 00 00:00:00
  29. INDEX 01 00:02:00
  30. )";
  31. CUEParser parser(cue_sheet);
  32. COMMENT("Test TRACK 01 (data)");
  33. const CUETrackInfo *track = parser.next_track();
  34. TEST(track != NULL);
  35. if (track)
  36. {
  37. TEST(strcmp(track->filename, "Image Name.bin") == 0);
  38. TEST(track->file_mode == CUEFile_BINARY);
  39. TEST(track->file_offset == 0);
  40. TEST(track->track_number == 1);
  41. TEST(track->track_mode == CUETrack_MODE1_2048);
  42. TEST(track->sector_length == 2048);
  43. TEST(track->unstored_pregap_length == 0);
  44. TEST(track->data_start == 0);
  45. }
  46. COMMENT("Test TRACK 02 (audio with pregap)");
  47. track = parser.next_track();
  48. TEST(track != NULL);
  49. uint32_t start2 = ((2 * 60) + 47) * 75 + 20;
  50. if (track)
  51. {
  52. TEST(strcmp(track->filename, "Image Name.bin") == 0);
  53. TEST(track->file_mode == CUEFile_BINARY);
  54. TEST(track->file_offset == 2048 * start2);
  55. TEST(track->track_number == 2);
  56. TEST(track->track_mode == CUETrack_AUDIO);
  57. TEST(track->sector_length == 2352);
  58. TEST(track->unstored_pregap_length == 2 * 75);
  59. TEST(track->data_start == start2);
  60. }
  61. COMMENT("Test TRACK 03 (audio with index 0)");
  62. track = parser.next_track();
  63. TEST(track != NULL);
  64. uint32_t start3 = ((7 * 60) + 55) * 75 + 65;
  65. if (track)
  66. {
  67. TEST(strcmp(track->filename, "Image Name.bin") == 0);
  68. TEST(track->file_mode == CUEFile_BINARY);
  69. TEST(track->file_offset == 2048 * start2 + 2352 * (start3 - start2));
  70. TEST(track->track_number == 3);
  71. TEST(track->track_mode == CUETrack_AUDIO);
  72. TEST(track->sector_length == 2352);
  73. TEST(track->pregap_start == ((7 * 60) + 55) * 75 + 58);
  74. TEST(track->data_start == start3);
  75. }
  76. COMMENT("Test TRACK 11 (audio from wav)");
  77. track = parser.next_track();
  78. TEST(track != NULL);
  79. if (track)
  80. {
  81. TEST(strcmp(track->filename, "Sound.wav") == 0);
  82. TEST(track->file_mode == CUEFile_WAVE);
  83. TEST(track->file_offset == 0);
  84. TEST(track->track_number == 11);
  85. TEST(track->track_mode == CUETrack_AUDIO);
  86. TEST(track->sector_length == 0);
  87. TEST(track->pregap_start == 0);
  88. TEST(track->data_start == 2 * 75);
  89. }
  90. COMMENT("Test end of file");
  91. track = parser.next_track();
  92. TEST(track == NULL);
  93. COMMENT("Test restart");
  94. parser.restart();
  95. track = parser.next_track();
  96. TEST(track != NULL && track->track_number == 1);
  97. return status;
  98. }
  99. int main()
  100. {
  101. return test_basics();
  102. }