sclass RandomAndVary_Record implements RandomAndVary {
Class theClass;
new Map handlers; // key = field name
*(Class *theClass, O... params) {
addAll(handlers, paramsToMap(params));
}
public A randomInstance() {
A a = nu(theClass);
for (S field, RandomAndVary handler : handlers) {
setOpt(a, field, handler.randomInstance());
}
ret a;
}
public A varyInstance(A a) {
a = shallowClone(a);
S field = random(keys(handlers));
RandomAndVary handler = handlers.get(field);
O o = getOpt(a, field);
if (o == null) ret;
setOpt(a, field, handler.varyInstance(o));
ret a;
}
}