📄 zeropad.c
字号:
/** Zeropad tests. storage: idata, pdata, xdata, code,*/#ifndef STORAGE#define STORAGE {storage}#endif#if defined (__GNUC__) && defined (__alpha__) && (__GNUC__ < 3) /* since g fails on GCC 2.95.4 on alpha... */ #define FLEXARRAY 0 #define TEST_G 0#else #define FLEXARRAY 1 #define TEST_G 1#endif#include <testfwk.h>typedef unsigned int size_t;#define offsetof(s,m) (size_t)&(((s *)0)->m)const char *string1 = "\x00\x01";const char string2[] = "\x00\x01";#ifndef PORT_HOST#pragma disable_warning 147 //no warning about excess initializers (W_EXCESS_INITIALIZERS)//array will be truncated but warning will be suppressed//if truncation is incorrect, other ASSERTs will fail with high probabilitychar STORAGE trunc[2] = {'a', 'b', 'c'};#endifchar STORAGE array[5] = {'a', 'b', 'c'};#if TEST_G struct w { char a; int b; } STORAGE g[3] = { {'x', 1}, {'y'}, {'z', 3} };#endifstruct x { short a; char b[10];};struct x STORAGE teststruct[5] = { { 10, { 1, 2, 3, 4, 5} }, { 20, { 11 } }, { 30, { 6, 7, 8} }};#if FLEXARRAY struct y { short a; char b[]; };struct y STORAGE incompletestruct = { 10, {1, 2, 3, 4, 5}};#endifvoidtestZeropad(void){ ASSERT(string1[1] == '\x01'); ASSERT(string2[1] == '\x01'); ASSERT(array[2] == 'c'); ASSERT(array[4] == 0);#if TEST_G ASSERT(g[1].a == 'y'); ASSERT(g[1].b == 0); ASSERT(g[2].a == 'z'); ASSERT(g[2].b == 3);#endif ASSERT(teststruct[0].b[1] == 2); ASSERT(teststruct[0].b[5] == 0); ASSERT(teststruct[1].b[0] == 11); ASSERT(teststruct[4].b[9] == 0); ASSERT(sizeof(teststruct[2].a) == 2); ASSERT(sizeof(teststruct[1].b) == 10); ASSERT(sizeof(teststruct[1]) == 12); ASSERT(sizeof(teststruct) == 60);#if FLEXARRAY ASSERT(incompletestruct.a == 10); ASSERT(incompletestruct.b[0] == 1); ASSERT(incompletestruct.b[4] == 5); ASSERT(sizeof(incompletestruct) == sizeof(struct y)); ASSERT(sizeof(incompletestruct) == offsetof(struct y, b)); ASSERT(sizeof(incompletestruct) == offsetof(struct x, b));#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -