blob eec2232c (1344B) - Raw
1 const std = @import("std"); 2 const builtin = @import("builtin"); 3 4 const source = "A-"; 5 6 fn parseNote() ?i32 { 7 const letter = source[0]; 8 const modifier = source[1]; 9 10 const semitone = blk: { 11 if (letter == 'C' and modifier == '-') break :blk @as(i32, 0); 12 if (letter == 'C' and modifier == '#') break :blk @as(i32, 1); 13 if (letter == 'D' and modifier == '-') break :blk @as(i32, 2); 14 if (letter == 'D' and modifier == '#') break :blk @as(i32, 3); 15 if (letter == 'E' and modifier == '-') break :blk @as(i32, 4); 16 if (letter == 'F' and modifier == '-') break :blk @as(i32, 5); 17 if (letter == 'F' and modifier == '#') break :blk @as(i32, 6); 18 if (letter == 'G' and modifier == '-') break :blk @as(i32, 7); 19 if (letter == 'G' and modifier == '#') break :blk @as(i32, 8); 20 if (letter == 'A' and modifier == '-') break :blk @as(i32, 9); 21 if (letter == 'A' and modifier == '#') break :blk @as(i32, 10); 22 if (letter == 'B' and modifier == '-') break :blk @as(i32, 11); 23 return null; 24 }; 25 26 return semitone; 27 } 28 29 test "fixed" { 30 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; 31 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; 32 33 const result = parseNote(); 34 try std.testing.expect(result.? == 9); 35 }