|
; 式と期待値が一致するか比較するマクロ |
|
; 一致しない場合、式、期待値、実際の値を表示する |
|
; |
|
; 引数 |
|
; %1 式 |
|
; %2 期待値 |
|
; |
|
#define global ASSERT_EQUAL(%1,%2) \ |
|
if (%1) != (%2) { \ |
|
mes "%1 ;==> expect: %2, actual: " + (%1) : \ |
|
__assert_last_error = 1 \ |
|
} |
|
|
|
#define global ASSERT_FAILED (__assert_last_error) |
|
|
|
|
|
; シフト演算子とビット論理演算子の優先順位は同じで左結合か? |
|
; ==> 正しくない。シフト演算子は論理演算子よりも優先順位が高い。 |
|
|
|
ASSERT_EQUAL 1 << 1 & 1, 0 |
|
ASSERT_EQUAL (1 << 1) & 1, 0 |
|
|
|
ASSERT_EQUAL 1 & 1 << 1 , 0 |
|
ASSERT_EQUAL 1 & (1 << 1), 0 |
|
|
|
ASSERT_EQUAL 1 << 1 | 1, 3 |
|
ASSERT_EQUAL (1 << 1) | 1, 3 |
|
|
|
ASSERT_EQUAL 1 | 1 << 1 , 3 |
|
ASSERT_EQUAL 1 | (1 << 1), 3 |
|
|
|
ASSERT_EQUAL 1 << 1 ^ 1, 3 |
|
ASSERT_EQUAL (1 << 1) ^ 1, 3 |
|
|
|
ASSERT_EQUAL 1 ^ 1 << 1 , 3 |
|
ASSERT_EQUAL 1 ^ (1 << 1), 3 |
|
|
|
|
|
; シフト演算子は比較演算子よりも優先順位が低いか? |
|
; ==> 正しくない。シフト演算子は比較演算子よりも優先順位が高い。 |
|
|
|
ASSERT_EQUAL 1 << 1 == 1, 0 |
|
ASSERT_EQUAL (1 << 1) == 1, 0 |
|
|
|
ASSERT_EQUAL 1 == 1 << 1 , 0 |
|
ASSERT_EQUAL 1 == (1 << 1), 0 |
|
|
|
; シフト演算子は加算・減算演算子よりも優先順位が高いか? |
|
; ==> 正しくない。シフト演算子は加算・減算演算子よりも優先順位が低い。 |
|
|
|
ASSERT_EQUAL 1 << 1 + 1 , 4 |
|
ASSERT_EQUAL 1 << (1 + 1), 4 |
|
|
|
ASSERT_EQUAL 1 + 1 << 1, 4 |
|
ASSERT_EQUAL (1 + 1) << 1, 4 |
|
|
|
ASSERT_EQUAL 2 << 1 - 1 , 2 |
|
ASSERT_EQUAL 2 << (1 - 1), 2 |
|
|
|
ASSERT_EQUAL 1 - 1 << 1, 0 |
|
ASSERT_EQUAL (1 - 1) << 1, 0 |
|
|
|
|
|
if ASSERT_FAILED { |
|
mes "Assertion Failed." |
|
} else { |
|
mes "No error." |
|
} |