logic.c

来自「Small Device C Compiler 面向Inter8051」· C语言 代码 · 共 116 行

C
116
字号
/** Tests the basic logical operations.    type: char, int, long    storage: static,     attr: volatile    values: 5, 350, 31734 */#include <testfwk.h>static {type}alwaysTrue(void){    return ({type}){values};}static {type}alwaysFalse(void){    return 0;}static {type}neverGetHere(void){    FAILM("Shouldn't get here");    return 0;}static int hit;static voidresetGetHere(void){    hit = 0;}static {type}alwaysGetHere(void){    hit++;    return 1;}static voidtestLogicalAnd(void){    {type} true = alwaysTrue();    {type} false = alwaysFalse();    ASSERT(true && true && true);    ASSERT(true && !false);    ASSERT(!false && true);    /* Test that the evaluation is aborted on the first false. */    if (true && false && neverGetHere()) {        /* Tested using neverGetHere() */    }    /* Alternate that is similar. */    if (true && false) {        neverGetHere();        /* Tested using neverGetHere() */    }    resetGetHere();    /* Test that the evaluation is done left to right. */    if (alwaysGetHere() && true && false) {        ASSERT(hit == 1);    }}static voidtestLogicalOr(void){    {type} true = alwaysTrue();    {type} false = alwaysFalse();    ASSERT(false || false || true);    ASSERT(!true || !false);    ASSERT(false || true);    /* Test that the evaluation is aborted on the first hit. */    if (false || true || neverGetHere()) {        /* Tested using neverGetHere() */    }    resetGetHere();    /* Test that the evaluation is done left to right. */    if (alwaysGetHere() || true || false) {        ASSERT(hit == 1);    }}static voidtestNot(void){    {type} true = alwaysTrue();    {type} false = alwaysFalse();    ASSERT(!false);    ASSERT(!!true);    ASSERT(!!!false);}static voidtestFlagToVariable(void){    {type} true = alwaysTrue();    {type} false = alwaysFalse();    {type} val = !true;    ASSERT(!val);    val = !!false;    ASSERT(!false);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?