END_TEST //-------------------- START_TEST (test_simple_db) { GlyrQuery q; setup (&q,GLYR_GET_LYRICS,10); glyr_opt_artist (&q,"Equi"); glyr_opt_title (&q,"lala"); GlyrDatabase * db = setup_db(); GlyrMemCache * ct = glyr_cache_new(); glyr_cache_set_data (ct,g_strdup ("test"),-1); glyr_db_insert (NULL,&q, (GlyrMemCache*) 0x1); fail_unless (count_db_items (db) == 0, NULL); glyr_db_insert (db,NULL, (GlyrMemCache*) 0x1); fail_unless (count_db_items (db) == 0, NULL); glyr_db_insert (db,&q,NULL); fail_unless (count_db_items (db) == 0, NULL); glyr_db_insert (db,&q,ct); GlyrMemCache * c = glyr_db_lookup (db,&q); fail_unless (c != NULL, NULL); fail_unless (c->data != NULL, NULL); fail_unless (count_db_items (db) == 1, NULL); glyr_db_destroy (db); glyr_cache_free (ct); glyr_query_destroy (&q); }
END_TEST //-------------------- START_TEST (test_db_editplace) { GlyrDatabase * db = setup_db(); if (db != NULL) { fail_unless (count_db_items (db) == 0, NULL); GlyrMemCache * test_data = glyr_cache_new(); glyr_cache_set_data (test_data,g_strdup ("my test data"),-1); GlyrQuery q; setup (&q,GLYR_GET_LYRICS,1); glyr_db_insert (db,&q,test_data); fail_unless (count_db_items (db) == 1, NULL); GlyrMemCache * edit_one = glyr_cache_new(); glyr_cache_set_data (edit_one,g_strdup ("my new data"),-1); glyr_db_edit (db,&q,edit_one); fail_unless (count_db_items (db) == 1, NULL); GlyrMemCache * lookup_one = glyr_db_lookup (db,&q); fail_unless (memcmp (lookup_one->data,edit_one->data,edit_one->size) == 0, NULL); GlyrMemCache * edit_two = glyr_cache_new(); glyr_cache_set_data (edit_two,g_strdup ("my even new data"),-1); glyr_db_replace (db,edit_one->md5sum,&q,edit_two); fail_unless (count_db_items (db) == 1, NULL); GlyrMemCache * lookup_two = glyr_db_lookup (db,&q); fail_unless (memcmp (lookup_two->data,edit_two->data,edit_two->size) == 0, NULL); glyr_cache_free (lookup_one); glyr_cache_free (lookup_two); glyr_cache_free (edit_one); glyr_cache_free (edit_two); glyr_cache_free (test_data); glyr_db_destroy (db); } }
END_TEST //-------------------- START_TEST (test_sorted_rating) { const int N = 10; GlyrDatabase * db = setup_db(); GlyrQuery q; glyr_query_init (&q); setup (&q,GLYR_GET_LYRICS,N); for (int i = 0; i < N; ++i) { int rate = (i / 2) + 1; GlyrMemCache * ct = glyr_cache_new(); fail_if (ct == NULL); glyr_cache_set_data (ct,g_strdup_printf ("MyLyrics %d",i),-1); ct->dsrc = g_strdup ("http://MyLyrics.com"); ct->rating = rate; glyr_db_insert (db,&q,ct); glyr_cache_free (ct); } fail_unless (count_db_items (db) == N); GlyrMemCache * list = glyr_db_lookup (db,&q); GlyrMemCache * iter = list; fail_if (list == NULL); double last_timestamp = DBL_MAX; int last_rating = INT_MAX; while (iter) { glyr_cache_print (iter); fail_unless (last_rating >= iter->rating); if (last_rating == iter->rating) fail_unless (last_timestamp >= iter->timestamp); last_timestamp = iter->timestamp; last_rating = iter->rating; iter = iter->next; } glyr_free_list (list); }
END_TEST //-------------------- /* Write artist|album|title, select only artist|title */ START_TEST (test_intelligent_lookup) { GlyrDatabase * db = setup_db(); GlyrQuery alt; glyr_query_init (&alt); gchar * artist = "Аркона"; gchar * album = "Ot Serdca k Nebu"; gchar * title = "Pokrovy Nebesnogo Startsa (Shrouds Of Celestial Sage)"; glyr_opt_artist (&alt,artist); glyr_opt_album (&alt,album ); glyr_opt_title (&alt,title ); glyr_opt_type (&alt,GLYR_GET_LYRICS); GlyrMemCache * subject = glyr_cache_new(); glyr_cache_set_data (subject,g_strdup ("These are lyrics. Really."),-1); glyr_db_insert (db,&alt,subject); GlyrMemCache * one = glyr_db_lookup (db,&alt); fail_if (one == NULL,NULL); fail_if (memcmp (one->md5sum,subject->md5sum,16) != 0, NULL); glyr_cache_free (one); alt.album = NULL; GlyrMemCache * two = glyr_db_lookup (db,&alt); fail_if (two == NULL,NULL); fail_if (memcmp (two->md5sum,subject->md5sum,16) != 0, NULL); glyr_cache_free (two); fail_unless (count_db_items (db) == 1,NULL); int deleted = glyr_db_delete (db,&alt); fail_unless (deleted == 1,NULL); fail_unless (count_db_items (db) == 0,NULL); glyr_query_destroy (&alt); glyr_db_destroy (db); }
static void file_to_cache(GList **list, GlyrQuery *query, gchar *data, gsize size) { if(list != NULL && data != NULL) { GlyrMemCache *item = DL_init(); glyr_cache_set_data(item, data, size); item->type = get_data_type_from_query(query); item->dsrc = g_strdup("musictree"); item->prov = g_strdup("musictree"); if(TYPE_IS_IMAGE(query->type)) { item->img_format = g_strdup("jpeg"); item->is_image = TRUE; } else { item->is_image = FALSE; } *list = g_list_prepend(*list, item); } }
END_TEST //-------------------- START_TEST (test_iter_db) { GlyrQuery q; setup (&q,GLYR_GET_LYRICS,10); glyr_opt_artist (&q,"Equi"); glyr_opt_title (&q,"lala"); GlyrDatabase * db = setup_db(); GlyrQuery nugget; setup (&nugget,GLYR_GET_COVERART,40); glyr_opt_artist (&nugget,"A very special artist"); glyr_opt_album (&nugget,"A very special album"); GTimer * insert_time = g_timer_new(); const int N = 5000; for (int i = 0; i < N; i++) { GlyrMemCache * ct = glyr_cache_new(); glyr_cache_set_data (ct,g_strdup_printf ("test# %d",i+1),-1); ct->dsrc = g_strdup_printf ("Dummy url %d",i+1); if (i % 2) ct->rating = N ; else ct->rating = N ; if (i % 23) glyr_db_insert (db,&q,ct); else glyr_db_insert (db,&nugget,ct); glyr_cache_free (ct); } g_timer_stop (insert_time); g_message ("Used %.5f seconds to insert..",g_timer_elapsed (insert_time,NULL) ); /* Check if N items are in DB */ int cdb = count_db_items (db); g_message ("Counted %d items",cdb); fail_unless (cdb == N, NULL); /* Test if case-insensitivity works */ glyr_opt_artist (&q,"eQuI"); glyr_opt_title (&q,"LALA"); float fine_grained = 0.0; GTimer * grain_time = g_timer_new(); g_timer_start (insert_time); GlyrMemCache * c, * ptr; for (int i = 1; i <= N/10; i++) { g_timer_start (grain_time); /* Get a list of the caches */ if (i % 10) c = glyr_db_lookup (db,&q); else c = glyr_db_lookup (db,&nugget); g_timer_stop (grain_time); fine_grained += g_timer_elapsed (grain_time,NULL); ptr = c; fail_if (ptr == NULL); int last_rating = INT_MAX; int ctr = 0; while (ptr) { ctr++; fail_unless (last_rating >= ptr->rating); last_rating = ptr->rating; ptr = ptr->next; } glyr_free_list (c); /* Test if we got exactly 10 or 42 items, (honoring number setting) */ if (i % 10) fail_unless (ctr == 10); else fail_unless (ctr == 40); } g_timer_stop (insert_time); g_message ("Used %.5f seconds to lookup..",g_timer_elapsed (insert_time,NULL) ); g_message ("Used %.5f for actual lookup..",fine_grained); glyr_db_destroy (db); glyr_query_destroy (&q); glyr_query_destroy (&nugget); g_timer_destroy (insert_time); g_timer_destroy (grain_time); }