assert (n_rows < MAX_ROWS);
assert (n_columns < MAX_COLS);
- /* If it is a duplicate hash, discard the state before checking
- its consistency, to save time. */
- if (mc_discard_dup_state (mc, hash_datasheet (ds)))
- {
- datasheet_destroy (ds);
- return;
- }
-
/* Check contents of datasheet via datasheet functions. */
if (!check_caseproto (mc, proto, datasheet_get_proto (ds), "datasheet"))
{
ds_put_format (&s, "row %zu:", row);
for (col = 0; col < n_columns; col++)
{
+ int width = caseproto_get_width (proto, col);
union value v;
- value_init (&v, 0);
+ value_init (&v, width);
if (!datasheet_get_value (ds, row, col, &v))
NOT_REACHED ();
- ds_put_format (&s, " %g", v.f);
+ if (width == 0)
+ ds_put_format (&s, " %g", v.f);
+ else
+ ds_put_format (&s, " '%.*s'",
+ width, value_str (&v, width));
}
mc_error (mc, "%s", ds_cstr (&s));
}
"have been (size %zu,%zu)", n_rows, n_columns);
}
- mc_add_state (mc, ds);
+ if (mc_discard_dup_state (mc, hash_datasheet (ds)))
+ datasheet_destroy (ds);
+ else
+ mc_add_state (mc, ds);
}
/* Extracts the contents of DS into DATA. */