Skip to content

Commit ce563c3

Browse files
committed
Exercise tuple scoring in build fuzzer
1 parent e91e9a9 commit ce563c3

1 file changed

Lines changed: 78 additions & 0 deletions

File tree

test/fuzzing/BuildCodeGenerator.zig

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ const Symbols = struct {
7171
transform_items: Symbol,
7272
fold_items: Symbol,
7373
score_with: Symbol,
74+
score_pairs: Symbol,
7475
walk_rows: Symbol,
7576
walk_cols: Symbol,
7677
describe_try: Symbol,
@@ -158,6 +159,7 @@ pub fn generate(self: *Self) std.mem.Allocator.Error!void {
158159
.transform_items = self.fresh(.function),
159160
.fold_items = self.fresh(.function),
160161
.score_with = self.fresh(.function),
162+
.score_pairs = self.fresh(.function),
161163
.walk_rows = self.fresh(.function),
162164
.walk_cols = self.fresh(.function),
163165
.describe_try = self.fresh(.function),
@@ -467,6 +469,7 @@ fn writeTopLevelFunctions(self: *Self) std.mem.Allocator.Error!void {
467469
try self.writeCollectItems();
468470
try self.writeItemTransforms();
469471
try self.writeHigherOrderScoring();
472+
try self.writeTupleScoring();
470473
try self.writeGridRecursion();
471474
try self.writeDescribeTry();
472475
try self.writeTreeScoring();
@@ -893,6 +896,63 @@ fn writeHigherOrderScoring(self: *Self) std.mem.Allocator.Error!void {
893896
try self.writeAppText("))\n\n");
894897
}
895898

899+
fn writeTupleScoring(self: *Self) std.mem.Allocator.Error!void {
900+
const items = self.fresh(.value);
901+
const seed = self.fresh(.value);
902+
const pairs = self.fresh(.value);
903+
const map_item = self.fresh(.value);
904+
const acc = self.fresh(.value);
905+
const pair_id = self.fresh(.value);
906+
const pair_text = self.fresh(.value);
907+
908+
try self.writeAppSymbol(self.symbols.score_pairs);
909+
try self.writeAppText(" : List(");
910+
try self.writeAppSymbol(self.symbols.item_type);
911+
try self.writeAppText("), U64 -> U64\n");
912+
try self.writeAppSymbol(self.symbols.score_pairs);
913+
try self.writeAppText(" = |");
914+
try self.writeAppSymbol(items);
915+
try self.writeAppText(", ");
916+
try self.writeAppSymbol(seed);
917+
try self.writeAppText("| {\n");
918+
try self.writeIndent(1);
919+
try self.writeAppSymbol(pairs);
920+
try self.writeAppText(" : List((U64, Str))\n");
921+
try self.writeIndent(1);
922+
try self.writeAppSymbol(pairs);
923+
try self.writeAppText(" = List.map(");
924+
try self.writeAppSymbol(items);
925+
try self.writeAppText(", |");
926+
try self.writeAppSymbol(map_item);
927+
try self.writeAppText("| (");
928+
try self.writeAppSymbol(map_item);
929+
try self.writeAppText(".");
930+
try self.writeAppSymbol(self.symbols.item_id);
931+
try self.writeAppText(", ");
932+
try self.writeAppSymbol(map_item);
933+
try self.writeAppText(".");
934+
try self.writeAppSymbol(self.symbols.item_text);
935+
try self.writeAppText("))\n");
936+
try self.writeIndent(1);
937+
try self.writeAppText("List.fold(");
938+
try self.writeAppSymbol(pairs);
939+
try self.writeAppText(", ");
940+
try self.writeAppSymbol(seed);
941+
try self.writeAppText(", |");
942+
try self.writeAppSymbol(acc);
943+
try self.writeAppText(", (");
944+
try self.writeAppSymbol(pair_id);
945+
try self.writeAppText(", ");
946+
try self.writeAppSymbol(pair_text);
947+
try self.writeAppText(")| ");
948+
try self.writeAppSymbol(acc);
949+
try self.writeAppText(" + ");
950+
try self.writeAppSymbol(pair_id);
951+
try self.writeAppText(" + List.len(Str.to_utf8(");
952+
try self.writeAppSymbol(pair_text);
953+
try self.writeAppText(")))\n}\n\n");
954+
}
955+
896956
fn writeGridRecursion(self: *Self) std.mem.Allocator.Error!void {
897957
const row_state = self.fresh(.value);
898958
const row = self.fresh(.value);
@@ -1118,6 +1178,7 @@ fn writeEntryPoint(self: *Self) std.mem.Allocator.Error!void {
11181178
const collected = self.fresh(.value);
11191179
const transformed = self.fresh(.value);
11201180
const folded = self.fresh(.value);
1181+
const pair_score = self.fresh(.value);
11211182
const builder = self.fresh(.value);
11221183
const state = self.fresh(.value);
11231184
const tree = self.fresh(.value);
@@ -1223,6 +1284,19 @@ fn writeEntryPoint(self: *Self) std.mem.Allocator.Error!void {
12231284
try self.writeAppSymbol(transformed);
12241285
try self.writeAppText(", 0)\n");
12251286

1287+
try self.writeIndent(1);
1288+
try self.writeAppSymbol(pair_score);
1289+
try self.writeAppText(" : U64\n");
1290+
try self.writeIndent(1);
1291+
try self.writeAppSymbol(pair_score);
1292+
try self.writeAppText(" = ");
1293+
try self.writeAppSymbol(self.symbols.score_pairs);
1294+
try self.writeAppText("(");
1295+
try self.writeAppSymbol(transformed);
1296+
try self.writeAppText(", ");
1297+
try self.writeAppSymbol(folded);
1298+
try self.writeAppText(")\n");
1299+
12261300
try self.writeIndent(1);
12271301
try self.writeAppSymbol(builder);
12281302
try self.writeAppText(" : ");
@@ -1285,6 +1359,8 @@ fn writeEntryPoint(self: *Self) std.mem.Allocator.Error!void {
12851359
try self.writeAppText(" + ");
12861360
try self.writeAppSymbol(folded);
12871361
try self.writeAppText(" + ");
1362+
try self.writeAppSymbol(pair_score);
1363+
try self.writeAppText(" + ");
12881364
try self.writeAppSymbol(tree_score);
12891365
try self.writeAppText(", 0)\n");
12901366

@@ -1302,6 +1378,8 @@ fn writeEntryPoint(self: *Self) std.mem.Allocator.Error!void {
13021378
try self.writeAppText(", 0) + ");
13031379
try self.writeAppSymbol(folded);
13041380
try self.writeAppText(" + ");
1381+
try self.writeAppSymbol(pair_score);
1382+
try self.writeAppText(" + ");
13051383
try self.writeAppSymbol(tree_score);
13061384
try self.writeAppText(" + ");
13071385
try self.writeAppSymbol(captured_score);

0 commit comments

Comments
 (0)