From 8c82629b0abfa14f02340caf85f0c6057206e6a1 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sat, 29 Aug 2026 06:22:36 +0800 Subject: [PATCH] =?UTF-8?q?test(vpt):=20=E7=B1=BB=E5=9E=8B=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E6=94=B6=E6=95=9B=E6=B5=8B=E8=AF=95=E2=80=94=E2=80=94?= =?UTF-8?q?=E5=88=AB=E5=90=8D=E5=8F=8D=E6=9F=A5/typedef=20=E9=93=BE/=5F=5F?= =?UTF-8?q?sizeof=5F=5F=20=E8=81=94=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - T6: from-import 别名反查(MyInt/MyByte)+ typedef 值引用别名(MyWord=MyInt) - T7: 库 typedef 裸名解析(BYTE/DWORD/MyDword 链)+ t/c 核心特判保留(CBool) - T8: __sizeof__ 库 typedef 尺寸联动(BYTE=1/DWORD=4/MyWord=4/CBool=1) - T9: typedef 联合(BYTE|t.CPtr)指针包装 + * 解引用 --- ViperTestProject/App/main.vp | 139 +++++++++++++++++++++++++++++++++-- 1 file changed, 131 insertions(+), 8 deletions(-) diff --git a/ViperTestProject/App/main.vp b/ViperTestProject/App/main.vp index 3307a6c..c60e81b 100644 --- a/ViperTestProject/App/main.vp +++ b/ViperTestProject/App/main.vp @@ -1,18 +1,141 @@ import w32.win32console as w32cmd import stdio import t, c +from stdint import * +from t import CInt as MyInt +from stdint import BYTE as MyByte pagecode: t.CDefine = 65001 -@t.CExport -def main() -> int: +# 类型系统收敛测试:typedef 值引用 from-import 别名(阶段1a 别名链) +MyWord: t.CTypedef = MyInt +MyDword: t.CTypedef = DWORD + + +class TestStruct(): + a: t.CInt + b: t.CInt + + +class Obj(): + val: t.CInt + + +export def main() -> int: w32cmd.SetConsoleOutputCP(pagecode) w32cmd.SetConsoleCP(pagecode) - print("你好,世界") - a: str = "测试" - b: int = 1234567 - c: float = 1.234566 - print(f"文本:{a},数字:{b},浮点数:{c}") - stdio.printf(f"文本:{a},数字:{b},浮点数:{c}") + print("=== Unary * / & (Deref/AddrOf) Test ===") + + # --- Test 1: 标量 & 取地址 + * 解引用 --- + x: int = 42 + px: int* = &x + d: int = *px + print(f"T1: x={x} *(&x)={d} (expect 42, 42)") + if d == 42: + print("T1 OK") + else: + print("T1 FAIL") + + # --- Test 2: 通过指针写回(c.DerefAs 兼容形式) --- + #*px = 100 + + #k: int** + #l = *k + c.DerefAs(px, 100) + print(f"T2: after c.DerefAs(px, 100) x={x} (expect 100)") + if x == 100: + print("T2 OK") + else: + print("T2 FAIL") + + # --- Test 3: 数组元素地址 &arr[i] + * 解引用 --- + a: t.CArray[t.CInt, 4] + a[0] = 7 + pa: t.CInt | t.CPtr = &a[0] + v3: int = *pa + print(f"T3: a[0]={a[0]} *&a[0]={v3} (expect 7, 7)") + if v3 == 7: + print("T3 OK") + else: + print("T3 FAIL") + + # --- Test 4: 结构体字段地址 &s.f + * 解引用 --- + s: TestStruct + s.a = 10 + pf: t.CInt | t.CPtr = &s.a + v4: int = *pf + print(f"T4: s.a={s.a} *&s.a={v4} (expect 10, 10)") + if v4 == 10: + print("T4 OK") + else: + print("T4 FAIL") + + # --- Test 5: &obj 对象指针(对象变量即指针) --- + o: Obj + o.val = 99 + po: Obj | t.CPtr = &o + print(f"T5: o.val={o.val} &o->val={po.val} (expect 99, 99)") + if po.val == 99: + print("T5 OK") + else: + print("T5 FAIL") + + print("=== Unary * / & Test Done ===") + + # ============================================================ + # 类型系统收敛测试(阶段1a/1b/2/3) + # 验证:正常库分析优先(from-import 别名、库 typedef 动态表), + # t/c 库内部特判兜底(CInt/CBool/CPtr 等核心原语保留硬编码)。 + # ============================================================ + print("=== Type System Convergence Test ===") + + # --- T6: from-import 别名反查(阶段1a)--- + # from t import CInt as MyInt → 裸名 MyInt 注解经别名反查 → i32 + a6: MyInt = 123 + # MyWord: t.CTypedef = MyInt → typedef 值引用别名 → 链式解析 + b6: MyWord = 456 + # from stdint import BYTE as MyByte → 裸名别名 → t.CUnsignedChar + m6: MyByte = 65 + print(f"T6: MyInt={a6} MyWord={b6} MyByte={m6} (expect 123, 456, 65)") + if a6 == 123 and b6 == 456 and m6 == 65: + print("T6 OK") + else: + print("T6 FAIL") + + # --- T7: 库 typedef 裸名解析(阶段1b/2)--- + # 裸名 BYTE/DWORD 走 CTypedef 动态表(stdint.vp 声明权威) + bb7: BYTE = 200 + dd7: DWORD = 0x12345678 + # typedef 引用 typedef(MyDword = DWORD → CUInt32T) + jj7: MyDword = 0xABCD + # t/c 核心原语内部特判保留(t.CBool → i1 硬编码兜底) + kk7: t.CBool = True + print(f"T7: BYTE={bb7} DWORD={dd7} MyDword={jj7} CBool={kk7} (expect 200, 305419896, 43981, 1)") + if bb7 == 200 and dd7 == 0x12345678 and jj7 == 0xABCD and kk7 == 1: + print("T7 OK") + else: + print("T7 FAIL") + + # --- T8: __sizeof__ 库 typedef(阶段3 尺寸联动)--- + s8a: int = BYTE.__sizeof__() + s8b: int = DWORD.__sizeof__() + s8c: int = MyWord.__sizeof__() + s8d: int = t.CBool.__sizeof__() + print(f"T8: sizeof(BYTE)={s8a} sizeof(DWORD)={s8b} sizeof(MyWord)={s8c} sizeof(CBool)={s8d} (expect 1, 4, 4, 1)") + if s8a == 1 and s8b == 4 and s8c == 4 and s8d == 1: + print("T8 OK") + else: + print("T8 FAIL") + + # --- T9: typedef 联合(BYTE | t.CPtr → 指针包装,* 解引用)--- + p9: BYTE | t.CPtr = &bb7 + v9: BYTE = *p9 + print(f"T9: *(BYTE|CPtr)={v9} (expect 200)") + if v9 == 200: + print("T9 OK") + else: + print("T9 FAIL") + + print("=== Type System Convergence Test Done ===") return 0