1 /* GSequencer - Advanced GTK Sequencer
2  * Copyright (C) 2018 Joël Krähemann
3  *
4  * This file is part of GSequencer.
5  *
6  * GSequencer is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * GSequencer is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with GSequencer.  If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #include <glib.h>
21 #include <glib-object.h>
22 
23 #include <ags/libags.h>
24 #include <ags/libags-audio.h>
25 
26 #include <CUnit/CUnit.h>
27 #include <CUnit/Automated.h>
28 #include <CUnit/Basic.h>
29 
30 #include <stdlib.h>
31 
32 int ags_recall_id_test_init_suite();
33 int ags_recall_id_test_clean_suite();
34 
35 void ags_recall_id_test_find_recycling_context();
36 void ags_recall_id_test_find_parent_recycling_context();
37 
38 #define AGS_RECALL_ID_TEST_FIND_RECYCLING_CONTEXT_N_RECALL_ID (16)
39 
40 #define AGS_RECALL_ID_TEST_FIND_PARENT_RECYCLING_CONTEXT_N_RECALL_ID (16)
41 
42 /* The suite initialization function.
43  * Opens the temporary file used by the tests.
44  * Returns zero on success, non-zero otherwise.
45  */
46 int
ags_recall_id_test_init_suite()47 ags_recall_id_test_init_suite()
48 {
49   return(0);
50 }
51 
52 /* The suite cleanup function.
53  * Closes the temporary file used by the tests.
54  * Returns zero on success, non-zero otherwise.
55  */
56 int
ags_recall_id_test_clean_suite()57 ags_recall_id_test_clean_suite()
58 {
59   return(0);
60 }
61 
62 void
ags_recall_id_test_find_recycling_context()63 ags_recall_id_test_find_recycling_context()
64 {
65   AgsRecallID **recall_id;
66   AgsRecallID *current;
67   AgsRecyclingContext **recycling_context;
68 
69   GList *list;
70 
71   guint i;
72   gboolean success;
73 
74   recall_id = (AgsRecallID **) malloc(AGS_RECALL_ID_TEST_FIND_RECYCLING_CONTEXT_N_RECALL_ID * sizeof(AgsRecallID*));
75   recycling_context = (AgsRecallID **) malloc(AGS_RECALL_ID_TEST_FIND_RECYCLING_CONTEXT_N_RECALL_ID * sizeof(AgsRecyclingContext*));
76 
77   list = NULL;
78 
79   for(i = 0; i < AGS_RECALL_ID_TEST_FIND_RECYCLING_CONTEXT_N_RECALL_ID; i++){
80     recycling_context[i] = ags_recycling_context_new(0);
81 
82     recall_id[i] = ags_recall_id_new();
83     g_object_set(recall_id[i],
84 		 "recycling-context", recycling_context[i],
85 		 NULL);
86 
87     list = g_list_prepend(list,
88 			  recall_id[i]);
89   }
90 
91   list = g_list_reverse(list);
92 
93   /* test */
94   success = TRUE;
95 
96   for(i = 0; i < AGS_RECALL_ID_TEST_FIND_RECYCLING_CONTEXT_N_RECALL_ID; i++){
97     current = ags_recall_id_find_recycling_context(list,
98 						   recycling_context[i]);
99 
100     if(current != recall_id[i]){
101       success = FALSE;
102 
103       break;
104     }
105   }
106 
107   CU_ASSERT(success);
108 }
109 
110 void
ags_recall_id_test_find_parent_recycling_context()111 ags_recall_id_test_find_parent_recycling_context()
112 {
113   AgsRecallID **recall_id;
114   AgsRecallID *current;
115   AgsRecyclingContext **recycling_context;
116   AgsRecyclingContext **parent_recycling_context;
117 
118   GList *list;
119 
120   guint i;
121   gboolean success;
122 
123   recall_id = (AgsRecallID **) malloc(AGS_RECALL_ID_TEST_FIND_PARENT_RECYCLING_CONTEXT_N_RECALL_ID * sizeof(AgsRecallID*));
124   recycling_context = (AgsRecallID **) malloc(AGS_RECALL_ID_TEST_FIND_PARENT_RECYCLING_CONTEXT_N_RECALL_ID * sizeof(AgsRecyclingContext*));
125   parent_recycling_context = (AgsRecallID **) malloc(AGS_RECALL_ID_TEST_FIND_PARENT_RECYCLING_CONTEXT_N_RECALL_ID * sizeof(AgsRecyclingContext*));
126 
127   list = NULL;
128 
129   for(i = 0; i < AGS_RECALL_ID_TEST_FIND_PARENT_RECYCLING_CONTEXT_N_RECALL_ID; i++){
130     parent_recycling_context[i] = ags_recycling_context_new(0);
131 
132     recycling_context[i] = ags_recycling_context_new(0);
133     g_object_set(recycling_context[i],
134 		 "parent", parent_recycling_context[i],
135 		 NULL);
136 
137     recall_id[i] = ags_recall_id_new();
138     g_object_set(recall_id[i],
139 		 "recycling-context", recycling_context[i],
140 		 NULL);
141 
142     list = g_list_prepend(list,
143 			  recall_id[i]);
144   }
145 
146   list = g_list_reverse(list);
147 
148   /* test */
149   success = TRUE;
150 
151   for(i = 0; i < AGS_RECALL_ID_TEST_FIND_PARENT_RECYCLING_CONTEXT_N_RECALL_ID; i++){
152     current = ags_recall_id_find_parent_recycling_context(list,
153 							  parent_recycling_context[i]);
154 
155     if(current != recall_id[i]){
156       success = FALSE;
157 
158       break;
159     }
160   }
161 
162   CU_ASSERT(success);
163 }
164 
165 int
main(int argc,char ** argv)166 main(int argc, char **argv)
167 {
168   CU_pSuite pSuite = NULL;
169 
170   /* initialize the CUnit test registry */
171   if(CUE_SUCCESS != CU_initialize_registry()){
172     return CU_get_error();
173   }
174 
175   /* add a suite to the registry */
176   pSuite = CU_add_suite("AgsRecallIDTest", ags_recall_id_test_init_suite, ags_recall_id_test_clean_suite);
177 
178   if(pSuite == NULL){
179     CU_cleanup_registry();
180 
181     return CU_get_error();
182   }
183 
184   /* add the tests to the suite */
185   if((CU_add_test(pSuite, "test of AgsRecallID find reycling context", ags_recall_id_test_find_recycling_context) == NULL) ||
186      (CU_add_test(pSuite, "test of AgsRecallID find parent reycling context", ags_recall_id_test_find_parent_recycling_context) == NULL)){
187     CU_cleanup_registry();
188 
189     return CU_get_error();
190   }
191 
192   /* Run all tests using the CUnit Basic interface */
193   CU_basic_set_mode(CU_BRM_VERBOSE);
194   CU_basic_run_tests();
195 
196   CU_cleanup_registry();
197 
198   return(CU_get_error());
199 }
200