summaryrefslogtreecommitdiff
path: root/deps/theft/theft_types_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/theft/theft_types_internal.h')
-rw-r--r--deps/theft/theft_types_internal.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/deps/theft/theft_types_internal.h b/deps/theft/theft_types_internal.h
new file mode 100644
index 0000000..2f2af79
--- /dev/null
+++ b/deps/theft/theft_types_internal.h
@@ -0,0 +1,73 @@
+#ifndef THEFT_TYPES_INTERNAL_H
+#define THEFT_TYPES_INTERNAL_H
+
+typedef struct theft theft;
+
+#define THEFT_MAX_TACTICS ((uint32_t)-1)
+#define DEFAULT_THEFT_SEED 0xa600d16b175eedL
+
+typedef enum {
+ ALL_GEN_OK, /* all arguments generated okay */
+ ALL_GEN_SKIP, /* skip due to user constraints */
+ ALL_GEN_DUP, /* skip probably duplicated trial */
+ ALL_GEN_ERROR, /* memory error or other failure */
+} all_gen_res_t;
+
+typedef enum {
+ SHRINK_OK, /* simplified argument further */
+ SHRINK_DEAD_END, /* at local minima */
+ SHRINK_ERROR, /* hard error during shrinking */
+} shrink_res;
+
+/* Testing context for a specific property function. */
+struct theft_propfun_info {
+ const char *name; /* property name, can be NULL */
+ theft_propfun *fun; /* property function under test */
+
+ /* Type info for ARITY arguments. */
+ uint8_t arity; /* number of arguments */
+ struct theft_type_info *type_info[THEFT_MAX_ARITY];
+
+ /* Optional array of seeds to always run.
+ * Can be used for regression tests. */
+ int always_seed_count; /* number of seeds */
+ theft_seed *always_seeds; /* seeds to always run */
+};
+
+static theft_trial_res
+call_fun(struct theft_propfun_info *info, void **args);
+
+static bool run_trial(struct theft *t, struct theft_propfun_info *info,
+ void **args, theft_progress_cb *cb, void *env,
+ struct theft_trial_report *r, struct theft_trial_info *ti,
+ theft_progress_callback_res *cres);
+
+static void mark_called(theft *t, struct theft_propfun_info *info,
+ void **args, void *env);
+
+static bool check_called(theft *t, struct theft_propfun_info *info,
+ void **args, void *env);
+
+static theft_progress_callback_res report_on_failure(theft *t,
+ struct theft_propfun_info *info,
+ struct theft_trial_info *ti, theft_progress_cb *cb, void *env);
+
+static all_gen_res_t gen_all_args(theft *t, struct theft_propfun_info *info,
+ theft_seed seed, void *args[THEFT_MAX_ARITY], void *env);
+
+static void free_args(struct theft_propfun_info *info,
+ void **args, void *env);
+
+static theft_run_res theft_run_internal(struct theft *t,
+ struct theft_propfun_info *info,
+ int trials, theft_progress_cb *cb, void *env,
+ struct theft_trial_report *r);
+
+static bool attempt_to_shrink(theft *t, struct theft_propfun_info *info,
+ void *args[], void *env);
+
+static shrink_res
+attempt_to_shrink_arg(theft *t, struct theft_propfun_info *info,
+ void *args[], void *env, int ai);
+
+#endif