zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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 }