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

          Line data    Source code
       1             : /**
       2             :  * @file
       3             :  *
       4             :  * @brief
       5             :  *
       6             :  * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
       7             :  */
       8             : 
       9             : #include <kdbease.h>
      10             : 
      11             : #include "tests.h"
      12             : 
      13           2 : static void test_array (void)
      14             : {
      15           2 :         printf ("Test array\n");
      16             : 
      17           2 :         Key * k = keyNew ("user/array/#0", KEY_END);
      18           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      19           2 :         succeed_if_same_string (keyName (k), "user/array/#1");
      20           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      21           2 :         succeed_if_same_string (keyName (k), "user/array/#2");
      22           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      23           2 :         succeed_if_same_string (keyName (k), "user/array/#3");
      24           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      25           2 :         succeed_if_same_string (keyName (k), "user/array/#4");
      26           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      27           2 :         succeed_if_same_string (keyName (k), "user/array/#5");
      28           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      29           2 :         succeed_if_same_string (keyName (k), "user/array/#6");
      30           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      31           2 :         succeed_if_same_string (keyName (k), "user/array/#7");
      32           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      33           2 :         succeed_if_same_string (keyName (k), "user/array/#8");
      34           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      35           2 :         succeed_if_same_string (keyName (k), "user/array/#9");
      36           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      37           2 :         succeed_if_same_string (keyName (k), "user/array/#_10");
      38           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      39           2 :         succeed_if_same_string (keyName (k), "user/array/#_11");
      40           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      41           2 :         succeed_if_same_string (keyName (k), "user/array/#_12");
      42           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      43           2 :         succeed_if_same_string (keyName (k), "user/array/#_13");
      44           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      45           2 :         succeed_if_same_string (keyName (k), "user/array/#_14");
      46           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      47           2 :         succeed_if_same_string (keyName (k), "user/array/#_15");
      48           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      49           2 :         succeed_if_same_string (keyName (k), "user/array/#_16");
      50           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      51           2 :         succeed_if_same_string (keyName (k), "user/array/#_17");
      52           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      53           2 :         succeed_if_same_string (keyName (k), "user/array/#_18");
      54           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      55           2 :         succeed_if_same_string (keyName (k), "user/array/#_19");
      56           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      57           2 :         succeed_if_same_string (keyName (k), "user/array/#_20");
      58           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      59           2 :         succeed_if_same_string (keyName (k), "user/array/#_21");
      60           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      61           2 :         succeed_if_same_string (keyName (k), "user/array/#_22");
      62           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      63           2 :         succeed_if_same_string (keyName (k), "user/array/#_23");
      64           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      65           2 :         succeed_if_same_string (keyName (k), "user/array/#_24");
      66           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      67           2 :         succeed_if_same_string (keyName (k), "user/array/#_25");
      68           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      69           2 :         succeed_if_same_string (keyName (k), "user/array/#_26");
      70           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      71           2 :         succeed_if_same_string (keyName (k), "user/array/#_27");
      72           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      73           2 :         succeed_if_same_string (keyName (k), "user/array/#_28");
      74           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      75           2 :         succeed_if_same_string (keyName (k), "user/array/#_29");
      76           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      77         138 :         for (int i = 30; i < 99; ++i)
      78             :         {
      79         138 :                 succeed_if (!elektraArrayIncName (k), "increment array entry in loop returned error");
      80             :         }
      81           2 :         succeed_if_same_string (keyName (k), "user/array/#_99");
      82           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      83           2 :         succeed_if_same_string (keyName (k), "user/array/#__100");
      84        1798 :         for (int i = 101; i < 1000; ++i)
      85             :         {
      86        1798 :                 succeed_if (!elektraArrayIncName (k), "increment array entry in loop returned error");
      87             :         }
      88           2 :         succeed_if_same_string (keyName (k), "user/array/#__999");
      89           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      90           2 :         succeed_if_same_string (keyName (k), "user/array/#___1000");
      91           2 :         keySetBaseName (k, "#_________4000000000");
      92           2 :         succeed_if (!elektraArrayIncName (k), "increment array entry name returned error");
      93           2 :         succeed_if_same_string (keyName (k), "user/array/#_________4000000001");
      94           2 :         keyDel (k);
      95           2 : }
      96             : 
      97           2 : static void test_arrayDec (void)
      98             : {
      99           2 :         printf ("Decrement array indizes\n");
     100             : 
     101           2 :         Key * k = keyNew ("user/array/#0", KEY_END);
     102           2 :         succeed_if (elektraArrayDecName (k) == -1, "Decrementing array index 0 did not fail");
     103           2 :         keyDel (k);
     104             : 
     105           2 :         k = keyNew ("user/array/#___1337", KEY_END);
     106           2 :         succeed_if (elektraArrayDecName (k) == 0, "Unable to decrement array index 1337");
     107           2 :         succeed_if_same_string (keyName (k), "user/array/#___1336");
     108           2 :         succeed_if (elektraArrayDecName (k) == 0, "Unable to decrement array index 1336");
     109           2 :         succeed_if_same_string (keyName (k), "user/array/#___1335");
     110           2 :         keyDel (k);
     111             : 
     112           2 :         k = keyNew ("user/array/#_________4000000000", KEY_END);
     113           2 :         succeed_if (elektraArrayDecName (k) == 0, "Unable to decrement array index 4000000000");
     114           2 :         succeed_if_same_string (keyName (k), "user/array/#_________3999999999");
     115           2 :         keyDel (k);
     116           2 : }
     117             : 
     118           2 : static void test_noArray (void)
     119             : {
     120           2 :         printf ("Test no array\n");
     121           2 :         Key * k = keyNew ("user/noarray", KEY_END);
     122             : 
     123           2 :         succeed_if (elektraArrayIncName (0) == -1, "null pointer");
     124           2 :         succeed_if (elektraArrayIncName (k) == -1, "no array");
     125             : 
     126           2 :         keyDel (k);
     127           2 : }
     128             : 
     129           2 : static void test_startArray (void)
     130             : {
     131           2 :         printf ("Test start array\n");
     132           2 :         Key * k = keyNew ("user/startarray/#", KEY_END);
     133             : 
     134           2 :         succeed_if (elektraArrayIncName (k) == 0, "no array start");
     135           2 :         succeed_if_same_string (keyName (k), "user/startarray/#0");
     136           2 :         succeed_if (elektraArrayIncName (k) == 0, "no array inc");
     137           2 :         succeed_if_same_string (keyName (k), "user/startarray/#1");
     138             : 
     139           2 :         keyDel (k);
     140           2 : }
     141             : 
     142           2 : static void test_getArray (void)
     143             : {
     144           2 :         printf ("Test get array");
     145             : 
     146           2 :         KeySet * keys =
     147           2 :                 ksNew (10, keyNew ("user/test/key1", KEY_END), keyNew ("user/test/key2", KEY_END), keyNew ("user/test/array", KEY_END),
     148             :                        keyNew ("user/test/array/#0", KEY_END), keyNew ("user/test/array/#0/below", KEY_END),
     149             :                        keyNew ("user/test/array/#1", KEY_END), keyNew ("user/test/yetanotherkey", KEY_END), KS_END);
     150             : 
     151           2 :         Key * arrayParent = keyNew ("user/test/array", KEY_END);
     152           2 :         KeySet * array = elektraArrayGet (arrayParent, keys);
     153             : 
     154           2 :         succeed_if (array, "The getarray function did not return a proper keyset");
     155           2 :         succeed_if (ksGetSize (array) == 2, "the array contains a wrong number of elements");
     156           2 :         succeed_if (ksLookupByName (array, "user/test/array/#0", KDB_O_NONE), "the array does not contain #0");
     157           2 :         succeed_if (ksLookupByName (array, "user/test/array/#1", KDB_O_NONE), "the array does not contain #1");
     158             : 
     159           2 :         keyDel (arrayParent);
     160           2 :         ksDel (array);
     161           2 :         ksDel (keys);
     162           2 : }
     163             : 
     164             : 
     165           2 : static void test_getArrayNext (void)
     166             : {
     167           2 :         printf ("Test get array next");
     168             : 
     169           2 :         KeySet * array = ksNew (10, keyNew ("user/test/array/#0", KEY_END), keyNew ("user/test/array/#1", KEY_END),
     170             : 
     171             :                                 KS_END);
     172             : 
     173           2 :         Key * nextKey = elektraArrayGetNextKey (array);
     174           2 :         exit_if_fail (array, "The getnext function did not return a proper key");
     175           2 :         succeed_if (!strcmp (keyName (nextKey), "user/test/array/#2"), "The getnext function did not use the correct keyname");
     176           2 :         succeed_if (!strcmp (keyString (nextKey), ""), "The getnext function did not return an empty key");
     177             : 
     178           2 :         keyDel (nextKey);
     179           2 :         ksClear (array);
     180           2 :         nextKey = elektraArrayGetNextKey (array);
     181           2 :         succeed_if (!nextKey, "The getnext function did not return NULL on an empty array");
     182           2 :         keyDel (nextKey);
     183             : 
     184           2 :         ksDel (array);
     185           2 : }
     186             : 
     187           2 : static void test_baseName (void)
     188             : {
     189           2 :         printf ("Test validate base name");
     190             : 
     191           2 :         succeed_if (elektraArrayValidateBaseNameString ("#") == 0, "Start not detected correctly");
     192           2 :         succeed_if (elektraArrayValidateBaseNameString ("#0") == 1, "#0 should be valid");
     193           2 :         succeed_if (elektraArrayValidateBaseNameString ("#_10") == 2, "#_10 should be valid");
     194           2 :         succeed_if (elektraArrayValidateBaseNameString ("#_________1234567890") == 10, "#_________1234567890 should be valid");
     195           2 :         succeed_if (elektraArrayValidateBaseNameString ("#___________________12345678901234567890") == 20,
     196             :                     "#_________1234567890 should be valid");
     197           2 :         succeed_if (elektraArrayValidateBaseNameString ("#___________________123456789012345678901") == -1,
     198             :                     "#__________12345678901 should not be valid");
     199           2 :         succeed_if (elektraArrayValidateBaseNameString ("monkey") == -1, "monkey should not be valid");
     200           2 : }
     201             : 
     202           2 : int main (int argc, char ** argv)
     203             : {
     204           2 :         printf (" ARRAY   TESTS\n");
     205           2 :         printf ("==================\n\n");
     206             : 
     207           2 :         init (argc, argv);
     208             : 
     209           2 :         test_array ();
     210           2 :         test_arrayDec ();
     211           2 :         test_noArray ();
     212           2 :         test_startArray ();
     213           2 :         test_getArray ();
     214           2 :         test_getArrayNext ();
     215           2 :         test_baseName ();
     216             : 
     217           2 :         printf ("\ntest_array RESULTS: %d test(s) done. %d error(s).\n", nbTest, nbError);
     218             : 
     219           2 :         return nbError;
     220             : }

Generated by: LCOV version 1.13