haskell-te: 0b37d9f5c35c987bf7b1227923df9f0f1fd41a39
1: { jq, lib, lzip, runCommand }:
2:
3: with builtins;
4: with lib;
5: with rec {
6: sampleFiles = [
7: "b1247807-nix-py-dirnull.json.lz" # Even numbered sizes
8: "bdea634a-nix-py-dirnull.json.lz" # Odd numbered sizes
9: "a531ce8f-nix-py-dirnull.json.lz" # Rep 30
10: ];
11:
12: samplesFrom = file: runCommand "samples.json"
13: {
14: buildInputs = [ jq lzip ];
15: file = ./results/desktop + "/${file}";
16: }
17: ''
18: echo "Pulling samples out of '$file'" 1>&2
19: mkdir "$out"
20: cd "$out"
21: lzip -d < "$file" | jq '.results | .["quickspectip.track_data"] |
22: .result | .[0] |
23: map_values(.reps |
24: map_values(.sample))' > data.json
25: echo 'with builtins; fromJSON (readFile ./data.json)' > default.nix
26: '';
27:
28: pieces = map (f: import (samplesFrom f)) sampleFiles;
29:
30: distinct = xs: ys: all (x: !(elem x ys)) xs && all (y: !(elem y xs)) ys;
31:
32: mergeSizes = xs: ys: ys // mapAttrs (size: reps:
33: if hasAttr size ys
34: then mergeReps reps (getAttr size ys)
35: else reps)
36: xs;
37:
38: mergeReps = xs: ys: assert distinct (attrNames xs) (attrNames ys) ||
39: abort { inherit xs ys; msg = "Reps overlap"; };
40: xs // ys;
41:
42: err = msg: abort (toJSON { inherit msg result; });
43:
44: result = fold mergeSizes {} pieces;
45: };
46:
47: assert all (s: with { size = toString s; };
48: hasAttr size result || err "No size ${size}")
49: (range 1 20) || err "Missing sizes";
50: assert all (s: all (r: with { rep = toString r; };
51: hasAttr rep (getAttr s result) ||
52: err "Size ${s} missing rep ${rep}")
53: (range 0 30))
54: (attrNames result) || err "Missing reps";
55: assert all (s: with { x = getAttr s result; };
56: all (r: length (getAttr r x) == fromJSON s ||
57: err "Size ${s} rep ${r} wrong size")
58: (attrNames x))
59: (attrNames result) || err "Wrong size sample";
60: {
61: removeOverrides = true;
62: value = result;
63: }
Generated by git2html.