~ubuntu-branches/ubuntu/saucy/dee/saucy-proposed

« back to all changes in this revision

Viewing changes to tests/test-benchmark.c

  • Committer: Package Import Robot
  • Author(s): Didier Roche
  • Date: 2012-03-12 11:49:53 UTC
  • mfrom: (1.1.17)
  • Revision ID: package-import@ubuntu.com-20120312114953-i0izi38kg1gbnas0
Tags: 1.0.6-0ubuntu1
* New upstream release.
  - Provide a way to have a ReadOnly model (LP: #675565)
  - Prefix search with DeeTreeIndex doesn't return correct results
    (LP: #933111)
  - Doing multiple changes with clear in one transaction causes critical
    (LP: #940419)
* debian/libdee-1.0-4.symbols:
  - updated

Show diffs side-by-side

added added

removed removed

Lines of Context:
75
75
    bench->benchmark_func (bench);
76
76
    bench->runs[i].elapsed = g_timer_elapsed (timer, NULL);
77
77
    total_runtime += bench->runs[i].elapsed;
 
78
    
 
79
    /* Some benchmarks will reset their own state */
 
80
    if (bench->state == NULL)
 
81
      bench->benchmark_setup (bench);
78
82
  }
79
83
  
80
84
  /* Compute average runtime */
135
139
              if (g_str_has_prefix (bench->name, *prefix))
136
140
                {
137
141
                  run_benchmark (bench);
138
 
                  return;
139
142
                }
140
143
            }
141
144
        }
213
216
bench_seqmodel_read_string_setup (Benchmark *bench)
214
217
{
215
218
  DeeModel *model;
216
 
  guint     limit = 2500, i;
217
 
 
 
219
  guint     limit = 25000, i;
 
220
  
218
221
  model = dee_sequence_model_new ();
219
222
  dee_model_set_schema (model, "s", "s", "s", "u", "b", NULL);
220
223
 
230
233
}
231
234
 
232
235
static void
 
236
bench_index_setup (Benchmark *bench)
 
237
{
 
238
  DeeModel *model;
 
239
  DeeIndex *index;
 
240
  DeeModelReader reader;
 
241
  guint     limit = 25000, i;
 
242
  
 
243
  model = dee_sequence_model_new ();
 
244
  dee_model_reader_new_for_string_column (0, &reader);
 
245
  dee_model_set_schema (model, "s", "s", "s", "u", "b", NULL);
 
246
  index = DEE_INDEX (dee_tree_index_new (model, dee_analyzer_new (), &reader));
 
247
 
 
248
  for (i = 0; i < limit; i++)
 
249
    {
 
250
      gchar *random_string = g_strdup_printf ("%"G_GINT32_FORMAT,
 
251
                                              g_test_rand_int());
 
252
      dee_model_prepend (model, random_string, "Hello world", "!", 42, TRUE);
 
253
      g_free (random_string);
 
254
    }
 
255
 
 
256
  bench->state = index;
 
257
}
 
258
 
 
259
static void
233
260
bench_model_append_run (Benchmark *bench)
234
261
{
235
262
  DeeModel *model;
310
337
}
311
338
 
312
339
static void
 
340
bench_model_read_row_run (Benchmark *bench)
 
341
{
 
342
  DeeModel     *model;
 
343
  DeeModelIter *iter, *end;
 
344
  GVariant    **row_buf;
 
345
  guint         n_cols, i;
 
346
 
 
347
  g_assert (DEE_IS_MODEL (bench->state));
 
348
 
 
349
  model = DEE_MODEL (bench->state);
 
350
  n_cols = dee_model_get_n_columns (model);
 
351
  row_buf = g_new0 (GVariant*, n_cols + 1);
 
352
 
 
353
  for (iter = dee_model_get_first_iter (model),
 
354
       end = dee_model_get_last_iter (model);
 
355
       iter != end; iter = dee_model_next (model, iter))
 
356
    {
 
357
      dee_model_get_row (model, iter, row_buf);
 
358
      for (i = 0; i < n_cols; i++) g_variant_unref (row_buf[i]);
 
359
    }
 
360
  
 
361
  g_free (row_buf);
 
362
}
 
363
 
 
364
static void
 
365
bench_model_clear_run (Benchmark *bench)
 
366
{
 
367
  DeeModel     *model;
 
368
 
 
369
  g_assert (DEE_IS_MODEL (bench->state));
 
370
 
 
371
  model = DEE_MODEL (bench->state);
 
372
  dee_model_clear (model);
 
373
  
 
374
  g_assert (dee_model_get_n_rows (model) == 0);
 
375
  
 
376
  /* Force a re-run of the setup func */
 
377
  bench->benchmark_teardown (bench);
 
378
}
 
379
 
 
380
static void
 
381
bench_model_walk_next_run (Benchmark *bench)
 
382
{
 
383
  DeeModel     *model;
 
384
  DeeModelIter *iter, *end;
 
385
 
 
386
  g_assert (DEE_IS_MODEL (bench->state));
 
387
 
 
388
  model = DEE_MODEL (bench->state);
 
389
 
 
390
 
 
391
  for (iter = dee_model_get_first_iter (model),
 
392
       end = dee_model_get_last_iter (model);
 
393
       iter != end; iter = dee_model_next (model, iter))
 
394
    {
 
395
    }
 
396
}
 
397
 
 
398
static void
 
399
bench_model_walk_pos_run (Benchmark *bench)
 
400
{
 
401
  DeeModel     *model;
 
402
  guint         n_rows, i;
 
403
 
 
404
  g_assert (DEE_IS_MODEL (bench->state));
 
405
 
 
406
  model = DEE_MODEL (bench->state);
 
407
 
 
408
  n_rows = dee_model_get_n_rows (model);
 
409
  for (i = 0; i < n_rows; i++)
 
410
    {
 
411
      dee_model_get_iter_at_row (model, i);
 
412
    }
 
413
}
 
414
 
 
415
static void
 
416
bench_index_prefix_search (Benchmark *bench)
 
417
{
 
418
  DeeIndex     *index;
 
419
  guint         i;
 
420
  gchar        *prefixes[] =
 
421
  {
 
422
   "-9", "-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1",
 
423
    "1",  "2",  "3",  "4",  "5",  "6",  "7",  "8",  "9",
 
424
  };
 
425
 
 
426
  g_assert (DEE_IS_INDEX (bench->state));
 
427
 
 
428
  index = DEE_INDEX (bench->state);
 
429
 
 
430
  for (i = 0; i < G_N_ELEMENTS (prefixes); i++)
 
431
    {
 
432
      DeeResultSet *rs = dee_index_lookup (index, prefixes[i],
 
433
                                           DEE_TERM_MATCH_PREFIX);
 
434
 
 
435
      g_assert_cmpuint (dee_result_set_get_n_rows (rs), >, 0);
 
436
 
 
437
      g_object_unref (G_OBJECT (rs));
 
438
    }
 
439
}
 
440
 
 
441
static void
313
442
bench_gobject_teardown (Benchmark *bench)
314
443
{
315
444
  GObject *obj;
316
445
  
317
 
  obj = G_OBJECT (bench->state);
318
 
  g_object_unref (obj);
 
446
  if (bench->state)
 
447
    {
 
448
      obj = G_OBJECT (bench->state);
 
449
      g_object_unref (obj);
 
450
      bench->state = NULL;
 
451
    }
319
452
}
320
453
 
321
454
Benchmark seqmodel_append = { "SequenceModel.append",
343
476
                                   bench_seqmodel_read_string_setup,
344
477
                                   bench_model_read_string_run,
345
478
                                   bench_gobject_teardown,
346
 
                                   1000,
 
479
                                   100,
347
480
                                   NULL };
348
481
 
 
482
Benchmark seqmodel_read_row = { "SequenceModel.read_row",
 
483
                                 bench_seqmodel_read_string_setup,
 
484
                                 bench_model_read_row_run,
 
485
                                 bench_gobject_teardown,
 
486
                                 100,
 
487
                                 NULL };
 
488
 
 
489
Benchmark seqmodel_clear = { "SequenceModel.clear",
 
490
                             bench_seqmodel_read_string_setup,
 
491
                             bench_model_clear_run,
 
492
                             bench_gobject_teardown,
 
493
                             20,
 
494
                             NULL };
 
495
 
 
496
Benchmark seqmodel_walk_next = { "SequenceModel.walk_next",
 
497
                                 bench_seqmodel_read_string_setup,
 
498
                                 bench_model_walk_next_run,
 
499
                                 bench_gobject_teardown,
 
500
                                 1000,
 
501
                                 NULL };
 
502
 
 
503
Benchmark seqmodel_walk_pos = { "SequenceModel.walk_pos",
 
504
                                bench_seqmodel_read_string_setup,
 
505
                                bench_model_walk_pos_run,
 
506
                                bench_gobject_teardown,
 
507
                                1000,
 
508
                                NULL };
 
509
 
349
510
Benchmark filtermodel_collate = { "FilterModel.collate",
350
511
                                  bench_filter_model_collator_setup,
351
512
                                  bench_model_prepend_run,
367
528
                                     100,
368
529
                                     NULL };
369
530
 
 
531
Benchmark tree_index_prefix_search = { "TreeIndex.prefix_search",
 
532
                                       bench_index_setup,
 
533
                                       bench_index_prefix_search,
 
534
                                       bench_gobject_teardown,
 
535
                                       25,
 
536
                                       NULL };
 
537
 
370
538
/* Arguments are interpreted as prefixes that benchmark names must match
371
539
 * in order to be run */
372
540
gint
388
556
  add_benchmark (&seqmodel_prepend);
389
557
  add_benchmark (&seqmodel_sorted);
390
558
  add_benchmark (&seqmodel_read_string);
 
559
  add_benchmark (&seqmodel_read_row);
 
560
  add_benchmark (&seqmodel_clear);
 
561
  add_benchmark (&seqmodel_walk_next);
 
562
  add_benchmark (&seqmodel_walk_pos);
391
563
  add_benchmark (&filtermodel_collate);
392
564
  add_benchmark (&filtermodel_collate_desc);
393
565
  add_benchmark (&filtermodel_sort_uint);
 
566
  add_benchmark (&tree_index_prefix_search);
394
567
 
395
568
  run_benchmarks (argc > 1 ? prefixes : NULL);
396
569