1 /**
2  * \file    TestCopyAndClone.cpp
3  * \brief   Test the copy and clone methods for annotation classes
4  * \author  Sarah Keating
5  *
6  * <!--------------------------------------------------------------------------
7  * This file is part of libSBML.  Please visit http://sbml.org for more
8  * information about SBML, and the latest version of libSBML.
9  *
10  * Copyright (C) 2020 jointly by the following organizations:
11  *     1. California Institute of Technology, Pasadena, CA, USA
12  *     2. University of Heidelberg, Heidelberg, Germany
13  *     3. University College London, London, UK
14  *
15  * Copyright (C) 2019 jointly by the following organizations:
16  *     1. California Institute of Technology, Pasadena, CA, USA
17  *     2. University of Heidelberg, Heidelberg, Germany
18  *
19  * Copyright (C) 2013-2018 jointly by the following organizations:
20  *     1. California Institute of Technology, Pasadena, CA, USA
21  *     2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
22  *     3. University of Heidelberg, Heidelberg, Germany
23  *
24  * Copyright (C) 2009-2013 jointly by the following organizations:
25  *     1. California Institute of Technology, Pasadena, CA, USA
26  *     2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
27  *
28  * Copyright (C) 2006-2008 by the California Institute of Technology,
29  *     Pasadena, CA, USA
30  *
31  * Copyright (C) 2002-2005 jointly by the following organizations:
32  *     1. California Institute of Technology, Pasadena, CA, USA
33  *     2. Japan Science and Technology Agency, Japan
34  *
35  * This library is free software; you can redistribute it and/or modify it
36  * under the terms of the GNU Lesser General Public License as published by
37  * the Free Software Foundation.  A copy of the license agreement is provided
38  * in the file named "LICENSE.txt" included with this software distribution
39  * and also available online as http://sbml.org/software/libsbml/license.html
40  * ---------------------------------------------------------------------- -->*/
41 
42 #include <sbml/annotation/ModelHistory.h>
43 #include <sbml/annotation/ModelCreator.h>
44 #include <sbml/annotation/Date.h>
45 #include <sbml/annotation/CVTerm.h>
46 #include <sbml/SBase.h>
47 
48 #include <check.h>
49 
50 
51 using namespace std;
52 LIBSBML_CPP_NAMESPACE_USE
53 
54 static const string errMsg = "Level/version/namespaces combination is invalid";
55 static const string errMsg1 = "Null argument to copy constructor";
56 static const string errMsg2 = "Null argument to assignment operator";
57 
58 CK_CPPSTART
START_TEST(test_Date_copyConstructor)59 START_TEST ( test_Date_copyConstructor )
60 {
61   Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
62 
63   fail_unless(date->getMonth() == 12);
64   fail_unless(date->getSecond() == 45);
65 
66   Date* date2=new Date(*date);
67 
68   fail_unless(date2->getMonth() == 12);
69   fail_unless(date2->getSecond() == 45);
70 
71   delete date2;
72   delete date;
73 }
74 END_TEST
75 
START_TEST(test_Date_assignmentOperator)76 START_TEST ( test_Date_assignmentOperator )
77 {
78   Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
79 
80   fail_unless(date->getMonth() == 12);
81   fail_unless(date->getSecond() == 45);
82 
83   Date* date2=new Date();
84   (*date2) = *date;
85 
86   fail_unless(date2->getMonth() == 12);
87   fail_unless(date2->getSecond() == 45);
88 
89   delete date2;
90   delete date;
91 
92 }
93 END_TEST
94 
95 
START_TEST(test_Date_clone)96 START_TEST ( test_Date_clone )
97 {
98   Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
99 
100   fail_unless(date->getMonth() == 12);
101   fail_unless(date->getSecond() == 45);
102 
103   Date* date2 = static_cast<Date*>(date->clone());
104 
105   fail_unless(date2->getMonth() == 12);
106   fail_unless(date2->getSecond() == 45);
107 
108   delete date2;
109   delete date;
110 
111 }
112 END_TEST
113 
114 
START_TEST(test_Date_ConstructorException)115 START_TEST ( test_Date_ConstructorException )
116 {
117   string msg;
118   try
119   {
120     Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
121     delete date;
122   }
123   catch (SBMLConstructorException &e)
124   {
125     msg = e.what();
126   }
127   fail_unless(msg == "");
128 
129 
130 }
131 END_TEST
132 
133 
START_TEST(test_ModelCreator_copyConstructor)134 START_TEST ( test_ModelCreator_copyConstructor )
135 {
136   ModelCreator * mc = new ModelCreator();
137   mc->setFamilyName("Keating");
138   mc->setEmail("sbml-team@caltech.edu");
139 
140   fail_unless(mc->getFamilyName() == "Keating");
141   fail_unless(mc->getEmail() == "sbml-team@caltech.edu");
142 
143   ModelCreator* mc2=new ModelCreator(*mc);
144 
145   fail_unless(mc2->getFamilyName() == "Keating");
146   fail_unless(mc2->getEmail() == "sbml-team@caltech.edu");
147 
148   delete mc2;
149   delete mc;
150 }
151 END_TEST
152 
153 
START_TEST(test_ModelCreator_assignmentOperator)154 START_TEST ( test_ModelCreator_assignmentOperator )
155 {
156   ModelCreator * mc = new ModelCreator();
157   mc->setFamilyName("Keating");
158   mc->setEmail("sbml-team@caltech.edu");
159 
160   fail_unless(mc->getFamilyName() == "Keating");
161   fail_unless(mc->getEmail() == "sbml-team@caltech.edu");
162 
163   ModelCreator* mc2=new ModelCreator();
164   (*mc2) = *mc;
165 
166   fail_unless(mc2->getFamilyName() == "Keating");
167   fail_unless(mc2->getEmail() == "sbml-team@caltech.edu");
168 
169   delete mc2;
170   delete mc;
171 
172 }
173 END_TEST
174 
175 
START_TEST(test_ModelCreator_clone)176 START_TEST ( test_ModelCreator_clone )
177 {
178   ModelCreator * mc = new ModelCreator();
179   mc->setFamilyName("Keating");
180   mc->setEmail("sbml-team@caltech.edu");
181 
182   fail_unless(mc->getFamilyName() == "Keating");
183   fail_unless(mc->getEmail() == "sbml-team@caltech.edu");
184 
185   ModelCreator* mc2 = static_cast<ModelCreator*>(mc->clone());
186 
187   fail_unless(mc2->getFamilyName() == "Keating");
188   fail_unless(mc2->getEmail() == "sbml-team@caltech.edu");
189 
190   delete mc2;
191   delete mc;
192 
193 }
194 END_TEST
195 
196 
START_TEST(test_ModelCreator_ConstructorException)197 START_TEST ( test_ModelCreator_ConstructorException )
198 {
199   string msg;
200   try
201   {
202     ModelCreator * mc = new ModelCreator();
203     delete mc;
204   }
205   catch (SBMLConstructorException &e)
206   {
207     msg = e.what();
208   }
209   fail_unless(msg == "");
210 
211 }
212 END_TEST
213 
214 
START_TEST(test_ModelHistory_copyConstructor)215 START_TEST ( test_ModelHistory_copyConstructor )
216 {
217   ModelHistory * mh = new ModelHistory();
218 
219   ModelCreator *mc = new ModelCreator();
220   mc->setFamilyName("Keating");
221   mc->setGivenName("Sarah");
222   mc->setEmail("sbml-team@caltech.edu");
223 
224   mh->addCreator(mc);
225   delete mc;
226 
227   Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
228 
229   mh->setCreatedDate(date);
230   delete date;
231 
232   fail_unless(mh->getCreatedDate()->getMonth() == 12);
233   fail_unless(mh->getCreatedDate()->getSecond() == 45);
234 
235   fail_unless(static_cast <ModelCreator*>
236     (mh->getListCreators()->get(0))->getFamilyName() == "Keating");
237 
238   ModelHistory* mh2=new ModelHistory(*mh);
239 
240   fail_unless(mh2->getCreatedDate()->getMonth() == 12);
241   fail_unless(mh2->getCreatedDate()->getSecond() == 45);
242 
243   fail_unless(static_cast <ModelCreator*>(mh2->getListCreators()->get(0))->getFamilyName() == "Keating");
244 
245   delete mh2;
246   delete mh;
247 }
248 END_TEST
249 
250 
START_TEST(test_ModelHistory_assignmentOperator)251 START_TEST ( test_ModelHistory_assignmentOperator )
252 {
253   ModelHistory * mh = new ModelHistory();
254 
255   ModelCreator *mc = new ModelCreator();
256   mc->setGivenName("Sarah");
257   mc->setFamilyName("Keating");
258   mc->setEmail("sbml-team@caltech.edu");
259 
260   mh->addCreator(mc);
261   delete mc;
262 
263   Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
264 
265   mh->setCreatedDate(date);
266   delete date;
267 
268   fail_unless(mh->getCreatedDate()->getMonth() == 12);
269   fail_unless(mh->getCreatedDate()->getSecond() == 45);
270 
271   fail_unless(static_cast <ModelCreator*>(mh->getListCreators()->get(0))->getFamilyName() == "Keating");
272 
273   ModelHistory* mh2=new ModelHistory();
274   (*mh2) = *mh;
275 
276   fail_unless(mh2->getCreatedDate()->getMonth() == 12);
277   fail_unless(mh2->getCreatedDate()->getSecond() == 45);
278 
279   fail_unless(static_cast <ModelCreator*>(mh2->getListCreators()->get(0))->getFamilyName() == "Keating");
280 
281   delete mh2;
282   delete mh;
283 
284 }
285 END_TEST
286 
287 
START_TEST(test_ModelHistory_clone)288 START_TEST ( test_ModelHistory_clone )
289 {
290   ModelHistory * mh = new ModelHistory();
291 
292   ModelCreator *mc = new ModelCreator();
293   mc->setFamilyName("Keating");
294   mc->setGivenName("Sarah");
295   mc->setEmail("sbml-team@caltech.edu");
296 
297   mh->addCreator(mc);
298   delete mc;
299 
300   Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
301 
302   mh->setCreatedDate(date);
303   delete date;
304 
305   fail_unless(mh->getCreatedDate()->getMonth() == 12);
306   fail_unless(mh->getCreatedDate()->getSecond() == 45);
307 
308   fail_unless(static_cast <ModelCreator*>(mh->getListCreators()->get(0))->getFamilyName() == "Keating");
309 
310   ModelHistory* mh2 = static_cast<ModelHistory*>(mh->clone());
311 
312   fail_unless(mh2->getCreatedDate()->getMonth() == 12);
313   fail_unless(mh2->getCreatedDate()->getSecond() == 45);
314 
315   fail_unless(static_cast <ModelCreator*>(mh2->getListCreators()->get(0))->getFamilyName() == "Keating");
316 
317   delete mh2;
318   delete mh;
319 
320 }
321 END_TEST
322 
323 
START_TEST(test_ModelHistory_ConstructorException)324 START_TEST ( test_ModelHistory_ConstructorException )
325 {
326   string msg;
327   try
328   {
329     ModelHistory * mh = new ModelHistory();
330     delete mh;
331   }
332   catch (SBMLConstructorException &e)
333   {
334     msg = e.what();
335   }
336   fail_unless(msg == "");
337 
338 }
339 END_TEST
340 
341 
START_TEST(test_CVTerm_copyConstructor)342 START_TEST ( test_CVTerm_copyConstructor )
343 {
344 
345   CVTerm * CVTerm1 = new CVTerm(BIOLOGICAL_QUALIFIER);
346   CVTerm1->addResource("http://www.geneontology.org/#GO:0005892");
347 
348   fail_unless(CVTerm1->getQualifierType() == BIOLOGICAL_QUALIFIER);
349   fail_unless(CVTerm1->getResources()->getLength() == 1);
350   fail_unless(CVTerm1->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
351 
352   CVTerm* CVTerm2=new CVTerm(*CVTerm1);
353 
354   fail_unless(CVTerm2->getQualifierType() == BIOLOGICAL_QUALIFIER);
355   fail_unless(CVTerm2->getResources()->getLength() == 1);
356   fail_unless(CVTerm2->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
357 
358   delete CVTerm2;
359   delete CVTerm1;
360 }
361 END_TEST
362 
363 
START_TEST(test_CVTerm_assignmentOperator)364 START_TEST ( test_CVTerm_assignmentOperator )
365 {
366   CVTerm * CVTerm1 = new CVTerm(BIOLOGICAL_QUALIFIER);
367   CVTerm1->addResource("http://www.geneontology.org/#GO:0005892");
368 
369   fail_unless(CVTerm1->getQualifierType() == BIOLOGICAL_QUALIFIER);
370   fail_unless(CVTerm1->getResources()->getLength() == 1);
371   fail_unless(CVTerm1->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
372 
373 
374   CVTerm* CVTerm2=new CVTerm();
375   (*CVTerm2) = *CVTerm1;
376 
377   fail_unless(CVTerm2->getQualifierType() == BIOLOGICAL_QUALIFIER);
378   fail_unless(CVTerm2->getResources()->getLength() == 1);
379   fail_unless(CVTerm2->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
380 
381   delete CVTerm2;
382   delete CVTerm1;
383 }
384 END_TEST
385 
386 
START_TEST(test_CVTerm_clone)387 START_TEST ( test_CVTerm_clone )
388 {
389   CVTerm * CVTerm1 = new CVTerm(BIOLOGICAL_QUALIFIER);
390   CVTerm1->addResource("http://www.geneontology.org/#GO:0005892");
391 
392   fail_unless(CVTerm1->getQualifierType() == BIOLOGICAL_QUALIFIER);
393   fail_unless(CVTerm1->getResources()->getLength() == 1);
394   fail_unless(CVTerm1->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
395 
396 
397   CVTerm* CVTerm2 = static_cast<CVTerm*>(CVTerm1->clone());
398 
399   fail_unless(CVTerm2->getQualifierType() == BIOLOGICAL_QUALIFIER);
400   fail_unless(CVTerm2->getResources()->getLength() == 1);
401   fail_unless(CVTerm2->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
402 
403   delete CVTerm2;
404   delete CVTerm1;
405 }
406 END_TEST
407 
408 
START_TEST(test_CVTerm_ConstructorException)409 START_TEST ( test_CVTerm_ConstructorException )
410 {
411   string msg;
412   try
413   {
414     CVTerm * cvterm = new CVTerm(BIOLOGICAL_QUALIFIER);
415     delete cvterm;
416   }
417   catch (SBMLConstructorException &e)
418   {
419     msg = e.what();
420   }
421   fail_unless(msg == "");
422 
423 }
424 END_TEST
425 
426 
START_TEST(test_NestedCVTerm_copyConstructor)427 START_TEST ( test_NestedCVTerm_copyConstructor )
428 {
429 
430   CVTerm * CVTerm1 = new CVTerm(BIOLOGICAL_QUALIFIER);
431   CVTerm_setBiologicalQualifierType(CVTerm1, BQB_IS);
432   CVTerm1->addResource("http://www.geneontology.org/#GO:0005892");
433 
434   fail_unless(CVTerm1->getQualifierType() == BIOLOGICAL_QUALIFIER);
435   fail_unless(CVTerm1->getResources()->getLength() == 1);
436   fail_unless(CVTerm1->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
437 
438   CVTerm * CVTermN = new CVTerm(BIOLOGICAL_QUALIFIER);
439   CVTerm_setBiologicalQualifierType(CVTermN, BQB_IS);
440   CVTermN->addResource("nested resource");
441 
442   fail_unless(CVTermN->getQualifierType() == BIOLOGICAL_QUALIFIER);
443   fail_unless(CVTermN->getResources()->getLength() == 1);
444   fail_unless(CVTermN->getResources()->getValue(0) == "nested resource");
445 
446   CVTerm1->addNestedCVTerm(CVTermN);
447 
448   fail_unless(CVTerm1->getNumNestedCVTerms() == 1);
449   fail_unless(CVTerm1->getNestedCVTerm(0)->getQualifierType() == BIOLOGICAL_QUALIFIER);
450   fail_unless(CVTerm1->getNestedCVTerm(0)->getResources()->getLength() == 1);
451   fail_unless(CVTerm1->getNestedCVTerm(0)->getResources()->getValue(0) == "nested resource");
452 
453   CVTerm* CVTerm2=new CVTerm(*CVTerm1);
454 
455   fail_unless(CVTerm2->getQualifierType() == BIOLOGICAL_QUALIFIER);
456   fail_unless(CVTerm2->getResources()->getLength() == 1);
457   fail_unless(CVTerm2->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
458   fail_unless(CVTerm2->getNumNestedCVTerms() == 1);
459   fail_unless(CVTerm2->getNestedCVTerm(0)->getQualifierType() == BIOLOGICAL_QUALIFIER);
460   fail_unless(CVTerm2->getNestedCVTerm(0)->getResources()->getLength() == 1);
461   fail_unless(CVTerm2->getNestedCVTerm(0)->getResources()->getValue(0) == "nested resource");
462 
463   delete CVTerm2;
464   delete CVTerm1;
465   delete CVTermN;
466 }
467 END_TEST
468 
469 
START_TEST(test_NestedCVTerm_assignmentOperator)470 START_TEST ( test_NestedCVTerm_assignmentOperator )
471 {
472   CVTerm * CVTerm1 = new CVTerm(BIOLOGICAL_QUALIFIER);
473   CVTerm_setBiologicalQualifierType(CVTerm1, BQB_IS);
474   CVTerm1->addResource("http://www.geneontology.org/#GO:0005892");
475 
476   CVTerm * CVTermN = new CVTerm(BIOLOGICAL_QUALIFIER);
477   CVTerm_setBiologicalQualifierType(CVTermN, BQB_IS);
478   CVTermN->addResource("nested resource");
479 
480   fail_unless(CVTermN->getQualifierType() == BIOLOGICAL_QUALIFIER);
481   fail_unless(CVTermN->getResources()->getLength() == 1);
482   fail_unless(CVTermN->getResources()->getValue(0) == "nested resource");
483 
484   CVTerm1->addNestedCVTerm(CVTermN);
485 
486   fail_unless(CVTerm1->getNumNestedCVTerms() == 1);
487   fail_unless(CVTerm1->getNestedCVTerm(0)->getQualifierType() == BIOLOGICAL_QUALIFIER);
488   fail_unless(CVTerm1->getNestedCVTerm(0)->getResources()->getLength() == 1);
489   fail_unless(CVTerm1->getNestedCVTerm(0)->getResources()->getValue(0) == "nested resource");
490 
491   CVTerm* CVTerm2=new CVTerm();
492   (*CVTerm2) = *CVTerm1;
493 
494   fail_unless(CVTerm2->getQualifierType() == BIOLOGICAL_QUALIFIER);
495   fail_unless(CVTerm2->getResources()->getLength() == 1);
496   fail_unless(CVTerm2->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
497   fail_unless(CVTerm2->getNumNestedCVTerms() == 1);
498   fail_unless(CVTerm2->getNestedCVTerm(0)->getQualifierType() == BIOLOGICAL_QUALIFIER);
499   fail_unless(CVTerm2->getNestedCVTerm(0)->getResources()->getLength() == 1);
500   fail_unless(CVTerm2->getNestedCVTerm(0)->getResources()->getValue(0) == "nested resource");
501 
502   delete CVTerm2;
503   delete CVTerm1;
504   delete CVTermN;
505 }
506 END_TEST
507 
508 
START_TEST(test_NestedCVTerm_clone)509 START_TEST ( test_NestedCVTerm_clone )
510 {
511   CVTerm * CVTerm1 = new CVTerm(BIOLOGICAL_QUALIFIER);
512   CVTerm_setBiologicalQualifierType(CVTerm1, BQB_IS);
513   CVTerm1->addResource("http://www.geneontology.org/#GO:0005892");
514 
515   fail_unless(CVTerm1->getQualifierType() == BIOLOGICAL_QUALIFIER);
516   fail_unless(CVTerm1->getResources()->getLength() == 1);
517   fail_unless(CVTerm1->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
518 
519   CVTerm * CVTermN = new CVTerm(BIOLOGICAL_QUALIFIER);
520   CVTerm_setBiologicalQualifierType(CVTermN, BQB_IS);
521   CVTermN->addResource("nested resource");
522 
523   fail_unless(CVTermN->getQualifierType() == BIOLOGICAL_QUALIFIER);
524   fail_unless(CVTermN->getResources()->getLength() == 1);
525   fail_unless(CVTermN->getResources()->getValue(0) == "nested resource");
526 
527   CVTerm1->addNestedCVTerm(CVTermN);
528 
529   fail_unless(CVTerm1->getNumNestedCVTerms() == 1);
530   fail_unless(CVTerm1->getNestedCVTerm(0)->getQualifierType() == BIOLOGICAL_QUALIFIER);
531   fail_unless(CVTerm1->getNestedCVTerm(0)->getResources()->getLength() == 1);
532   fail_unless(CVTerm1->getNestedCVTerm(0)->getResources()->getValue(0) == "nested resource");
533 
534   CVTerm* CVTerm2 = static_cast<CVTerm*>(CVTerm1->clone());
535 
536   fail_unless(CVTerm2->getQualifierType() == BIOLOGICAL_QUALIFIER);
537   fail_unless(CVTerm2->getResources()->getLength() == 1);
538   fail_unless(CVTerm2->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
539   fail_unless(CVTerm2->getNumNestedCVTerms() == 1);
540   fail_unless(CVTerm2->getNestedCVTerm(0)->getQualifierType() == BIOLOGICAL_QUALIFIER);
541   fail_unless(CVTerm2->getNestedCVTerm(0)->getResources()->getLength() == 1);
542   fail_unless(CVTerm2->getNestedCVTerm(0)->getResources()->getValue(0) == "nested resource");
543 
544   delete CVTerm2;
545   delete CVTerm1;
546   delete CVTermN;
547 }
548 END_TEST
549 
550 
551 Suite *
create_suite_CopyAndClone(void)552 create_suite_CopyAndClone (void)
553 {
554   Suite *suite = suite_create("CopyAndClone");
555   TCase *tcase = tcase_create("CopyAndClone");
556 
557   tcase_add_test( tcase, test_Date_copyConstructor );
558   tcase_add_test( tcase, test_Date_assignmentOperator );
559   tcase_add_test( tcase, test_Date_clone );
560   tcase_add_test( tcase, test_Date_ConstructorException );
561   tcase_add_test( tcase, test_ModelCreator_copyConstructor );
562   tcase_add_test( tcase, test_ModelCreator_assignmentOperator );
563   tcase_add_test( tcase, test_ModelCreator_clone );
564   tcase_add_test( tcase, test_ModelCreator_ConstructorException );
565   tcase_add_test( tcase, test_ModelHistory_copyConstructor );
566   tcase_add_test( tcase, test_ModelHistory_assignmentOperator );
567   tcase_add_test( tcase, test_ModelHistory_clone );
568   tcase_add_test( tcase, test_ModelHistory_ConstructorException );
569   tcase_add_test( tcase, test_CVTerm_copyConstructor );
570   tcase_add_test( tcase, test_CVTerm_assignmentOperator );
571   tcase_add_test( tcase, test_CVTerm_clone );
572   tcase_add_test( tcase, test_CVTerm_ConstructorException );
573   tcase_add_test( tcase, test_NestedCVTerm_copyConstructor );
574   tcase_add_test( tcase, test_NestedCVTerm_assignmentOperator );
575   tcase_add_test( tcase, test_NestedCVTerm_clone );
576   suite_add_tcase(suite, tcase);
577 
578   return suite;
579 }
580 CK_CPPEND
581 
582