tests.rsannotatedtests.rssource109 lines · 5.0 KB · raw
1use super::*;
2
3// Based on an image of Ys IV: The Dawn of Ys
4const PCE_METADATA: &[&str] = &[
5    "TRACK:1 TYPE:AUDIO SUBTYPE:NONE FRAMES:3366 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
6    "TRACK:2 TYPE:MODE1_RAW SUBTYPE:NONE FRAMES:33144 PREGAP:224 PGTYPE:VMODE1_RAW PGSUB:NONE POSTGAP:0\0",
7    "TRACK:3 TYPE:AUDIO SUBTYPE:NONE FRAMES:9026 PREGAP:150 PGTYPE:VAUDIO PGSUB:NONE POSTGAP:0\0",
8    "TRACK:4 TYPE:AUDIO SUBTYPE:NONE FRAMES:8826 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
9    "TRACK:5 TYPE:AUDIO SUBTYPE:NONE FRAMES:13272 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
10    "TRACK:6 TYPE:AUDIO SUBTYPE:NONE FRAMES:12867 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
11    "TRACK:7 TYPE:AUDIO SUBTYPE:NONE FRAMES:7975 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
12    "TRACK:8 TYPE:AUDIO SUBTYPE:NONE FRAMES:9098 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
13    "TRACK:9 TYPE:AUDIO SUBTYPE:NONE FRAMES:8356 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
14    "TRACK:10 TYPE:AUDIO SUBTYPE:NONE FRAMES:8759 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
15    "TRACK:11 TYPE:AUDIO SUBTYPE:NONE FRAMES:8566 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
16    "TRACK:12 TYPE:AUDIO SUBTYPE:NONE FRAMES:8501 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
17    "TRACK:13 TYPE:AUDIO SUBTYPE:NONE FRAMES:9182 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
18    "TRACK:14 TYPE:AUDIO SUBTYPE:NONE FRAMES:9253 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
19    "TRACK:15 TYPE:AUDIO SUBTYPE:NONE FRAMES:9389 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
20    "TRACK:16 TYPE:AUDIO SUBTYPE:NONE FRAMES:8866 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
21    "TRACK:17 TYPE:AUDIO SUBTYPE:NONE FRAMES:9495 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
22    "TRACK:18 TYPE:AUDIO SUBTYPE:NONE FRAMES:9496 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
23    "TRACK:19 TYPE:AUDIO SUBTYPE:NONE FRAMES:8913 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
24    "TRACK:20 TYPE:AUDIO SUBTYPE:NONE FRAMES:13851 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
25    "TRACK:21 TYPE:AUDIO SUBTYPE:NONE FRAMES:7586 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
26    "TRACK:22 TYPE:AUDIO SUBTYPE:NONE FRAMES:8916 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
27    "TRACK:23 TYPE:AUDIO SUBTYPE:NONE FRAMES:13395 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
28    "TRACK:24 TYPE:AUDIO SUBTYPE:NONE FRAMES:6043 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
29    "TRACK:25 TYPE:AUDIO SUBTYPE:NONE FRAMES:7747 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
30    "TRACK:26 TYPE:AUDIO SUBTYPE:NONE FRAMES:5639 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
31    "TRACK:27 TYPE:AUDIO SUBTYPE:NONE FRAMES:4703 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
32    "TRACK:28 TYPE:AUDIO SUBTYPE:NONE FRAMES:8135 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
33    "TRACK:29 TYPE:AUDIO SUBTYPE:NONE FRAMES:11918 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
34    "TRACK:30 TYPE:AUDIO SUBTYPE:NONE FRAMES:23820 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
35    "TRACK:31 TYPE:AUDIO SUBTYPE:NONE FRAMES:4387 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0\0",
36    "TRACK:32 TYPE:MODE1_RAW SUBTYPE:NONE FRAMES:16611 PREGAP:224 PGTYPE:VMODE1_RAW PGSUB:NONE POSTGAP:0\0",
37];
38
39const FRAMES: &[u32] = &[
40    3366, 33144, 9026, 8826, 13272, 12867, 7975, 9098, 8356, 8759, 8566, 8501, 9182, 9253, 9389,
41    8866, 9495, 9496, 8913, 13851, 7586, 8916, 13395, 6043, 7747, 5639, 4703, 8135, 11918, 23820,
42    4387, 16611,
43];
44
45#[test]
46fn pce_metadata() {
47    let metadata_parsed: Vec<_> = PCE_METADATA
48        .iter()
49        .enumerate()
50        .map(|(i, metadata_str)| {
51            let Some(metadata) = CdMetadata::parse_from(metadata_str.as_bytes().to_vec()) else {
52                panic!("Failed to parse track {}: '{metadata_str}'", i + 1);
53            };
54            metadata
55        })
56        .collect();
57
58    assert_eq!(
59        metadata_parsed[0],
60        CdMetadata { track_number: 1, mode: TrackMode::Audio, frames: FRAMES[0], pregap_frames: 0 },
61        "Track 1 parsed"
62    );
63
64    assert_eq!(
65        metadata_parsed[1],
66        CdMetadata {
67            track_number: 2,
68            mode: TrackMode::Mode1,
69            frames: FRAMES[1],
70            pregap_frames: 224,
71        },
72        "Track 2 parsed"
73    );
74
75    assert_eq!(
76        metadata_parsed[2],
77        CdMetadata {
78            track_number: 3,
79            mode: TrackMode::Audio,
80            frames: FRAMES[2],
81            pregap_frames: 150,
82        },
83        "Track 3 parsed"
84    );
85
86    for track in 4..=31 {
87        assert_eq!(
88            metadata_parsed[(track - 1) as usize],
89            CdMetadata {
90                track_number: track,
91                mode: TrackMode::Audio,
92                frames: FRAMES[(track - 1) as usize],
93                pregap_frames: 0,
94            },
95            "Track {track} parsed"
96        );
97    }
98
99    assert_eq!(
100        metadata_parsed[31],
101        CdMetadata {
102            track_number: 32,
103            mode: TrackMode::Mode1,
104            frames: FRAMES[31],
105            pregap_frames: 224,
106        },
107        "Track 32 parsed"
108    );
109}