/[ascend]/trunk/base/generic/general/test/test_listio.c
ViewVC logotype

Annotation of /trunk/base/generic/general/test/test_listio.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 60 - (hide annotations) (download) (as text)
Mon Oct 31 03:39:15 2005 UTC (19 years, 6 months ago) by jds
File MIME type: text/x-csrc
File size: 4761 byte(s)
- jam build up and limping on Linux (finally).
- fixes to CUnit test suite to compile on Linux (still not operable, though).
1 jds 59 /*
2     * Unit test functions for ASCEND: general/listio.c
3     *
4     * Copyright (C) 2005 Jerry St.Clair
5     *
6     * This file is part of the Ascend Environment.
7     *
8     * The Ascend Environment is free software; you can redistribute it
9     * and/or modify it under the terms of the GNU General Public License as
10     * published by the Free Software Foundation; either version 2 of the
11     * License, or (at your option) any later version.
12     *
13     * The Ascend Environment is distributed in hope that it will be useful,
14     * but WITHOUT ANY WARRANTY; without even the implied warranty of
15     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16     * General Public License for more details.
17     *
18     * You should have received a copy of the GNU General Public License
19     * along with the program; if not, write to the Free Software Foundation,
20     * Inc., 675 Mass Ave, Cambridge, MA 02139 USA. Check the file named
21     * COPYING.
22     */
23    
24     #include <stdio.h>
25 jds 60 #ifdef __WIN32__
26 jds 59 #include <io.h>
27 jds 60 #endif
28 jds 59 #include "utilities/ascConfig.h"
29     #include "utilities/ascMalloc.h"
30     #include "general/list.h"
31     #include "general/listio.h"
32     #include "CUnit/CUnit.h"
33     #include "assertimpl.h"
34     #include "test_listio.h"
35     #include "redirectStdStreams.h"
36    
37     /*
38     * listio.[ch] implements writing of a list's details to file.
39     * Because there is no specification on the file contents, this
40     * test routine does not do more than check boundary conditions
41     * and make sure something is written to a specified file stream.
42     */
43     static void test_listio(void)
44     {
45     struct gl_list_t *p_list1;
46     unsigned long *pint_array[20];
47     unsigned long i;
48     FILE *file_normal;
49     FILE *file_stderr;
50     int i_initialized_lists = FALSE;
51     unsigned long prior_meminuse;
52    
53     prior_meminuse = ascmeminuse(); /* save meminuse() at start of test function */
54    
55     #ifdef NDEBUG
56     CU_FAIL("test_listio() compiled with NDEBUG - some features not tested.");
57     #endif
58    
59     /* set up pooling & recycling */
60     if (FALSE == gl_pool_initialized()) {
61     gl_init();
62     gl_init_pool();
63     i_initialized_lists = TRUE;
64     }
65    
66     for (i=0 ; i<20 ; ++i) { /* create some test data */
67     pint_array[i] = (unsigned long*)ascmalloc(sizeof(unsigned long));
68     *pint_array[i] = i;
69     }
70    
71     p_list1 = gl_create(20); /* create and fill a list with data */
72     for (i=0 ; i<20 ; ++i) {
73     gl_append_ptr(p_list1, pint_array[i]);
74     }
75    
76     /* test gl_write_list() */
77    
78     #ifndef ASC_NO_ASSERTIONS
79     asc_assert_catch(TRUE); /* prepare to test assertions */
80    
81     asc_assert_reset();
82     if (0 == setjmp(g_asc_test_env))
83     gl_write_list(NULL, NULL); /* error if NULL list* */
84     CU_TEST(TRUE == asc_assert_failed());
85    
86     asc_assert_catch(FALSE); /* done testing assertions */
87     #endif /* !ASC_NO_ASSERTIONS */
88    
89     if (NULL != (file_normal = fopen("listiotempfile.tmp", "w+"))) {
90    
91     gl_write_list(file_normal, p_list1);/* write to normal open file */
92     rewind(file_normal);
93     CU_TEST(EOF != fgetc(file_normal)); /* test that file is not empty */
94     fclose(file_normal);
95     }
96     else {
97     CU_FAIL("Error opening output file 1 in test_listio.c");
98     }
99    
100     if (NULL != (file_stderr = redirect_stderr("listiotempstderr.tmp"))) {
101    
102     gl_write_list(NULL, p_list1); /* write to stderr */
103     rewind(file_stderr);
104    
105     if (NULL != (file_normal = fopen("listiotempfile.tmp", "r"))) {
106     int ch1 = fgetc(file_stderr);
107     int ch2 = fgetc(file_normal);
108     while ((EOF != ch1) && (EOF != ch2)) { /* test that files are the same */
109     if (ch1 != ch2) {
110     CU_FAIL("Files differ in test_listio.");
111     break;
112     }
113     ch1 = fgetc(file_stderr);
114     ch2 = fgetc(file_normal);
115     }
116     if (ch1 == ch2) {
117     CU_PASS("Files are the same in test_listio.");
118     }
119     fclose(file_normal);
120     }
121     reset_stderr();
122     remove("listiotempstderr.tmp");
123     }
124     else {
125     CU_FAIL("Error opening output file 2 in test_listio.c");
126     }
127     remove("listiotempfile.tmp");
128    
129     gl_destroy(p_list1); /* clean up the list, preserving data */
130    
131     /* clean up and exit */
132     for (i=0 ; i<20 ; ++i)
133     ascfree(pint_array[i]);
134    
135     if (TRUE == i_initialized_lists) {
136     gl_destroy_pool();
137     }
138    
139     CU_TEST(prior_meminuse == ascmeminuse()); /* make sure we cleaned up after ourselves */
140     }
141    
142     /*===========================================================================*/
143     /* Registration information */
144    
145     static CU_TestInfo list_test_listio[] = {
146     {"test_listio", test_listio},
147     CU_TEST_INFO_NULL
148     };
149    
150     static CU_SuiteInfo suites[] = {
151     {"test_general_listio", NULL, NULL, list_test_listio},
152     CU_SUITE_INFO_NULL
153     };
154    
155     /*-------------------------------------------------------------------*/
156     CU_ErrorCode test_register_general_listio(void)
157     {
158     return CU_register_suites(suites);
159     }

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22