{
  "cases": [
    {"file":"blur.ips","expect":"pass"},
    {"file":"blurred-layer.ips","expect":"pass"},
    {"file":"soft-mask.ips","expect":"pass"},
    {"file":"errors/blur-sigma.ips","expect":"compile-error","message":"blur sigma must be finite and in 0..64"},
    {"file":"traps/blur-sigma.ips","expect":"trap","message":"blur sigma must be finite and in 0..64"},
    {"file":"steppers.ips","expect":"pass"},
    {"file":"errors/stepper-count.ips","expect":"compile-error","message":"stepper result count must be between 0 and 256"},
    {"file":"errors/stepper-missing-count.ips","expect":"compile-error","message":"requires one i32 count"},
    {"file":"errors/stepper-const-pick.ips","expect":"compile-error","message":"generation effects"},
    {"file":"traps/stepper-unassigned.ips","expect":"trap","message":"stepper handle is unassigned"},
    {"file":"traps/stepper-mass.ips","expect":"trap","message":"no probability"},
    {"file":"list-methods.ips","expect":"pass"},
    {"file":"errors/list-sort-description.ips","expect":"compile-error","message":".sort does not support list<distribution>"},
    {"file":"errors/list-method-arguments.ips","expect":"compile-error","message":".distinct takes no arguments"},
    {"file":"resource-exports.ips","expect":"pass"},
    {"file":"errors/export-type.ips","expect":"compile-error","message":"expects mask, got layer"},
    {"file":"errors/export-list.ips","expect":"compile-error","message":"resource exports cannot be lists"},
    {"file":"traps/export-unset.ips","expect":"trap","message":"part resource export not written"},
    {"file":"parts/exported-frame.ips","expect":"pass"},
    {"file":"parts/exported-patch.ips","expect":"pass"},
    {"file":"errors/surface-alias.ips","expect":"compile-error","message":"conflicts with the surface namespace"},
    {"file": "captured-panels.ips", "expect": "pass"},
    {"file": "errors/layer-type.ips", "expect": "compile-error", "message": "conflicts with a local"},
    {"file": "errors/layer-const.ips", "expect": "compile-error", "message": "cannot be const"},
    {"file": "errors/surface-blend.ips", "expect": "compile-error", "message": "surface.paint blend must be surface.legacy or surface.source_over"},
    {"file": "traps/layer-unset.ips", "expect": "trap", "message": "layer is unassigned"},
    {"file": "traps/layer-fuel.ips", "expect": "trap", "message": "fuel exhausted"},

    {"file": "point-distributions.ips", "expect": "pass"},
    {"file": "errors/density-size.ips", "expect": "compile-error", "message": "between 2 and 256"},
    {"file": "errors/density-area.ips", "expect": "compile-error", "message": "positive total area"},
    {"file": "errors/density-order.ips", "expect": "compile-error", "message": "strictly increasing"},
    {"file": "errors/density-negative.ips", "expect": "compile-error", "message": "nonnegative"},
    {"file": "traps/density-mass.ips", "expect": "trap", "message": "no probability"},
    {"file": "traps/density-support.ips", "expect": "trap", "message": "outside the distribution"},
    {"file": "traps/density-runtime-height.ips", "expect": "trap", "message": "nonnegative"},
    {"file": "weighted.ips", "expect": "pass"},
    {"file": "errors/weighted-order.ips", "expect": "compile-error", "message": "strictly increasing"},
    {"file": "errors/weighted-negative.ips", "expect": "compile-error", "message": "nonnegative"},
    {"file": "errors/weighted-empty-mass.ips", "expect": "compile-error", "message": "positive total mass"},
    {"file": "traps/weighted-mass.ips", "expect": "trap", "message": "no probability"},
    {"file": "traps/weighted-runtime-weight.ips", "expect": "trap", "message": "nonnegative"},
    {"file": "sampling-palettes.ips", "expect": "pass"},
    {"file": "errors/palette-runtime-bound.ips", "expect": "compile-error", "message": "cannot read 'lower'"},
    {"file": "errors/const-sampler-cycle.ips", "expect": "compile-error", "message": "cyclic const dependency"},
    {"file": "errors/palette-ramp.ips", "expect": "compile-error", "message": "ramp does not accept sampling palettes"},
    {"file": "errors/sampling-palette-types.ips", "expect": "compile-error", "message": "must have elements of one type"},
    {"file": "errors/const-sampler-effect.ips", "expect": "compile-error", "message": ".pick has RNG or generation effects"},
    {"file": "errors/sampling-palette-bounds.ips", "expect": "compile-error", "message": "random range lower bound exceeds"},
    {"file": "traps/palette-list-index.ips", "expect": "trap", "message": "list index out of range"},
    {"file": "traps/palette-mass.ips", "expect": "trap", "message": "random range has no probability under the distribution"},

    {"file": "errors/sampler-count.ips", "expect": "compile-error", "message": "sampler result count must be between 0 and 256"},
    {"file": "errors/sampler-count-type.ips", "expect": "compile-error", "message": "sampler result count must be i32"},
    {"file": "errors/sampler-bounds.ips", "expect": "compile-error", "message": "random range lower bound exceeds the upper bound"},
    {"file": "errors/sampler-receiver.ips", "expect": "compile-error", "message": ".pick needs a sampler<T> receiver"},
    {"file": "errors/sampler-helper-collision.ips", "expect": "compile-error", "message": "expected a declaration inside the asset block, got sampler"},
    {"file": "traps/sampler-count.ips", "expect": "trap", "message": "sampler result count must be between 0 and 256"},
    {"file": "traps/sampler-unassigned.ips", "expect": "trap", "message": "sampler handle is unassigned"},
    {"file": "traps/sampler-mass.ips", "expect": "trap", "message": "random range has no probability under the distribution"},
    {"file": "samplers.ips", "expect": "pass"},
    {"file": "asset-constants.ips", "expect": "pass"},
    {"file": "errors/const-cycle.ips", "expect": "compile-error", "message": "cyclic const dependency"},
    {"file": "errors/const-rng.ips", "expect": "compile-error", "message": "RNG or generation effects"},
    {"file": "errors/const-input.ips", "expect": "compile-error", "message": "cannot read 'amount'"},
    {"file": "errors/const-seed.ips", "expect": "compile-error", "message": "cannot read 'seed'"},
    {"file": "errors/const-helper.ips", "expect": "compile-error", "message": "user helper and part calls"},
    {"file": "errors/const-distribution.ips", "expect": "compile-error", "message": "finite sigma > 0"},
    {"file": "errors/const-assignment.ips", "expect": "compile-error", "message": "cannot assign to const"},
    {"file": "first-asset.ips", "expect": "pass"},
    {"file": "assets.ips", "expect": "pass"},
    {"file": "syntax.ips", "expect": "pass"},
    {"file": "types.ips", "expect": "pass"},
    {"file": "control-flow.ips", "expect": "pass"},
    {"file": "functions.ips", "expect": "pass"},
    {"file": "call-effects.ips", "expect": "pass"},
    {"file": "random.ips", "expect": "pass"},
    {"file": "math.ips", "expect": "pass"},
    {"file": "math-bounds.ips", "expect": "pass"},
    {"file": "drawing.ips", "expect": "pass"},
    {"file": "colors.ips", "expect": "pass"},
    {"file": "distributions.ips", "expect": "pass"},
    {"file": "geometry.ips", "expect": "pass"},
    {"file": "noise.ips", "expect": "pass"},
    {"file": "palettes.ips", "expect": "pass"},
    {"file": "part.ips", "expect": "pass"},
    {"file": "composition.ips", "expect": "pass"},
    {"file": "nested-import.ips", "expect": "pass"},
    {"file": "idioms.ips", "expect": "pass"},
    {"file": "minimal-prop.ips", "expect": "pass"},
    {"file": "style/unit-arithmetic.ips", "expect": "pass"},
    {"file": "style/uniform-proportion.ips", "expect": "pass"},
    {"file": "style/channel-draws.ips", "expect": "pass"},
    {"file": "style/pixel-loop.ips", "expect": "pass"},
    {"file": "style/input-variety.ips", "expect": "pass"},
    {"file": "signed-input.ips", "expect": "pass"},
    {"file": "errors/local-type.ips", "expect": "compile-error", "message": "cannot assign f32"},
    {"file": "errors/integer-min-f32.ips", "expect": "compile-error", "message": "local 'x' is f32, cannot assign i32"},
    {"file": "errors/integer-max-f32.ips", "expect": "compile-error", "message": "local 'x' is f32, cannot assign i32"},
    {"file": "errors/integer-clamp-f32.ips", "expect": "compile-error", "message": "local 'x' is f32, cannot assign i32"},
    {"file": "errors/normalize-nonfinite.ips", "expect": "trap", "message": "vec2.normalize components must be finite"},
    {"file": "errors/color-channel.ips", "expect": "compile-error", "message": "color has only .r, .g, .b and .a channels"},
    {"file": "errors/channel-assignment.ips", "expect": "compile-error", "message": "cannot assign to '.r'"},
    {"file": "errors/chained-range.ips", "expect": "compile-error", "message": "'to' cannot be chained"},
    {"file": "errors/with-number.ips", "expect": "compile-error", "message": "'with' needs a distribution, got f32"},
    {"file": "errors/float-condition.ips", "expect": "compile-error", "message": "condition must be an integer"},
    {"file": "errors/unknown-argument.ips", "expect": "compile-error", "message": "has no argument 'colour'"},
    {"file": "errors/duplicate-call-argument.ips", "expect": "compile-error", "message": "duplicate 'x' argument"},
    {"file": "errors/duplicate-helper-parameter.ips", "expect": "compile-error", "message": "duplicate parameter 'x'"},
    {"file": "errors/helper-uniform.ips", "expect": "compile-error", "message": "only visible inside 'draw'"},
    {"file": "errors/recursion.ips", "expect": "compile-error", "message": "recursive call"},
    {"file": "errors/integer-ramp.ips", "expect": "compile-error", "message": "ramp requires a color or f32 palette"},
    {"file": "errors/list-read.ips", "expect": "compile-error", "message": "cannot read list output"},
    {"file": "errors/immutable-input.ips", "expect": "compile-error", "message": "cannot assign to input"},
    {"file": "negative-default.ips", "expect": "pass"},
    {"file": "errors/negative-u32-default.ips", "expect": "compile-error", "message": "negative default of input u32"},
    {"file": "errors/i32-default-range.ips", "expect": "compile-error", "message": "must be in [-2147483648, 2147483647]"},
    {"file": "errors/declaration-constant.ips", "expect": "compile-error", "message": "declaration constants must be literals"},
    {"file": "errors/compound-local.ips", "expect": "compile-error", "message": "cannot store rect"},
    {"file": "traps/fuel.ips", "expect": "trap", "message": "fuel exhausted"},
    {"file": "traps/noise-domain.ips", "expect": "trap", "message": "noise coordinate out of range"},
    {"file": "traps/divide-by-zero.ips", "expect": "trap", "message": "divide by zero"},
    {"file": "traps/stream-pop.ips", "expect": "trap", "message": "stream stack underflow"},
    {"file": "traps/reversed-range.ips", "expect": "trap", "message": "lower bound exceeds the upper bound"},
    {"file": "traps/negative-sigma.ips", "expect": "trap", "message": "gaussian needs a finite mean and a finite sigma > 0"},
    {"file": "collections.ips", "expect": "pass"},
    {"file": "errors/list-empty.ips", "expect": "compile-error", "message": "empty list needs a known list<T> type"},
    {"file": "errors/list-mixed.ips", "expect": "compile-error", "message": "list element needs i32"},
    {"file": "errors/list-nested.ips", "expect": "compile-error", "message": "list elements must be"},
    {"file": "errors/list-assignment.ips", "expect": "compile-error", "message": "list elements are immutable"},
    {"file": "errors/list-index-type.ips", "expect": "compile-error", "message": "list index must be i32"},
    {"file": "errors/const-list-index.ips", "expect": "compile-error", "message": "list index out of range"},
    {"file": "traps/list-index.ips", "expect": "trap", "message": "list index out of range"},
    {"file": "traps/list-unassigned.ips", "expect": "trap", "message": "list handle is unassigned"},
    {"file": "traps/poly-list-size.ips", "expect": "trap", "message": "poly requires at least three vertices"},
    {"file": "source-over-panels.ips", "expect": "pass"},
    {"file": "parts/translucent-panel.ips", "expect": "pass"},
    {"file": "errors/reserved-layer.ips", "expect": "compile-error", "message": "expected an input name, got layer"},
    {"file": "errors/reserved-sampler.ips", "expect": "compile-error", "message": "expected a declaration inside the asset block, got sampler"},
    {"file": "masked-badge.ips", "expect": "pass"},
    {"file": "mask-algebra.ips", "expect": "pass"},
    {"file": "errors/mask-radius.ips", "expect": "compile-error", "message": "mask radius must be in 0..64"},
    {"file": "errors/clip-type.ips", "expect": "compile-error", "message": "clip requires mask, got layer"},
    {"file": "errors/reserved-mask.ips", "expect": "compile-error", "message": "expected an input name, got mask"},
    {"file": "errors/reserved-clip.ips", "expect": "compile-error", "message": "expected a declaration inside the asset block, got clip"},
    {"file": "traps/mask-unset.ips", "expect": "trap", "message": "mask is unassigned"},
    {"file": "traps/mask-radius.ips", "expect": "trap", "message": "mask radius must be in 0..64"},
    {"file": "traps/mask-fuel.ips", "expect": "trap", "message": "fuel exhausted"}
  ]
}
