double get_random_double(void) { double d; guint i; i = (guint)get_random_int_in_range(8, 13); /* using 0.9 and 7 increases chances of getting lots of decimals */ d = ((double)get_random_int_in_range(8, 999999) * i * 0.9 / 7); return d; }
gchar get_random_character(void) { if (!rcend) random_character_include_funky_chars (TRUE); return random_chars[get_random_int_in_range(0, rcend)]; }
mychild* child_create(QofBook *book) { mychild *g; g_return_val_if_fail(book, NULL); g = g_object_new(GNC_TYPE_MYCHILD, NULL); qof_instance_init_data (&g->inst, CHILD_MODULE_NAME, book); g->date = *get_random_timespec(); g->discount = get_random_double(); g->active = get_random_boolean(); g->version = get_random_int_in_range(1, 10000); g->minor = get_random_int_in_range(100001, 99999999); g->flag = get_random_character(); g->Name = get_random_string(); g->Amount = get_random_gnc_numeric(); qof_event_gen(&g->inst, QOF_EVENT_CREATE, NULL); return g; }
const char* get_random_string_in_array(const char* str_list[]) { int num; /* count number of items in list */ for (num = 0; str_list[num] != NULL; num++) ; num = get_random_int_in_range(0, num - 1); return str_list[num]; }
gchar * get_random_string_without(const char *exclude_chars) { gchar *ret; int len; int i; switch (get_random_int_in_range(0, 9)) { /* case 0: */ /* return ""; */ /* case 1: */ /* return NULL; */ /* case 2: */ /* len = get_random_int_in_range(1000, 5000); */ /* break; */ case 3: len = get_random_int_in_range(100, 500); break; default: len = get_random_int_in_range(5, 20); break; } ret = g_new0(gchar, len); for (i = 0; i < len - 1; i++) { char c; do { c = get_random_character (); } while (exclude_chars && strchr (exclude_chars, c)); ret[i] = c; } return g_strstrip (ret); }
gchar * get_random_string_length_in_range(int minlen, int maxlen) { gchar *ret; int i, len = get_random_int_in_range(minlen, maxlen); ret = g_new0(gchar, len); for (i = 0; i < len - 1; i++) ret[i] = get_random_character (); return g_strstrip(ret); }
/* Mult of zero is usually not valid, but it gets regularized to 1, so the effect is just that we end up testing mult of 1 twice, plus the regularization. */ static void test_all() { Recurrence r; GDate d_start, d_start_reg; GDate d_ref, d_next; guint16 mult, mult_reg; PeriodType pt, pt_reg; WeekendAdjust wadj, wadj_reg; gint32 j1, j2; gint i_ref; for (pt = PERIOD_ONCE; pt < NUM_PERIOD_TYPES; pt++) { for (wadj = WEEKEND_ADJ_NONE; wadj < NUM_WEEKEND_ADJS; wadj++) { for (j1 = JULIAN_START; j1 < JULIAN_START + NUM_DATES_TO_TEST; j1++) { g_date_set_julian(&d_start, j1); for (i_ref = 0; i_ref < NUM_DATES_TO_TEST_REF; i_ref++) { j2 = (guint32) get_random_int_in_range(1, 1 << 19); g_date_set_julian(&d_ref, j2); for (mult = 0; mult < NUM_MULT_TO_TEST; mult++) { recurrenceSet(&r, mult, pt, &d_start, wadj); pt_reg = recurrenceGetPeriodType(&r); d_start_reg = recurrenceGetDate(&r); mult_reg = recurrenceGetMultiplier(&r); wadj_reg = recurrenceGetWeekendAdjust(&r); recurrenceNextInstance(&r, &d_ref, &d_next); check_valid(&d_next, &d_ref, &d_start_reg, mult_reg, pt_reg, wadj_reg); } } } } } }
gboolean get_random_boolean(void) { return get_random_int_in_range (0, 1); }