Initial import of TransPyV

This commit is contained in:
Viper
2026-07-19 13:18:46 +08:00
commit e7eaf3e9a1
75 changed files with 23037 additions and 0 deletions

235
Test/App/struct_test.py Normal file
View File

@@ -0,0 +1,235 @@
import stdio
import t, c
# ============================================================
# 纯内存结构体class测试
# ============================================================
class Point:
x: t.CInt
y: t.CInt
class Box:
width: t.CInt
height: t.CInt
depth: t.CInt
class Size:
w: t.CInt = 100
h: t.CInt = 200
# ============================================================
# 枚举t.CEnum测试
# ============================================================
class State(t.CEnum):
Idle: t.State
Run: t.State
Stop: t.State
class Color(t.CEnum):
Red: t.State = 10
Green: t.State
Blue: t.State = 20
Yellow: t.State
class MixedType(t.CEnum):
Small: t.CInt8T
Big: t.CInt64T
Medium: t.CInt16T
# ============================================================
# 联合体t.CUnion测试
# ============================================================
class DataUnion(t.CUnion):
i: t.CInt
f: t.CFloat
l: t.CInt64T
# ============================================================
# 主函数
# ============================================================
def struct_test() -> int:
# ============================================================
# 测试 1: 结构体字段读写
# ============================================================
p: Point = Point()
p.x = 10
p.y = 20
stdio.printf("struct: p.x=%d p.y=%d\n", p.x, p.y)
# 修改字段
p.x = 100
p.y = 200
stdio.printf("struct: modified p.x=%d p.y=%d\n", p.x, p.y)
# 字段运算
sum_xy: int = p.x + p.y
stdio.printf("struct: sum=%d\n", sum_xy)
# ============================================================
# 测试 2: 多字段结构体
# ============================================================
b: Box
b.width = 3
b.height = 4
b.depth = 5
vol: int = b.width * b.height * b.depth
stdio.printf("struct: volume=%d\n", vol)
# ============================================================
# 测试 3: t.CArray 数组遍历
# ============================================================
arr: t.CArray[t.CInt, 5]
arr[0] = 100
arr[1] = 200
arr[2] = 300
arr[3] = 400
arr[4] = 500
arr_total: int = 0
for i in range(5):
arr_total = arr_total + arr[i]
stdio.printf("array: total=%d\n", arr_total)
# 修改数组元素
arr[2] = 999
stdio.printf("array: arr[2]=%d\n", arr[2])
# ============================================================
# 测试 4: 指针遍历(字符串)
# ============================================================
s: str = "hello"
sp: str = s
slen: int = 0
while c.Deref(sp) != 0:
slen = slen + 1
sp = sp + 1
stdio.printf("ptr: len(hello)=%d\n", slen)
# 累加字符值
p2: str = "ABC"
total_ch: int = 0
while c.Deref(p2) != 0:
total_ch = total_ch + c.Deref(p2)
p2 = p2 + 1
stdio.printf("ptr: sum(A,B,C)=%d\n", total_ch)
# ============================================================
# 测试 5: 结构体构造函数 Point() / Point(x, y)
# ============================================================
# 无参数构造:零初始化
z: Point = Point()
stdio.printf("ctor: z.x=%d z.y=%d\n", z.x, z.y)
# 带参数构造:按位置赋值
p3: Point = Point(7, 8)
stdio.printf("ctor: p3.x=%d p3.y=%d\n", p3.x, p3.y)
# 多字段构造
bx: Box = Box(10, 20, 30)
stdio.printf("ctor: bx.w=%d bx.h=%d bx.d=%d\n", bx.width, bx.height, bx.depth)
# ============================================================
# 测试 6: 结构体关键字参数(乱序传参)
# ============================================================
# 全关键字乱序
p4: Point = Point(y=20, x=10)
stdio.printf("kw: p4.x=%d p4.y=%d\n", p4.x, p4.y)
# 混合:位置 + 关键字
p5: Point = Point(5, y=15)
stdio.printf("kw: p5.x=%d p5.y=%d\n", p5.x, p5.y)
# 多字段关键字乱序
bx2: Box = Box(depth=30, width=10, height=20)
stdio.printf("kw: bx2.w=%d bx2.h=%d bx2.d=%d\n", bx2.width, bx2.height, bx2.depth)
# ============================================================
# 测试 7: 结构体默认赋值
# ============================================================
# 无参数构造:使用默认值
sz: Size = Size()
stdio.printf("def: sz.w=%d sz.h=%d\n", sz.w, sz.h)
# 位置参数覆盖默认值
sz2: Size = Size(5, 6)
stdio.printf("def: sz2.w=%d sz2.h=%d\n", sz2.w, sz2.h)
# 关键字参数覆盖默认值(乱序)
sz3: Size = Size(h=999, w=888)
stdio.printf("def: sz3.w=%d sz3.h=%d\n", sz3.w, sz3.h)
# 混合:位置参数 + 默认值w=7 覆盖默认值h 保持默认值 200
sz4: Size = Size(7)
stdio.printf("def: sz4.w=%d sz4.h=%d\n", sz4.w, sz4.h)
# ============================================================
# 测试 8: 枚举自动赋值Idle=0, Run=1, Stop=2
# ============================================================
s_idle: int = State.Idle
s_run: int = State.Run
s_stop: int = State.Stop
stdio.printf("enum: Idle=%d Run=%d Stop=%d\n", s_idle, s_run, s_stop)
# ============================================================
# 测试 9: 枚举手动赋值Red=10, Green=11, Blue=20, Yellow=21
# ============================================================
c_red: int = Color.Red
c_green: int = Color.Green
c_blue: int = Color.Blue
c_yellow: int = Color.Yellow
stdio.printf("enum: Red=%d Green=%d Blue=%d Yellow=%d\n",
c_red, c_green, c_blue, c_yellow)
# ============================================================
# 测试 10: 枚举混用数字类型(基准类型应为 i64
# ============================================================
m_small: int = MixedType.Small
m_big: int = MixedType.Big
m_medium: int = MixedType.Medium
stdio.printf("enum: Small=%d Big=%d Medium=%d\n", m_small, m_big, m_medium)
# 枚举参与运算
s_sum: int = State.Idle + State.Run + State.Stop
stdio.printf("enum: sum(Idle,Run,Stop)=%d\n", s_sum)
# 枚举比较
if State.Idle == 0:
stdio.printf("enum: Idle==0 true\n")
if Color.Red == 10:
stdio.printf("enum: Red==10 true\n")
if State.Run != State.Stop:
stdio.printf("enum: Run!=Stop true\n")
# ============================================================
# 测试 11: 联合体字段读写
# ============================================================
u: DataUnion
u.i = 42
stdio.printf("union: u.i=%d\n", u.i)
# 写入 l 字段(覆盖 i 的内存,因为 l 是 i64
u.l = 20015998343868
stdio.printf("union: u.l=%lld\n", u.l)
# ============================================================
# 测试 12: 联合体共享内存验证
# ============================================================
u2: DataUnion
u2.i = 1
# 写入 l 后i 的值已被覆盖(不再是 1
u2.l = 100
if u2.i != 1:
stdio.printf("union: shared memory verified\n")
return 0