1use super::*;
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];
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}