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