source: library/test_lib.c @ 7

このファイルの 7 以降における最終更新内容7 で kominami が 2015/09/12 9:22:12 に更新しました

TOPPERS/ASP 1.9.1

ファイルサイズ: 4.4 KB
 
1/*
2 *  TOPPERS Software
3 *      Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 *  Copyright (C) 2005-2013 by Embedded and Real-Time Systems Laboratory
6 *              Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 *  Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§
9 *  ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ
10 *  ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥
11 *  (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ­€ÎÃøºî
12 *      ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ
13 *      ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥
14 *  (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
15 *      Íрǀ­€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
16 *      ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­
17 *      €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
18 *  (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
19 *      Íрǀ­€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³
20 *      €È¡¥
21 *    (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃø
22 *        ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
23 *    (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë
24 *        Êó¹ð€¹€ë€³€È¡¥
25 *  (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë»
26 *      ³²€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥
27 *      €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý
28 *      ͳ€ËŽð€Å€¯ÀÁµá€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò
29 *      ÌÈÀÕ€¹€ë€³€È¡¥
30 *
31 *  ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥Ÿåµ­Ãøºîž¢ŒÔ€ª
32 *  €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ
33 *  €ËÂЀ¹€ëŬ¹çÀ­€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§
34 *  ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ
35 *  €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥
36 *
37 *  $Id$
38 */
39
40/*
41 *              ¥Æ¥¹¥È¥×¥í¥°¥é¥àÍѥ饀¥Ö¥é¥ê
42 */
43
44#include <kernel.h>
45#include <sil.h>
46#include <t_syslog.h>
47#include <t_stdlib.h>
48#include <log_output.h>
49#include "syssvc/syslog.h"
50#include "target_syssvc.h"
51#include <test_lib.h>
52
53/*
54 *      ¥Á¥§¥Ã¥¯¥Ý¥€¥ó¥È
55 */
56static uint_t   check_count = 0u;
57
58/*
59 *      Œ«žÊ¿ÇÃÇŽØ¿ô
60 */
61static BIT_FUNC check_bit_func = NULL;
62
63/*
64 *      Œ«žÊ¿ÇÃÇŽØ¿ô€ÎÀßÄê
65 */
66void
67set_bit_func(BIT_FUNC bit_func)
68{
69        check_bit_func = bit_func;
70}
71
72/*
73 *  ¥Æ¥¹¥È¥×¥í¥°¥é¥à€Î³«»Ï
74 */
75void
76test_start(char *progname)
77{
78        syslog_1(LOG_NOTICE, "Test program: %s", progname);
79}
80
81/*
82 *  ¥·¥¹¥Æ¥à¥í¥°€ÎœÐÎÏœèÍý
83 */
84void
85syslog_flush(void)
86{
87        SYSLOG  logbuf;
88        ER_UINT rercd;
89
90        /*
91         *  ¥í¥°¥Ð¥Ã¥Õ¥¡€Ëµ­Ï¿€µ€ì€¿¥í¥°ŸðÊó€ò¡€Äã¥ì¥Ù¥ëœÐÎϵ¡Çœ€òÍÑ€€€ÆœÐ
92         *  ÎÏ€¹€ë¡¥
93         */
94        while ((rercd = syslog_rea_log(&logbuf)) >= 0) {
95                if (rercd > 0) {
96                        syslog_lostmsg((uint_t) rercd, target_fput_log);
97                }
98                if (logbuf.logtype >= LOG_TYPE_COMMENT) {
99                        syslog_print(&logbuf, target_fput_log);
100                        target_fput_log('\n');
101                }
102        }
103}
104
105/*
106 *      ¥Æ¥¹¥È¥×¥í¥°¥é¥à€ÎœªÎ»
107 */
108void
109test_finish(void)
110{
111        SIL_PRE_LOC;
112
113        SIL_LOC_INT();
114        syslog_flush();
115        (void) ext_ker();
116
117        /* €³€³€ØÍè€ë€³€È€Ï€Ê€€€Ï€º */
118        SIL_UNL_INT();
119}
120
121/*
122 *      ¥Á¥§¥Ã¥¯¥Ý¥€¥ó¥È
123 */
124void
125check_point(uint_t count)
126{
127        bool_t  errorflag = false;
128        ER              rercd;
129        SIL_PRE_LOC;
130
131        /*
132         *  ³ä¹þ€ß¥í¥Ã¥¯ŸõÂÖ€Ë
133         */
134        SIL_LOC_INT();
135
136        /*
137         *  ¥·¡Œ¥±¥ó¥¹¥Á¥§¥Ã¥¯
138         */
139        if (++check_count == count) {
140                syslog_1(LOG_NOTICE, "Check point %d passed.", count);
141        }
142        else {
143                syslog_1(LOG_ERROR, "## Unexpected check point %d.", count);
144                errorflag = true;
145        }
146
147        /*
148         *  ¥«¡Œ¥Í¥ë€ÎÆâÉôŸõÂրΞ¡ºº
149         */
150        if (check_bit_func != NULL) {
151                rercd = (*check_bit_func)();
152                if (rercd < 0) {
153                        syslog_2(LOG_ERROR, "## Internal inconsistency detected (%s, %d).",
154                                                                itron_strerror(rercd), SERCD(rercd));
155                        errorflag = true;
156                }
157        }
158
159        /*
160         *  ¥š¥é¡Œ€¬ž¡œÐ€µ€ì€¿Ÿì¹ç€Ï¡€¥Æ¥¹¥È¥×¥í¥°¥é¥à€òœªÎ»€¹€ë¡¥
161         */
162        if (errorflag) {
163                test_finish();
164        }
165
166        /*
167         *  ³ä¹þ€ß¥í¥Ã¥¯ŸõÂÖ€ò²òœü
168         */
169        SIL_UNL_INT();
170}
171
172/*
173 *      Ž°Î»¥Á¥§¥Ã¥¯¥Ý¥€¥ó¥È
174 */
175void
176check_finish(uint_t count)
177{
178        check_point(count);
179        syslog_0(LOG_NOTICE, "All check points passed.");
180        test_finish();
181}
182
183/*
184 *      Ÿò·ï¥Á¥§¥Ã¥¯€Î¥š¥é¡ŒœèÍý
185 */
186void
187_check_assert(const char *expr, const char *file, int_t line)
188{
189        syslog_3(LOG_ERROR, "## Assertion `%s' failed at %s:%u.",
190                                                                expr, file, line);
191        test_finish();
192}
193
194/*
195 *      ¥š¥é¡Œ¥³¡Œ¥É¥Á¥§¥Ã¥¯€Î¥š¥é¡ŒœèÍý
196 */
197void
198_check_ercd(ER ercd, const char *file, int_t line)
199{
200        syslog_3(LOG_ERROR, "## Unexpected error %s detected at %s:%u.",
201                                                                itron_strerror(ercd), file, line);
202        test_finish();
203}
詳しい使い方は TracBrowser を参照してください。