1 #include "tst-main.c"
2 
3 static const char *rf = __FILE__;
4 
tst_nums(int * ret,unsigned int num_buf,unsigned int num_non,unsigned int num_ptr,unsigned int num_ref)5 static void tst_nums(int *ret,
6                      unsigned int num_buf, unsigned int num_non,
7                      unsigned int num_ptr, unsigned int num_ref)
8 {
9   unsigned int val = 0;
10 
11   TST_B_TST(*ret, 1,
12             !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_GET_NUM_SPARE_BUF, &val));
13   TST_B_TST(*ret, 2, (val != num_buf));
14 
15   TST_B_TST(*ret, 3,
16             !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_GET_NUM_SPARE_NON, &val));
17   TST_B_TST(*ret, 4, (val != num_non));
18 
19   TST_B_TST(*ret, 5,
20             !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_GET_NUM_SPARE_PTR, &val));
21   TST_B_TST(*ret, 6, (val != num_ptr));
22 
23   TST_B_TST(*ret, 7,
24             !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_GET_NUM_SPARE_REF, &val));
25   TST_B_TST(*ret, 8, (val != num_ref));
26 }
27 
tst(void)28 int tst(void)
29 {
30   int ret = 0;
31 
32   tst_nums(&ret, 0, 0, 0, 0);
33 
34   TST_B_TST(ret, 10,
35             !vstr_make_spare_nodes(s1->conf, VSTR_TYPE_NODE_BUF, 5));
36   TST_B_TST(ret, 11,
37             !vstr_make_spare_nodes(s1->conf, VSTR_TYPE_NODE_NON, 6));
38   TST_B_TST(ret, 12,
39             !vstr_make_spare_nodes(s1->conf, VSTR_TYPE_NODE_PTR, 7));
40   TST_B_TST(ret, 13,
41             !vstr_make_spare_nodes(s1->conf, VSTR_TYPE_NODE_REF, 8));
42   tst_nums(&ret, 5, 6, 7, 8);
43 
44   vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_BUF, 4);
45   vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_NON, 3);
46   vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_PTR, 2);
47   vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_REF, 1);
48   tst_nums(&ret, 1, 3, 5, 7);
49 
50   vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_BUF, 2048);
51   vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_NON, 1024);
52   vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_PTR, 512);
53   vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_REF, 256);
54   tst_nums(&ret, 0, 0, 0, 0);
55 
56   TST_B_TST(ret, 14,
57             !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_SET_NUM_SPARE_BUF, 11));
58   TST_B_TST(ret, 15,
59             !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_SET_NUM_SPARE_NON, 12));
60   TST_B_TST(ret, 16,
61             !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_SET_NUM_SPARE_PTR, 13));
62   TST_B_TST(ret, 17,
63             !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_SET_NUM_SPARE_REF, 14));
64   tst_nums(&ret, 11, 12, 13, 14);
65 
66   TST_B_TST(ret, 14,
67             !vstr_cntl_conf(s1->conf,
68                             VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_BUF, 110, 120));
69   TST_B_TST(ret, 15,
70             !vstr_cntl_conf(s1->conf,
71                             VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_NON, 120, 130));
72   TST_B_TST(ret, 16,
73             !vstr_cntl_conf(s1->conf,
74                             VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_PTR, 130, 140));
75   TST_B_TST(ret, 17,
76             !vstr_cntl_conf(s1->conf,
77                             VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_REF, 140, 150));
78   tst_nums(&ret, 110, 120, 130, 140);
79 
80   TST_B_TST(ret, 21,
81             !vstr_cntl_conf(s1->conf,
82                             VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_BUF, 10, 20));
83   TST_B_TST(ret, 22,
84             !vstr_cntl_conf(s1->conf,
85                             VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_NON, 20, 30));
86   TST_B_TST(ret, 23,
87             !vstr_cntl_conf(s1->conf,
88                             VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_PTR, 30, 40));
89   TST_B_TST(ret, 24,
90             !vstr_cntl_conf(s1->conf,
91                             VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_REF, 40, 50));
92   tst_nums(&ret, 20, 30, 40, 50);
93 
94   if (MFAIL_NUM_OK)
95   {
96     Vstr_conf *succeeded = NULL;
97     unsigned long mfail_count = 0;
98 
99     while (!succeeded)
100     {
101       tst_mfail_num(++mfail_count);
102       succeeded = vstr_make_conf();
103     }
104     tst_mfail_num(0);
105     ASSERT(mfail_count > 1);
106     vstr_free_conf(succeeded);
107   }
108 
109   if (MFAIL_NUM_OK)
110   {
111     Vstr_base *succeeded = NULL;
112     unsigned long mfail_count = 0;
113 
114     while (!succeeded)
115     {
116       tst_mfail_num(++mfail_count);
117       succeeded = vstr_make_base(NULL);
118     }
119     tst_mfail_num(0);
120     ASSERT(mfail_count > 1);
121     vstr_free_base(succeeded);
122   }
123 
124   /* pre-init all data */
125   vstr_cntl_conf(NULL, VSTR_CNTL_CONF_SET_TYPE_GRPALLOC_CACHE,
126                  VSTR_TYPE_CNTL_CONF_GRPALLOC_CSTR);
127   if (MFAIL_NUM_OK)
128   {
129     Vstr_base *succeeded = NULL;
130     unsigned long mfail_count = 0;
131 
132     while (!succeeded)
133     {
134       tst_mfail_num(++mfail_count);
135       succeeded = vstr_make_base(NULL);
136     }
137     tst_mfail_num(0);
138     ASSERT(mfail_count > 1);
139     vstr_free_base(succeeded);
140   }
141 
142   vstr_free_conf(NULL);
143 
144   return (TST_B_RET(ret));
145 }
146