zig

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

test_comptime_evaluation.zig (882B) - Raw


      1 const expect = @import("std").testing.expect;
      2 
      3 const CmdFn = struct {
      4     name: []const u8,
      5     func: fn (i32) i32,
      6 };
      7 
      8 const cmd_fns = [_]CmdFn{
      9     CmdFn{ .name = "one", .func = one },
     10     CmdFn{ .name = "two", .func = two },
     11     CmdFn{ .name = "three", .func = three },
     12 };
     13 fn one(value: i32) i32 {
     14     return value + 1;
     15 }
     16 fn two(value: i32) i32 {
     17     return value + 2;
     18 }
     19 fn three(value: i32) i32 {
     20     return value + 3;
     21 }
     22 
     23 fn performFn(comptime prefix_char: u8, start_value: i32) i32 {
     24     var result: i32 = start_value;
     25     comptime var i = 0;
     26     inline while (i < cmd_fns.len) : (i += 1) {
     27         if (cmd_fns[i].name[0] == prefix_char) {
     28             result = cmd_fns[i].func(result);
     29         }
     30     }
     31     return result;
     32 }
     33 
     34 test "perform fn" {
     35     try expect(performFn('t', 1) == 6);
     36     try expect(performFn('o', 0) == 1);
     37     try expect(performFn('w', 99) == 99);
     38 }
     39 
     40 // test