LCOV - code coverage report
Current view: top level - tests/ctest - test_ks_opmphm.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 163 163 100.0 %
Date: 2019-09-12 12:28:41 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /**
       2             :  * @file
       3             :  *
       4             :  * @brief
       5             :  *
       6             :  * @copyright BSD License (see doc/LICENSE.md or https://www.libelektra.org)
       7             :  */
       8             : 
       9             : #include <opmphm.c>
      10             : #include <tests_internal.h>
      11             : 
      12             : ssize_t ksCopyInternal (KeySet * ks, size_t to, size_t from);
      13             : 
      14           2 : void test_keyNotFound (void)
      15             : {
      16           2 :         KeySet * ks = ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
      17             :                              keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/g", KEY_END), keyNew ("/h", KEY_END),
      18             :                              keyNew ("/i", KEY_END), keyNew ("/j", KEY_END), KS_END);
      19             : 
      20           2 :         Key * found = ksLookupByName (ks, "/nothere", KDB_O_OPMPHM);
      21           2 :         succeed_if (!found, "key found");
      22             : 
      23           2 :         exit_if_fail (ks->opmphm, "build opmphm");
      24           4 :         succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
      25             : 
      26           2 :         ksDel (ks);
      27           2 : }
      28             : 
      29           2 : void test_Copy (void)
      30             : {
      31             :         // ksDup
      32             :         {
      33           2 :                 KeySet * ks = ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
      34             :                                      keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/g", KEY_END), keyNew ("/h", KEY_END),
      35             :                                      keyNew ("/i", KEY_END), keyNew ("/j", KEY_END), KS_END);
      36             : 
      37             :                 // trigger build
      38           2 :                 Key * found = ksLookupByName (ks, "/a", KDB_O_OPMPHM);
      39           2 :                 succeed_if (found, "key found");
      40             : 
      41           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
      42           4 :                 succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
      43             : 
      44           2 :                 KeySet * copy = ksDup (ks);
      45           2 :                 succeed_if (copy, "copy");
      46             : 
      47             :                 // opmphm should be build
      48           2 :                 exit_if_fail (copy->opmphm, "build opmphm");
      49           4 :                 succeed_if (opmphmIsBuild (copy->opmphm), "build opmphm");
      50             : 
      51             :                 // test opmphm
      52             :                 Key * iter;
      53           2 :                 ksRewind (copy);
      54          24 :                 while ((iter = ksNext (copy)))
      55             :                 {
      56          20 :                         Key * f = ksLookup (copy, iter, KDB_O_OPMPHM);
      57          20 :                         succeed_if (f, "key found");
      58             :                 }
      59             : 
      60             :                 // cleanup
      61           2 :                 ksDel (ks);
      62           2 :                 ksDel (copy);
      63             :         }
      64             :         // ksDeepDup
      65             :         {
      66           2 :                 KeySet * ks = ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
      67             :                                      keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/g", KEY_END), keyNew ("/h", KEY_END),
      68             :                                      keyNew ("/i", KEY_END), keyNew ("/j", KEY_END), KS_END);
      69             : 
      70             :                 // trigger build
      71           2 :                 Key * found = ksLookupByName (ks, "/a", KDB_O_OPMPHM);
      72           2 :                 succeed_if (found, "key found");
      73             : 
      74           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
      75           4 :                 succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
      76             : 
      77           2 :                 KeySet * copy = ksDeepDup (ks);
      78           2 :                 succeed_if (copy, "copy");
      79             : 
      80             :                 // opmphm should be build
      81           2 :                 exit_if_fail (copy->opmphm, "build opmphm");
      82           4 :                 succeed_if (opmphmIsBuild (copy->opmphm), "build opmphm");
      83             : 
      84             :                 // test opmphm
      85             :                 Key * iter;
      86           2 :                 ksRewind (copy);
      87          24 :                 while ((iter = ksNext (copy)))
      88             :                 {
      89          20 :                         Key * f = ksLookup (copy, iter, KDB_O_OPMPHM);
      90          20 :                         succeed_if (f, "key found");
      91             :                 }
      92             : 
      93             :                 // cleanup
      94           2 :                 ksDel (ks);
      95           2 :                 ksDel (copy);
      96             :         }
      97             :         // ksCopy
      98             :         {
      99           2 :                 KeySet * ks = ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
     100             :                                      keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/g", KEY_END), keyNew ("/h", KEY_END),
     101             :                                      keyNew ("/i", KEY_END), keyNew ("/j", KEY_END), KS_END);
     102             : 
     103             :                 // trigger build
     104           2 :                 Key * found = ksLookupByName (ks, "/a", KDB_O_OPMPHM);
     105           2 :                 succeed_if (found, "key found");
     106             : 
     107           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     108           4 :                 succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
     109             : 
     110           2 :                 KeySet * copy = ksNew (0, KS_END);
     111           2 :                 succeed_if (ksCopy (copy, ks) == 1, "copy");
     112             : 
     113             :                 // opmphm should be build
     114           2 :                 exit_if_fail (copy->opmphm, "build opmphm");
     115           4 :                 succeed_if (opmphmIsBuild (copy->opmphm), "build opmphm");
     116             : 
     117             :                 // test opmphm
     118             :                 Key * iter;
     119           2 :                 ksRewind (copy);
     120          24 :                 while ((iter = ksNext (copy)))
     121             :                 {
     122          20 :                         Key * f = ksLookup (copy, iter, KDB_O_OPMPHM);
     123          20 :                         succeed_if (f, "key found");
     124             :                 }
     125             : 
     126             :                 // cleanup
     127           2 :                 ksDel (ks);
     128           2 :                 ksDel (copy);
     129             :         }
     130             :         // test not build copy
     131             :         {
     132           2 :                 KeySet * ks = ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
     133             :                                      keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/g", KEY_END), keyNew ("/h", KEY_END),
     134             :                                      keyNew ("/i", KEY_END), keyNew ("/j", KEY_END), KS_END);
     135             : 
     136           2 :                 KeySet * copy = ksDup (ks);
     137           2 :                 succeed_if (copy, "copy");
     138             : 
     139             :                 // opmphm should not be build
     140           2 :                 succeed_if (!copy->opmphm, "not build opmphm");
     141             : 
     142             :                 // cleanup
     143           2 :                 ksDel (ks);
     144           2 :                 ksDel (copy);
     145             :         }
     146           2 : }
     147             : 
     148           2 : void test_Invalidate (void)
     149             : {
     150             :         // ksClose
     151             :         {
     152           2 :                 KeySet * ks = ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
     153             :                                      keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/g", KEY_END), keyNew ("/h", KEY_END),
     154             :                                      keyNew ("/i", KEY_END), keyNew ("/j", KEY_END), KS_END);
     155             : 
     156             :                 // trigger build
     157           2 :                 Key * found = ksLookupByName (ks, "/a", KDB_O_OPMPHM);
     158           2 :                 succeed_if (found, "key found");
     159             : 
     160           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     161           4 :                 succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
     162             : 
     163           2 :                 succeed_if (ksClose (ks) == 0, "invalidate");
     164             : 
     165           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     166           4 :                 succeed_if (!opmphmIsBuild (ks->opmphm), "empty opmphm");
     167             : 
     168             :                 // cleanup
     169           2 :                 ksDel (ks);
     170             :         }
     171             :         // ksClear
     172             :         {
     173           2 :                 KeySet * ks = ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
     174             :                                      keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/g", KEY_END), keyNew ("/h", KEY_END),
     175             :                                      keyNew ("/i", KEY_END), keyNew ("/j", KEY_END), KS_END);
     176             : 
     177             :                 // trigger build
     178           2 :                 Key * found = ksLookupByName (ks, "/a", KDB_O_OPMPHM);
     179           2 :                 succeed_if (found, "key found");
     180             : 
     181           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     182           4 :                 succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
     183             : 
     184           2 :                 succeed_if (ksClear (ks) == 0, "invalidate");
     185             : 
     186           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     187           4 :                 succeed_if (!opmphmIsBuild (ks->opmphm), "empty opmphm");
     188             : 
     189             :                 // cleanup
     190           2 :                 ksDel (ks);
     191             :         }
     192             :         // ksAppendKey
     193             :         {
     194           2 :                 KeySet * ks = ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
     195             :                                      keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/g", KEY_END), keyNew ("/h", KEY_END),
     196             :                                      keyNew ("/i", KEY_END), keyNew ("/j", KEY_END), KS_END);
     197             : 
     198             :                 // trigger build
     199           2 :                 Key * found = ksLookupByName (ks, "/a", KDB_O_OPMPHM);
     200           2 :                 succeed_if (found, "key found");
     201             : 
     202           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     203           4 :                 succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
     204             : 
     205             :                 // insert existing one
     206           2 :                 succeed_if (ksAppendKey (ks, keyNew ("/a", KEY_END)) > 0, "not invalidate");
     207             : 
     208           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     209           4 :                 succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
     210             : 
     211             :                 // insert new one
     212           2 :                 succeed_if (ksAppendKey (ks, keyNew ("/k", KEY_END)) > 0, "invalidate");
     213             : 
     214           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     215           4 :                 succeed_if (!opmphmIsBuild (ks->opmphm), "empty opmphm");
     216             : 
     217             :                 // cleanup
     218           2 :                 ksDel (ks);
     219             :         }
     220             :         // ksAppend
     221             :         {
     222           2 :                 KeySet * ks = ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
     223             :                                      keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/g", KEY_END), keyNew ("/h", KEY_END),
     224             :                                      keyNew ("/i", KEY_END), keyNew ("/j", KEY_END), KS_END);
     225             : 
     226             :                 // subset of ks
     227           2 :                 KeySet * appendSub = ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END),
     228             :                                             keyNew ("/d", KEY_END), keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), KS_END);
     229             : 
     230             :                 // super set of ks
     231           2 :                 KeySet * appendSuper =
     232           2 :                         ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
     233             :                                keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/k", KEY_END), KS_END);
     234             : 
     235             :                 // trigger build
     236           2 :                 Key * found = ksLookupByName (ks, "/a", KDB_O_OPMPHM);
     237           2 :                 succeed_if (found, "key found");
     238             : 
     239           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     240           4 :                 succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
     241             : 
     242           2 :                 succeed_if (ksAppend (ks, appendSub) > 0, "non invalidate");
     243             : 
     244           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     245           4 :                 succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
     246             : 
     247           2 :                 succeed_if (ksAppend (ks, appendSuper) > 0, "invalidate");
     248             : 
     249           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     250           4 :                 succeed_if (!opmphmIsBuild (ks->opmphm), "empty opmphm");
     251             : 
     252             :                 // cleanup
     253           2 :                 ksDel (ks);
     254           2 :                 ksDel (appendSub);
     255           2 :                 ksDel (appendSuper);
     256             :         }
     257             :         // ksCopyInternal
     258             :         {
     259           2 :                 KeySet * ks = ksNew (20, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
     260             :                                      keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/g", KEY_END), keyNew ("/h", KEY_END),
     261             :                                      keyNew ("/i", KEY_END), keyNew ("/j", KEY_END), KS_END);
     262             : 
     263             :                 // trigger build
     264           2 :                 Key * found = ksLookupByName (ks, "/a", KDB_O_OPMPHM);
     265           2 :                 succeed_if (found, "key found");
     266             : 
     267           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     268           4 :                 succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
     269             : 
     270           2 :                 succeed_if (ksCopyInternal (ks, 2, 2) > 0, "invalidate");
     271             : 
     272           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     273           4 :                 succeed_if (!opmphmIsBuild (ks->opmphm), "empty opmphm");
     274             : 
     275             :                 // cleanup
     276           2 :                 ksDel (ks);
     277             :         }
     278             :         // ksCut
     279             :         {
     280           2 :                 KeySet * ks = ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
     281             :                                      keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/g", KEY_END), keyNew ("/h", KEY_END),
     282             :                                      keyNew ("/i", KEY_END), keyNew ("/j", KEY_END), KS_END);
     283             : 
     284             :                 // trigger build
     285           2 :                 Key * found = ksLookupByName (ks, "/a", KDB_O_OPMPHM);
     286           2 :                 succeed_if (found, "key found");
     287             : 
     288           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     289           4 :                 succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
     290             : 
     291           2 :                 Key * cutPoint = keyNew ("/b", KEY_END);
     292           2 :                 KeySet * cut = ksCut (ks, cutPoint);
     293           2 :                 succeed_if (cut, "invalidate");
     294             : 
     295           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     296           4 :                 succeed_if (!opmphmIsBuild (ks->opmphm), "empty opmphm");
     297             : 
     298             :                 // cleanup
     299           2 :                 ksDel (ks);
     300           2 :                 ksDel (cut);
     301           2 :                 keyDel (cutPoint);
     302             :         }
     303             :         // ksPop
     304             :         {
     305           2 :                 KeySet * ks = ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
     306             :                                      keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/g", KEY_END), keyNew ("/h", KEY_END),
     307             :                                      keyNew ("/i", KEY_END), keyNew ("/j", KEY_END), KS_END);
     308             : 
     309             :                 // trigger build
     310           2 :                 Key * found = ksLookupByName (ks, "/a", KDB_O_OPMPHM);
     311           2 :                 succeed_if (found, "key found");
     312             : 
     313           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     314           4 :                 succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
     315             : 
     316           2 :                 Key * popKey = ksPop (ks);
     317           2 :                 succeed_if (popKey, "invalidate");
     318             : 
     319           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     320           4 :                 succeed_if (!opmphmIsBuild (ks->opmphm), "empty opmphm");
     321             : 
     322             :                 // cleanup
     323           2 :                 ksDel (ks);
     324           2 :                 keyDel (popKey);
     325             :         }
     326             :         // elektraKsPopAtCursor
     327             :         {
     328           2 :                 KeySet * ks = ksNew (10, keyNew ("/a", KEY_END), keyNew ("/b", KEY_END), keyNew ("/c", KEY_END), keyNew ("/d", KEY_END),
     329             :                                      keyNew ("/e", KEY_END), keyNew ("/f", KEY_END), keyNew ("/g", KEY_END), keyNew ("/h", KEY_END),
     330             :                                      keyNew ("/i", KEY_END), keyNew ("/j", KEY_END), KS_END);
     331             : 
     332             :                 // trigger build
     333           2 :                 Key * found = ksLookupByName (ks, "/a", KDB_O_OPMPHM);
     334           2 :                 succeed_if (found, "key found");
     335             : 
     336           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     337           4 :                 succeed_if (opmphmIsBuild (ks->opmphm), "build opmphm");
     338             : 
     339           2 :                 Key * popKey = elektraKsPopAtCursor (ks, 1);
     340           2 :                 succeed_if (popKey, "invalidate");
     341             : 
     342           2 :                 exit_if_fail (ks->opmphm, "build opmphm");
     343           4 :                 succeed_if (!opmphmIsBuild (ks->opmphm), "empty opmphm");
     344             : 
     345             :                 // cleanup
     346           2 :                 ksDel (ks);
     347           2 :                 keyDel (popKey);
     348             :         }
     349           2 : }
     350             : 
     351           2 : int main (int argc, char ** argv)
     352             : {
     353           2 :         printf ("KS OPMPHM      TESTS\n");
     354           2 :         printf ("==================\n\n");
     355             : 
     356           2 :         init (argc, argv);
     357             : 
     358           2 :         test_keyNotFound ();
     359           2 :         test_Copy ();
     360           2 :         test_Invalidate ();
     361             : 
     362           2 :         print_result ("test_ks_opmphm");
     363             : 
     364           2 :         return nbError;
     365             : }

Generated by: LCOV version 1.13