~mhr3/dee/gir-compare-row-func

« back to all changes in this revision

Viewing changes to tests/test-model-rows.c

  • Committer: Tarmac
  • Author(s): Mikkel Kamstrup Erlandsen
  • Date: 2012-01-09 17:26:12 UTC
  • mfrom: (333.1.11 sorted)
  • Revision ID: tarmac-20120109172612-fc01ukxmajou3ks0
Adds two new methods to the DeeModel interface: insert_row_sorted() and find_row_sorted(). Adding varargs convenience functions as well. There are linear default impls covering all our classes in DeeSerializableModel. We have optimized tree-based algorithms implemented for DeeSequenceModel and DeeFilterModel.

The Python support is currently broken on some bug in pygobject. I believed that my pygobject patches on https://bugzilla.gnome.org/show_bug.cgi?id=667244 would fix this, but testing unfortunately confirms that it doesn't.... Fixes: https://bugs.launchpad.net/bugs/913128. Appoved by Michal Hruby.

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
static void test_no_transfer     (RowsFixture *fix, gconstpointer data);
47
47
static void test_iter_backwards  (RowsFixture *fix, gconstpointer data);
48
48
static void test_illegal_access  (RowsFixture *fix, gconstpointer data);
 
49
static void test_sorted          (RowsFixture *fix, gconstpointer data);
49
50
 
50
51
void
51
52
test_model_rows_create_suite (void)
116
117
              proxy_rows_setup, test_illegal_access, proxy_rows_teardown);
117
118
  g_test_add (TXN_DOMAIN"/IllegalAccess", RowsFixture, 0,
118
119
              txn_rows_setup, test_illegal_access, txn_rows_teardown);
 
120
 
 
121
  g_test_add (SEQ_DOMAIN"/Sorted", RowsFixture, 0,
 
122
              seq_rows_setup, test_sorted, seq_rows_teardown);
 
123
  g_test_add (PROXY_DOMAIN"/Sorted", RowsFixture, 0,
 
124
              proxy_rows_setup, test_sorted, proxy_rows_teardown);
 
125
  g_test_add (TXN_DOMAIN"/Sorted", RowsFixture, 0,
 
126
              txn_rows_setup, test_sorted, txn_rows_teardown);
119
127
}
120
128
 
121
129
static void
429
437
    }
430
438
  g_test_trap_assert_failed ();
431
439
}
 
440
 
 
441
static gint
 
442
cmp_col_0 (GVariant **row1, GVariant **row2, gpointer user_data)
 
443
{
 
444
  g_assert_cmpstr (user_data, ==, "test-user-data");
 
445
  //g_debug ("CMP %i %i", g_variant_get_int32 (row1[0]), g_variant_get_int32 (row2[0]));
 
446
  return g_variant_get_int32 (row2[0]) - g_variant_get_int32 (row1[0]);
 
447
}
 
448
 
 
449
static void
 
450
test_sorted (RowsFixture *fix, gconstpointer data)
 
451
{
 
452
  DeeModelIter *hter, *iter, *jter, *kter;
 
453
  gboolean      was_found;
 
454
 
 
455
  /* FINAL MODEL: [(28,s), (27,s), (26,s), (25,s)]
 
456
   *           ~= [hter, iter, jter, kter] */
 
457
 
 
458
  /* Test find() with an empty model. With NULL was_found arg */
 
459
  iter = dee_model_find_sorted (fix->model, cmp_col_0, "test-user-data", NULL,
 
460
                                0, "");
 
461
  g_assert (iter == dee_model_get_last_iter (fix->model));
 
462
 
 
463
  /* Test find() with an empty model. With non-NULL was_found arg */
 
464
  was_found = TRUE;
 
465
  iter = dee_model_find_sorted (fix->model, cmp_col_0, "test-user-data", &was_found,
 
466
                                0, "");
 
467
  g_assert (!was_found);
 
468
  g_assert (iter == dee_model_get_last_iter (fix->model));
 
469
 
 
470
  /* Insert the first row */
 
471
  iter = dee_model_insert_sorted (fix->model, cmp_col_0, "test-user-data",
 
472
                                  27, "Sorta sorted");
 
473
  g_assert (iter != dee_model_get_last_iter (fix->model));
 
474
  g_assert (iter == dee_model_get_first_iter (fix->model));
 
475
 
 
476
  /* Test append */
 
477
  kter = dee_model_insert_sorted (fix->model, cmp_col_0, "test-user-data",
 
478
                                  25, "Sorta sorted");
 
479
  g_assert (kter != dee_model_get_last_iter (fix->model));
 
480
  g_assert (kter != dee_model_get_first_iter (fix->model));
 
481
  g_assert (iter == dee_model_get_first_iter (fix->model));
 
482
  g_assert (kter != iter);
 
483
 
 
484
  g_assert_cmpint (2, ==, dee_model_get_n_rows (fix->model));
 
485
  g_assert (kter == dee_model_next (fix->model, iter));
 
486
 
 
487
  /* Test insert in between rows */
 
488
  jter = dee_model_insert_sorted (fix->model, cmp_col_0, "test-user-data",
 
489
                                  26, "Sorta sorted");
 
490
  g_assert (jter != dee_model_get_last_iter (fix->model));
 
491
  g_assert (jter != dee_model_get_first_iter (fix->model));
 
492
  g_assert (iter == dee_model_get_first_iter (fix->model));
 
493
  g_assert (jter != iter);
 
494
  g_assert (jter != kter);
 
495
 
 
496
  g_assert (jter == dee_model_next (fix->model, iter));
 
497
  g_assert (kter == dee_model_next (fix->model, jter));
 
498
  g_assert (dee_model_get_last_iter (fix->model) == dee_model_next (fix->model, kter));
 
499
 
 
500
  /* Test prepend */
 
501
  hter = dee_model_insert_sorted (fix->model, cmp_col_0, "test-user-data",
 
502
                                  28, "Sorta sorted");
 
503
  g_assert (hter == dee_model_get_first_iter (fix->model));
 
504
  g_assert (iter == dee_model_next (fix->model, hter));
 
505
 
 
506
  g_assert_cmpint (4, ==, dee_model_get_n_rows (fix->model));
 
507
 
 
508
  /* Test find() again now that we have data in the model */
 
509
  DeeModelIter *result;
 
510
  result = dee_model_find_sorted (fix->model, cmp_col_0, "test-user-data", NULL,
 
511
                                  24, "");
 
512
  g_assert (result == dee_model_get_last_iter (fix->model));
 
513
  result = dee_model_find_sorted (fix->model, cmp_col_0, "test-user-data", NULL,
 
514
                                  28, "");
 
515
  g_assert (result == hter);
 
516
 
 
517
  /* Test find(). With non-NULL was_found arg */
 
518
  was_found = TRUE;
 
519
  result = dee_model_find_sorted (fix->model, cmp_col_0, "test-user-data", &was_found,
 
520
                                  24, "");
 
521
  g_assert (result == dee_model_get_last_iter (fix->model));
 
522
  result = dee_model_find_sorted (fix->model, cmp_col_0, "test-user-data", &was_found,
 
523
                                  28, "");
 
524
  g_assert (was_found);
 
525
  g_assert (result == hter);
 
526
}