-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_lib.tbasic
155 lines (120 loc) · 4.8 KB
/
test_lib.tbasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
uses "console", "file"
#default declare checkMissing true ' Useful to catch errors in testing phase
$RUST_INTEROP_DLL = "..\target\release\rust_interop.dll" ' Hehe, this is here just for comfort, in production
' version the path is not needed, just lay the DLL
' by the script
declare function rsSumTwoBytes lib $RUST_INTEROP_DLL alias "rsSumTwoBytes" (byval a as byte, byval b as byte) as byte
declare function rsSumTwoWords lib $RUST_INTEROP_DLL alias "rsSumTwoWords" (byval a as word, byval b as word) as word
declare function rsSumTwoDwords lib $RUST_INTEROP_DLL alias "rsSumTwoDwords" (byval a as dword, byval b as dword) as dword
declare function rsSumTwoIntegers lib $RUST_INTEROP_DLL alias "rsSumTwoIntegers" (byval a as integer, byval b as integer) as integer
declare function rsSumTwoLongs lib $RUST_INTEROP_DLL alias "rsSumTwoLongs" (byval a as long, byval b as long) as long
declare function rsSumTwoQuads lib $RUST_INTEROP_DLL alias "rsSumTwoQuads" (byval a as quad, byval b as quad) as quad
declare function rsSumTwoSingles lib $RUST_INTEROP_DLL alias "rsSumTwoSingles" (byval a as single, byval b as single) as single
declare function rsSumTwoDoubles lib $RUST_INTEROP_DLL alias "rsSumTwoDoubles" (byval a as double, byval b as double) as double
declare sub rsPrintAsciiz lib $RUST_INTEROP_DLL alias "rsPrintAsciiz" (byref sz as asciiz)
declare function rsReturnAsciizPtr lib $RUST_INTEROP_DLL alias "rsReturnAsciizPtr" () as asciiz ptr
declare function rsReturnString lib $RUST_INTEROP_DLL alias "rsReturnString" () as string
type RgbColor
r as byte
g as byte
b as byte
end type
declare sub rsPrintUdtRgbColor lib $RUST_INTEROP_DLL alias "rsPrintUdtRgbColor" (byval col as RgbColor)
type Vector3D
x as single
y as single
z as single
function ToString() as string ' -- This does not affect UDT size in any way, just convenient
return strformat$("[{1}, {2}, {3}]", me.x, me.y, me.z)
end function
end type
declare function rsMultiplyVector3D lib $RUST_INTEROP_DLL alias "rsMultiplyVector3D" (byref v as Vector3D, byval multiplier as single)
declare function rsMultiplyVector3DArray lib $RUST_INTEROP_DLL alias "rsMultiplyVector3DArray" (byval v() as Vector3D, byval count as long, byval multiplier as single)
function tbMain()
printl "Numeric data types" in 14
printl
printl "rsSumTwoBytes" in 10
printl format$(rsSumTwoBytes(128, 64))
printl
printl "rsSumTwoWords" in 10
printl format$(rsSumTwoWords(32000, 32000), "#,")
printl
printl "rsSumTwoDwords" in 10
printl format$(rsSumTwoDwords(2000000000, 2000000000), "#,")
printl
printl "rsSumTwoLongs" in 10
printl format$(rsSumTwoLongs(1000000000, 500000000), "#,")
printl
printl "rsSumTwoQuads" in 10
printl format$(rsSumTwoQuads(4000000000, 4000000000), "#,")
printl
printl "rsSumTwoIntegers" in 10
printl format$(rsSumTwoIntegers(16000, 8000), "#,")
printl
printl "rsSumTwoLongs" in 10
printl format$(rsSumTwoLongs(1000000000, 500000000), "#,")
printl
printl "rsSumTwoQuads" in 10
printl format$(rsSumTwoQuads(2000000000, 1000000000), "#,")
printl
printl "rsSumTwoSingles" in 10
printl format$(rsSumTwoSingles(1.111111, 2.222222), "#.000000")
printl
printl "rsSumTwoDoubles" in 10
printl format$(rsSumTwoDoubles(1.11111111111111111, 2.2222222222222222))
printl
printl
printl "String data types" in 14
printl
printl "rsPrintAsciiz" in 10
rsPrintAsciiz("Hello Rust, I am ThinBASIC ASCIIZ")
printl
printl "rsReturnAsciizPtr" in 10
printl peek$(asciiz, rsReturnAsciizPtr())
printl
printl "rsReturnString" in 10
printl rsReturnString()
printl
printl
printl "User defined types" in 14
printl
printl "rsPrintUdtRgbColor" in 10
dim col as RgbColor
with col
.r = 255
.g = 128
.b = 64
end with
rsPrintUdtRgbColor(col)
printl
dim v as Vector3D
v.x = 1
v.y = 2
v.z = 3
printl "rsMultiplyVector3D" in 10
printl v.toString()
rsMultiplyVector3D(v, 2)
printl "~shazam~"
printl v.toString()
printl
dim arr(2) as Vector3D
arr(1).x = 1
arr(1).y = 2
arr(1).z = 3
arr(2).x = 10
arr(2).y = 20
arr(2).z = 30
printl "rsMultiplyVector3DArray" in 10
printl "arr(1) = " + arr(1).toString()
printl "arr(2) = " + arr(2).toString()
rsMultiplyVector3DArray(arr(1), ' Passing first array item
countOf(arr), ' + total count of items
3)
printl "~shazam~"
printl "arr(1) = " + arr(1).toString()
printl "arr(2) = " + arr(2).toString()
printl
printl "Press any key to quit..."
waitkey
end function