Files
Viper_RegressionTesting/FormatStringTest/App/main.vp
T
TermiNexus 3645d00753 fix(FormatStringTest): ptr_var 注解改为 str | t.CPtr,匹配 c.Addr(s) 的实际类型 i8**
c.Addr(s) 取的是局部变量 s(str = i8*)的地址,结果是 i8**;与 INTPTR(= t.CInt | t.CPtr,int*,见 includes/stdint.vp)
层数与基座都不同,指针隐式转换收紧后(层数必须相同)原写法报 CastError。
2026-10-01 18:01:46 +08:00

56 lines
1.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from stdint import *
import t, c
import ctraits
import stdio
import testcheck
# ============================================================
# FormatStringTest - 格式化字符串回归测试
# ============================================================
@t.CExport
def main() -> int:
testcheck.begin("FormatStringTest: Format String Regression")
b: str = "hello world"
for i in b:
stdio.printf("%c\n", i)
b += 1
print(b-11)
l: t.CArray[u64] = [0, 43, 2, 3, 4]
l[0] = 1000
for i in l:
stdio.printf("%llu\n", i)
print("Value: ", f"0x{ULONGLONG(0x11)}")
print("ULL Hex: ", f"0x{ULONGLONG(0x11):016X}")
print("LL Hex: ", f"{LONGLONG(0x11):016X}")
print("ULL Dec: ", f"{ULONGLONG(42):d}")
print("LL Dec: ", f"{LONGLONG(42):d}")
print("Hex: ", f"{0x11:016X}")
print("Dec: ", f"{42:d}")
print("Float: ", f"{3.14159:.2f}")
# f-string 赋值测试(验证不再直接 printf,而是生成字符串)
s: str = f"Value=0x{ULONGLONG(42)}, Hex=0x{ULONGLONG(0x11):016X}"
print("Assigned: ", s)
# ctraits.isptr 编译时类型判断测试
# c.Addr(s) 取的是局部变量 s(str = i8*)的地址,结果是 i8**(char**);
# 与 INTPTR(= t.CInt | t.CPtr,int*,见 includes/stdint.vp)层数与基座都不同,
# 且指针隐式转换已收紧(层数必须相同)⇒ 注解按实际类型写 str | t.CPtr(= i8**)。
ptr_var: str | t.CPtr = c.Addr(s)
val_var: int = 42
if c.CIf(ctraits.isptr(ptr_var)):
print("ptr_var is pointer")
if c.CIf(not ctraits.isptr(val_var)):
print("val_var is not pointer")
testcheck.section("placeholder")
testcheck.ok("testcheck framework ready")
testcheck.info("placeholder test")
return testcheck.end()