miller/scripts/u/testgen.rb
2021-11-11 14:15:13 -05:00

123 lines
6.2 KiB
Ruby
Executable file

#!/usr/bin/env ruby
# ================================================================
# This is a no-longer-needed one-off script -- but it's an example of
# batch-editing for files in test/cases.
# ================================================================
require 'fileutils'
$parentdir = "test/cases/dsl-first-class-functions"
def make_case(name, mlr)
casedir = $parentdir + '/' + name
FileUtils.mkdir_p(casedir)
puts casedir
mlr = wrap(mlr)
File.open(casedir + '/mlr', 'w') do |handle|
handle.write(mlr)
end
File.open(casedir + '/cmd', 'w') do |handle|
handle.puts('mlr -n put -f ${CASEDIR}/mlr')
end
end
def wrap(mlr)
return "end {\n #{mlr}\n}\n"
end
done_entries = [
[ "select-errors-01", 'print select("not array or map", func (k,v) { return v % 10 >= 5});' ],
[ "select-errors-02", 'print select([])' ],
[ "select-errors-03", 'print select({})' ],
[ "select-errors-04", 'print select([], 2, 3, 4)' ],
[ "select-errors-05", 'print select({}, 2, 3, 4)' ],
[ "select-errors-06", 'print select([], "not a function")' ],
[ "select-errors-07", 'print select({}, "not a function")' ],
[ "select-errors-08", 'print select([], func () { return true});' ],
[ "select-errors-09", 'print select({}, func () { return true});' ],
[ "select-errors-10", 'print select([], func (a,b) { return true});' ],
[ "select-errors-11", 'print select({}, func (a,b,c) { return true});' ],
[ "select-errors-12", 'print select([1,2,3], func (e) { });' ],
[ "select-errors-13", 'print select({"a":1,"b":2,"c":3}, func (k,v) { });' ],
[ "select-errors-14", 'print select([1,2,3], func (e) { return "not a boolean"});' ],
[ "select-errors-15", 'print select({"a":1,"b":2,"c":3}, func (k,v) { return "not a boolean"});' ],
[ "apply-errors-01", 'print apply("not array or map", func (k,v) { return v % 10 >= 5});' ],
[ "apply-errors-02", 'print apply([])' ],
[ "apply-errors-03", 'print apply({})' ],
[ "apply-errors-04", 'print apply([], 2, 3, 4)' ],
[ "apply-errors-05", 'print apply({}, 2, 3, 4)' ],
[ "apply-errors-06", 'print apply([], "not a function")' ],
[ "apply-errors-07", 'print apply({}, "not a function")' ],
[ "apply-errors-08", 'print apply([], func () { return true});' ],
[ "apply-errors-09", 'print apply({}, func () { return true});' ],
[ "apply-errors-10", 'print apply([], func (a,b) { return true});' ],
[ "apply-errors-11", 'print apply({}, func (a,b,c) { return true});' ],
[ "apply-errors-12", 'print apply([1,2,3], func (e) { });' ],
[ "apply-errors-13", 'print apply({"a":1,"b":2,"c":3}, func (k,v) { });' ],
[ "apply-errors-14", 'print apply({"a":1,"b":2,"c":3}, func (k,v) { return 999 });' ],
[ "apply-errors-15", 'print apply({"a":1,"b":2,"c":3}, func (k,v) { return {} });' ],
[ "apply-errors-16", 'print apply({"a":1,"b":2,"c":3}, func (k,v) { return {"x":7,"y":8} });' ],
[ "reduce-errors-01", 'print reduce("not array or map", func (k,v) { return v % 10 >= 5});' ],
[ "reduce-errors-02", 'print reduce([])' ],
[ "reduce-errors-03", 'print reduce({})' ],
[ "reduce-errors-04", 'print reduce([], 2, 3, 4)' ],
[ "reduce-errors-05", 'print reduce({}, 2, 3, 4)' ],
[ "reduce-errors-06", 'print reduce([], "not a function")' ],
[ "reduce-errors-07", 'print reduce({}, "not a function")' ],
[ "reduce-errors-08", 'print reduce([], func () { return true});' ],
[ "reduce-errors-09", 'print reduce({}, func () { return true});' ],
[ "reduce-errors-10", 'print reduce([], func (a,b,c) { return true});' ],
[ "reduce-errors-11", 'print reduce({}, func (a,b,c,d,e) { return true});' ],
[ "reduce-errors-12", 'print reduce([1,2,3], func (acc,e) { });' ],
[ "reduce-errors-13", 'print reduce({"a":1,"b":2,"c":3}, func (acck,accv,ek,ev) { });' ],
[ "reduce-errors-14", 'print reduce({"a":1,"b":2,"c":3}, func (acck,accv,ek,ev) { return 999 });' ],
[ "reduce-errors-15", 'print reduce({"a":1,"b":2,"c":3}, func (acck,accv,ek,ev) { return {} });' ],
[ "reduce-errors-16", 'print reduce({"a":1,"b":2,"c":3}, func (acck,accv,ek,ev) { return {"x":7,"y":8} });' ],
[ "fold-errors-01", 'print fold("not array or map", func (k,v) { return v % 10 >= 5});' ],
[ "fold-errors-02", 'print fold([])' ],
[ "fold-errors-03", 'print fold({})' ],
[ "fold-errors-04", 'print fold([], 2, 3, 4)' ],
[ "fold-errors-05", 'print fold({}, 2, 3, 4)' ],
[ "fold-errors-06", 'print fold([], "not a function", 9)' ],
[ "fold-errors-07", 'print fold({}, "not a function", {"x":7})' ],
[ "fold-errors-08", 'print fold([], func () { return true}, 9);' ],
[ "fold-errors-09", 'print fold({}, func () { return true}, {"x":7});' ],
[ "fold-errors-10", 'print fold([], func (a,b,c) { return true}, 9);' ],
[ "fold-errors-11", 'print fold({}, func (a,b,c,d,e) { return true}, {"x":7});' ],
[ "fold-errors-12", 'print fold([1,2,3], func (acc,e) { }, 9);' ],
[ "fold-errors-13", 'print fold({"a":1,"b":2,"c":3}, func (acck,accv,ek,ev) { }, {"x":7});' ],
[ "fold-errors-14", 'print fold({"a":1,"b":2,"c":3}, func (acck,accv,ek,ev) { return 999 }, {"x":7});' ],
[ "fold-errors-15", 'print fold({"a":1,"b":2,"c":3}, func (acck,accv,ek,ev) { return {} }, {"x":7});' ],
[ "fold-errors-16", 'print fold({"a":1,"b":2,"c":3}, func (acck,accv,ek,ev) { return {"x":7,"y":8} }, {"x":7});' ],
[ "fold-errors-17", 'print fold({"a":1,"b":2,"c":3}, func (acck,accv,ek,ev) { return {"x":7} }, {"x":7, "y":8});' ],
[ "sort-errors-01", 'print sort("not array or map", func (k,v) { return v % 10 >= 5});' ],
[ "sort-errors-02", 'print sort([])' ],
[ "sort-errors-03", 'print sort({})' ],
[ "sort-errors-04", 'print sort([], 2, 3, 4)' ],
[ "sort-errors-05", 'print sort({}, 2, 3, 4)' ],
[ "sort-errors-06", 'print sort([], func () { return true});' ],
[ "sort-errors-07", 'print sort({}, func () { return true});' ],
[ "sort-errors-08", 'print sort([], func (a,b,c) { return true});' ],
[ "sort-errors-09", 'print sort({}, func (a,b,c,d,e) { return true});' ],
[ "sort-errors-10", 'print sort([1,2,3], func (a,b) { });' ],
[ "sort-errors-11", 'print sort({"a":1,"b":2,"c":3}, func (ak,av,bk,bv) { });' ],
[ "sort-errors-12", 'print sort({"a":1,"b":2,"c":3}, func (ak,av,bk,bv) { return {} });' ],
]
new_entries = [
]
new_entries.each do |entry|
casedir = entry[0]
mlr = entry[1]
make_case(casedir, mlr)
end