LCOV - code coverage report
Current view: top level - tests - array.c (source / functions) Hit Total Coverage
Test: cov_nosys.info Lines: 90 90 100.0 %
Date: 2024-06-16 08:54:54 Functions: 11 11 100.0 %

          Line data    Source code
       1             : /*
       2             :  *  array.c
       3             :  *  Patater GUI Kit
       4             :  *
       5             :  *  Created by Jaeden Amero on 2020-04-21.
       6             :  *  Copyright 2021. SPDX-License-Identifier: AGPL-3.0-or-later
       7             :  */
       8             : 
       9             : #include "guikit/array.h"
      10             : #include "ptest/test.h"
      11             : 
      12           1 : static int test_null_array_len_0(void)
      13             : {
      14           1 :     long *a = NULL;
      15             : 
      16           1 :     TEST_EQ(array_len(a), 0);
      17             : 
      18           1 :     return 0;
      19             : }
      20             : 
      21           1 : static int test_null_array_cap_0(void)
      22             : {
      23           1 :     long *a = NULL;
      24             : 
      25           1 :     TEST_EQ(array_cap(a), 0);
      26             : 
      27           1 :     return 0;
      28             : }
      29             : 
      30           1 : static int test_grow_1(void)
      31             : {
      32           1 :     long *a = NULL;
      33             : 
      34           1 :     array_grow(a, 1);
      35             : 
      36           1 :     TEST_NEP(a, NULL);
      37           1 :     TEST_EQ(array_len(a), 0);
      38           1 :     TEST_GT(array_cap(a), 0);
      39             : 
      40           1 :     array_free(a);
      41             : 
      42           1 :     return 0;
      43             : }
      44             : 
      45           1 : static int test_push_1(void)
      46             : {
      47           1 :     long *a = NULL;
      48           1 :     long val = 1234;
      49             : 
      50           1 :     array_push(a, val);
      51             : 
      52           1 :     TEST_EQ(a[0], val);
      53           1 :     TEST_EQ(array_len(a), 1);
      54           1 :     TEST_GT(array_cap(a), 0);
      55             : 
      56           1 :     array_free(a);
      57             : 
      58           1 :     return 0;
      59             : }
      60             : 
      61           1 : static int test_pop_1(void)
      62             : {
      63           1 :     long *a = NULL;
      64           1 :     long val = 1234;
      65             :     long got;
      66             : 
      67           1 :     array_push(a, val);
      68           1 :     got = array_pop(a);
      69             : 
      70           1 :     TEST_EQ(got, val);
      71           1 :     TEST_EQ(array_len(a), 0);
      72           1 :     TEST_GT(array_cap(a), 0);
      73             : 
      74           1 :     array_free(a);
      75             : 
      76           1 :     return 0;
      77             : }
      78             : 
      79           1 : static int test_grow_2(void)
      80             : {
      81           1 :     long *a = NULL;
      82             : 
      83           1 :     array_grow(a, 2);
      84             : 
      85           1 :     TEST_NEP(a, NULL);
      86           1 :     TEST_EQ(array_len(a), 0);
      87           1 :     TEST_GE(array_cap(a), 2);
      88             : 
      89           1 :     array_free(a);
      90             : 
      91           1 :     return 0;
      92             : }
      93             : 
      94           1 : static int test_push_2(void)
      95             : {
      96           1 :     long *a = NULL;
      97           1 :     long val[] = { 1234, 5678 };
      98             : 
      99           1 :     array_push(a, val[0]);
     100           1 :     array_push(a, val[1]);
     101             : 
     102           1 :     TEST_EQ(a[0], val[0]);
     103           1 :     TEST_EQ(a[1], val[1]);
     104           1 :     TEST_EQ(array_len(a), 2);
     105           1 :     TEST_GE(array_cap(a), 2);
     106             : 
     107           1 :     array_free(a);
     108             : 
     109           1 :     return 0;
     110             : }
     111             : 
     112           1 : static int test_pop_2(void)
     113             : {
     114           1 :     long *a = NULL;
     115           1 :     long val[] = { 1234, 5678 };
     116             :     long got;
     117             : 
     118           1 :     array_push(a, val[0]);
     119           1 :     array_push(a, val[1]);
     120             : 
     121           1 :     got = array_pop(a);
     122           1 :     TEST_EQ(got, val[1]);
     123             : 
     124           1 :     got = array_pop(a);
     125           1 :     TEST_EQ(got, val[0]);
     126             : 
     127           1 :     TEST_EQ(array_len(a), 0);
     128           1 :     TEST_GT(array_cap(a), 0);
     129             : 
     130           1 :     array_free(a);
     131             : 
     132           1 :     return 0;
     133             : }
     134             : 
     135           1 : static int test_amortized_constant_growth(void)
     136             : {
     137             :     /* Test that allocation are amortized constant time. To do this, we have to
     138             :      * expect the method to accomplish this is to double the array size when
     139             :      * more space is needed. If the method to accomplish amortized constant
     140             :      * time allocation changes, this test will need changing as well. */
     141           1 :     long *a = NULL;
     142           1 :     long val = 1234;
     143             : 
     144           1 :     array_push(a, val);
     145           1 :     array_push(a, val);
     146           1 :     array_push(a, val);
     147             : 
     148           1 :     TEST_EQ(array_len(a), 3);
     149           1 :     TEST_EQ(array_cap(a), 4);
     150             : 
     151           1 :     array_free(a);
     152             : 
     153           1 :     return 0;
     154             : }
     155             : 
     156           1 : static int test_null_array_free(void)
     157             : {
     158           1 :     long *a = NULL;
     159             : 
     160           1 :     array_free(a);
     161             : 
     162           1 :     TEST_EQP(a, NULL);
     163             : 
     164           1 :     return 0;
     165             : }
     166             : 
     167           1 : static int test_free(void)
     168             : {
     169           1 :     long *a = NULL;
     170           1 :     long val = 1234;
     171             : 
     172           1 :     array_push(a, val);
     173             : 
     174           1 :     TEST_NEP(a, NULL);
     175             : 
     176           1 :     array_free(a);
     177             : 
     178           1 :     TEST_EQP(a, NULL);
     179             : 
     180           1 :     return 0;
     181             : }
     182             : 
     183             : const test_fn tests[] =
     184             : {
     185             :     test_null_array_len_0,
     186             :     test_null_array_cap_0,
     187             :     test_grow_1,
     188             :     test_push_1,
     189             :     test_pop_1,
     190             :     test_grow_2,
     191             :     test_push_2,
     192             :     test_pop_2,
     193             :     test_amortized_constant_growth,
     194             :     test_null_array_free,
     195             :     test_free,
     196             :     0
     197             : };

Generated by: LCOV version 1.14