chore(syntax): DefineTest/FormatStringTest 迁移到 cif/defined() 条件编译
DefineTest 的条件编译用例(基础/elif-else/cifdef-cifndef/平台宏/嵌套/表达式/跨模块/守卫)全部改写为 cif-celif-celse + defined();FormatStringTest 的 isptr 判断由 c.CIf 改为 cif;README 同步新语法口径。
This commit is contained in:
1 parent
30b14bc477
commit
f5544eed80
3 files changed
+103
-101
No files matched your search
+100
-98
@@ -8,7 +8,7 @@ import testcheck
|
||||
|
||||
|
||||
# ============================================================
|
||||
# DefineTest: CDefine constants/macros, c.CIf family, platmacro.
|
||||
# DefineTest: CDefine constants/macros, cif/celif/celse chains, defined(), platmacro.
|
||||
# Prints results for manual inspection.
|
||||
# ============================================================
|
||||
|
||||
@@ -140,127 +140,129 @@ def test_define_combined() -> CInt:
|
||||
|
||||
|
||||
def test_cif_basic() -> CInt:
|
||||
if c.CIf(ENABLED):
|
||||
cif ENABLED:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf(DISABLED):
|
||||
cif DISABLED:
|
||||
print(0)
|
||||
else:
|
||||
celse:
|
||||
print(1)
|
||||
if c.CIf(MAX_SIZE > 512):
|
||||
cif MAX_SIZE > 512:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf(MIN_VAL > 0):
|
||||
cif MIN_VAL > 0:
|
||||
print(0)
|
||||
else:
|
||||
celse:
|
||||
print(1)
|
||||
return 0
|
||||
|
||||
def test_cif_elif_else() -> CInt:
|
||||
val: CInt32T = 2
|
||||
if c.CIf(val == 1):
|
||||
# A cif chain can only be pruned at compile time, so the chain selector must be a CDefine
|
||||
# constant (a runtime variable is rejected).
|
||||
define VAL = 2
|
||||
cif VAL == 1:
|
||||
print(1)
|
||||
elif c.CIf(val == 2):
|
||||
celif VAL == 2:
|
||||
print(2)
|
||||
elif c.CIf(val == 3):
|
||||
celif VAL == 3:
|
||||
print(3)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf(val > 10):
|
||||
cif VAL > 10:
|
||||
print(10)
|
||||
elif c.CIf(val > 5):
|
||||
celif VAL > 5:
|
||||
print(5)
|
||||
else:
|
||||
print(val)
|
||||
celse:
|
||||
print(VAL)
|
||||
return 0
|
||||
|
||||
def test_cifdef_cifndef() -> CInt:
|
||||
if c.CIfdef(MAX_SIZE):
|
||||
cif defined(MAX_SIZE):
|
||||
print(MAX_SIZE)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIfdef(UNDEFINED_MACRO_XYZ):
|
||||
cif defined(UNDEFINED_MACRO_XYZ):
|
||||
print(0)
|
||||
else:
|
||||
celse:
|
||||
print(1)
|
||||
if c.CIfndef(UNDEFINED_MACRO_XYZ):
|
||||
cif not defined(UNDEFINED_MACRO_XYZ):
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIfndef(MAX_SIZE):
|
||||
cif not defined(MAX_SIZE):
|
||||
print(0)
|
||||
else:
|
||||
celse:
|
||||
print(1)
|
||||
return 0
|
||||
|
||||
def test_cif_platform() -> CInt:
|
||||
if c.CIfdef(_WIN32):
|
||||
cif defined(_WIN32):
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIfdef(__x86_64__):
|
||||
cif defined(__x86_64__):
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf(SIZEOF_VOID_P == 8):
|
||||
cif SIZEOF_VOID_P == 8:
|
||||
print(8)
|
||||
elif c.CIf(SIZEOF_VOID_P == 4):
|
||||
celif SIZEOF_VOID_P == 4:
|
||||
print(4)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
return 0
|
||||
|
||||
def test_cif_nested() -> CInt:
|
||||
if c.CIf(ENABLED):
|
||||
if c.CIf(MAX_SIZE > 512):
|
||||
cif ENABLED:
|
||||
cif MAX_SIZE > 512:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIfdef(PAGE_SIZE):
|
||||
cif defined(PAGE_SIZE):
|
||||
print(PAGE_SIZE)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
return 0
|
||||
|
||||
def test_cif_expr() -> CInt:
|
||||
if c.CIf(MASK_BYTE & 0x0F):
|
||||
cif MASK_BYTE & 0x0F:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf((MAX_SIZE >> SHIFT_BITS) > 0):
|
||||
cif (MAX_SIZE >> SHIFT_BITS) > 0:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf(ENABLED and MAX_SIZE > 0):
|
||||
cif ENABLED and MAX_SIZE > 0:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf(DISABLED or MAX_SIZE > 0):
|
||||
cif DISABLED or MAX_SIZE > 0:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
return 0
|
||||
|
||||
def test_platmacro_platform() -> CInt:
|
||||
if c.CIfdef(platmacro.IS_WINDOWS):
|
||||
cif defined(platmacro.IS_WINDOWS):
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf(platmacro.IS_WINDOWS == 1):
|
||||
cif platmacro.IS_WINDOWS == 1:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf(platmacro.IS_LINUX == 0):
|
||||
cif platmacro.IS_LINUX == 0:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf(platmacro.IS_X86_64 == 1):
|
||||
cif platmacro.IS_X86_64 == 1:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
return 0
|
||||
|
||||
@@ -274,32 +276,32 @@ def test_platmacro_sizes() -> CInt:
|
||||
return 0
|
||||
|
||||
def test_platmacro_endian() -> CInt:
|
||||
if c.CIf(platmacro.IS_LITTLE_ENDIAN == 1):
|
||||
cif platmacro.IS_LITTLE_ENDIAN == 1:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf(platmacro.IS_BIG_ENDIAN == 0):
|
||||
cif platmacro.IS_BIG_ENDIAN == 0:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf(platmacro.BYTE_ORDER_LE == 1):
|
||||
cif platmacro.BYTE_ORDER_LE == 1:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
return 0
|
||||
|
||||
def test_platmacro_features() -> CInt:
|
||||
if c.CIf(platmacro.HAS_SSE2 == 1):
|
||||
cif platmacro.HAS_SSE2 == 1:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf(platmacro.HAS_AVX == 1):
|
||||
cif platmacro.HAS_AVX == 1:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIf(platmacro.HAS_NEON == 0):
|
||||
cif platmacro.HAS_NEON == 0:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
return 0
|
||||
|
||||
@@ -307,72 +309,72 @@ def test_platmacro_align() -> CInt:
|
||||
print(platmacro.ALIGNOF_INT)
|
||||
print(platmacro.ALIGNOF_PTR)
|
||||
print(platmacro.ALIGNOF_DOUBLE)
|
||||
if c.CIf(platmacro.ALIGNOF_PTR == 8):
|
||||
cif platmacro.ALIGNOF_PTR == 8:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
return 0
|
||||
|
||||
def test_cifdef_cross_module() -> CInt:
|
||||
if c.CIfdef(platmacro.IS_WINDOWS):
|
||||
if c.CIf(platmacro.PTR_SIZE == 8):
|
||||
cif defined(platmacro.IS_WINDOWS):
|
||||
cif platmacro.PTR_SIZE == 8:
|
||||
print(64)
|
||||
else:
|
||||
celse:
|
||||
print(32)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIfndef(platmacro.IS_ARM64):
|
||||
cif not defined(platmacro.IS_ARM64):
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIfdef(platmacro.HAS_AVX2):
|
||||
cif defined(platmacro.HAS_AVX2):
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
return 0
|
||||
|
||||
def test_cifdef_guard() -> CInt:
|
||||
define MY_HEADER_GUARD = 1
|
||||
if c.CIfndef(MY_HEADER_GUARD):
|
||||
cif not defined(MY_HEADER_GUARD):
|
||||
print(0)
|
||||
else:
|
||||
celse:
|
||||
print(1)
|
||||
if c.CIfdef(MY_HEADER_GUARD):
|
||||
cif defined(MY_HEADER_GUARD):
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
return 0
|
||||
|
||||
def test_cifdef_undefined() -> CInt:
|
||||
if c.CIfndef(NONEXISTENT_MACRO_ABC):
|
||||
cif not defined(NONEXISTENT_MACRO_ABC):
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIfndef(THIS_IS_ALSO_NOT_DEFINED):
|
||||
cif not defined(THIS_IS_ALSO_NOT_DEFINED):
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIfdef(NONEXISTENT_MACRO_ABC):
|
||||
cif defined(NONEXISTENT_MACRO_ABC):
|
||||
print(0)
|
||||
else:
|
||||
celse:
|
||||
print(1)
|
||||
return 0
|
||||
|
||||
def test_cifdef_complex() -> CInt:
|
||||
if c.CIfdef(platmacro.IS_WINDOWS) and c.CIf(platmacro.PTR_SIZE == 8):
|
||||
cif defined(platmacro.IS_WINDOWS) and platmacro.PTR_SIZE == 8:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIfndef(platmacro.IS_ARM64) and c.CIf(platmacro.IS_X86_64 == 1):
|
||||
cif not defined(platmacro.IS_ARM64) and platmacro.IS_X86_64 == 1:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
if c.CIfdef(platmacro.HAS_SSE2):
|
||||
if c.CIfdef(platmacro.HAS_AVX):
|
||||
cif defined(platmacro.HAS_SSE2):
|
||||
cif defined(platmacro.HAS_AVX):
|
||||
print(2)
|
||||
else:
|
||||
celse:
|
||||
print(1)
|
||||
else:
|
||||
celse:
|
||||
print(0)
|
||||
return 0
|
||||
|
||||
@@ -381,7 +383,7 @@ def main() -> int:
|
||||
w32.win32console.SetConsoleCP(65001)
|
||||
w32.win32console.SetConsoleOutputCP(65001)
|
||||
|
||||
testcheck.begin("DefineTest: CDefine 宏与 c.CIf 测试")
|
||||
testcheck.begin("DefineTest: CDefine 宏与 cif 测试")
|
||||
|
||||
testcheck.section("CDefine 基础")
|
||||
test_basic_define()
|
||||
@@ -394,7 +396,7 @@ def main() -> int:
|
||||
test_define_string()
|
||||
test_define_combined()
|
||||
|
||||
testcheck.section("c.CIf")
|
||||
testcheck.section("cif / celif / celse")
|
||||
test_cif_basic()
|
||||
test_cif_elif_else()
|
||||
test_cifdef_cifndef()
|
||||
@@ -409,7 +411,7 @@ def main() -> int:
|
||||
test_platmacro_features()
|
||||
test_platmacro_align()
|
||||
|
||||
testcheck.section("c.CIfdef 综合")
|
||||
testcheck.section("defined() 综合")
|
||||
test_cifdef_cross_module()
|
||||
test_cifdef_guard()
|
||||
test_cifdef_undefined()
|
||||
|
||||
@@ -37,9 +37,9 @@ export def main() -> int:
|
||||
# &s is i8** (char**); implicit pointer casts require matching depth, so annotate str*.
|
||||
ptr_var: str* = &s
|
||||
val_var: int = 42
|
||||
if c.CIf(ctraits.isptr(ptr_var)):
|
||||
cif ctraits.isptr(ptr_var):
|
||||
print("ptr_var is pointer")
|
||||
if c.CIf(not ctraits.isptr(val_var)):
|
||||
cif not ctraits.isptr(val_var):
|
||||
print("val_var is not pointer")
|
||||
|
||||
testcheck.section("placeholder")
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
| 29 | [OopInheritTest](OopInheritTest/App/main.vp) | OOP 继承多态:@t.CVTable 虚方法覆盖、链式调用、运算符重载、三层继承 | 虚分派、运算符重载、链式调用 |
|
||||
| 30 | [MemhubTest](MemhubTest/App/main.vp) | MemManager 多态:基类指针虚分派 alloc/free、calloc 内部调虚函数 | 虚方法多态、继承体系 |
|
||||
| 31 | [EnumTest](EnumTest/App/main.vp) | 枚举:CEnum 取值 + REnum 携带数据变体,match/case 解构字段 | CEnum、REnum、match 解构 |
|
||||
| 32 | [DefineTest](DefineTest/App/main.vp) | 编译期宏:CDefine 常量/宏函数、c.CIf/CIfdef/CIfndef 条件编译、platmacro 平台宏 | 编译期宏、条件编译、平台探测 |
|
||||
| 32 | [DefineTest](DefineTest/App/main.vp) | 编译期宏:CDefine 常量/宏函数、`cif`/`celif`/`celse` 条件编译(`defined()` 谓词)、platmacro 平台宏 | 编译期宏、条件编译、平台探测 |
|
||||
| 33 | [ClosureTest](ClosureTest/App/main.vp) | 闭包作用域:global/nonlocal 嵌套/lambda 捕获/循环变量/global 数组 | 闭包、nonlocal/global、lambda |
|
||||
| 34 | [ClosureTest2](ClosureTest2/App/main.vp) | 闭包进阶:nonlocal 条件分支/多变量 swap/引用 vs 值捕获/三层嵌套/结构体修改 | 引用捕获语义、多层级 nonlocal |
|
||||
| 35 | [G3](G3/App/main.vp) | GSListNode F-bounded 泛型继承:`class Node(GSListNode[Node])` 链遍历求和 | 递归泛型/自引用特化 |
|
||||
|
||||
Reference in new issue
Block a user