📄 twfunc.tpl
字号:
REM tWFunc.tpl
REM EPOC OPL automatic test code for word functions.
REM Copyright (c) 1991-2000 Symbian Ltd. All rights reserved.
INCLUDE "Const.oph"
INCLUDE "hUtils.oph"
CONST kPath$="c:\Opl1993"
PROC Standalone:
REM Main procedure called when not running inside test harness.
LOADM KhUtils$
hLink:("tWFunc", hThreadIdFromOplDoc&:, KhUserFull%)
REM After standalone completion, control returns here.
dINIT "Tests complete" :DIALOG
ENDP
proc tWfunc:
global patha$(9)
global pause%
rem hInitTestHarness:(KhInitLocalErrorHandling%, KhInitNotUsed%)
patha$=kPath$
trap mkdir patha$
rem strtest:("Word Functions")
hRunTest%:("tIo")
hRunTest%:("tWpeek")
hRunTest%:("tBpeek")
hRunTest%:("tLoc")
hRunTest%:("tLen")
hRunTest%:("tAsc")
hRunTest%:("tErr")
hRunTest%:("tDate")
hRunTest%:("tDow")
hRunTest%:("tWeek")
hRunTest%:("tFileW")
hRunTest%:("tDblToW")
hRunTest%:("longToW")
hRunTest%:("ldToUw")
rem hRunTest%:("tKeyC")
hCleanUp%:("CleanUp")
rem KLog%:(KhLogHigh%,"Some sample text")
endp
PROC CleanUp:
lclose rem just in case
trap delete kpath$+"\tWFunc.odb"
trap delete kpath$+"\t_io.txt"
trap delete kpath$+"\*.*"
trap rmdir kpath$
ENDP
proc tKeyC:
local stat%,key%,ret%
rem cls
rem SubTest:("KEYC test")
ret%=keya(stat%,key%)
if ret%<0
raise ret%
rem print "keya failed"
else
rem print "keya done ok"
endif
ret%=keyc(stat%)
if ret%<0
raise ret%
endif
endp
proc tDow:
rem SubTest:("DOW test")
onerr e1::
dow(32,1,1990)
onerr off
raise 1
e1::
onerr e2::
dow(-1,1,1990)
onerr off
raise 2
e2::
onerr e3::
dow(0,1,1990)
onerr off
raise 3
e3::
onerr e4::
dow(1,13,1990)
onerr off
raise 4
e4::
onerr e5::
dow(1,-1,1990)
onerr off
raise 5
e5::
onerr e6::
dow(1,0,1990)
onerr off
raise 6
e6::
onerr e7::
dow(1,-1,90)
onerr off
raise 7
e7::
onerr off
if dow(1,1,1900)<>1 :raise 10 :endif
if dow(12,6,1990)<>2 :raise 11 :endif
if dow(31,12,2155)<>3 :raise 12 :endif
endp
proc tWeek:
rem SubTest:("WEEK test")
onerr e1::
print week(1,100,2156)
onerr off
raise 1
e1::
onerr e2::
print week (301,12,1899)
onerr off
raise 2
e2::
onerr off
if week(1,1,1900)<>1
raise 3
endif
if week(28,12,2155)<>52 :rem maximum date for week
raise 4
endif
if week(18,7,1990)<>29
raise 5
endif
endp
proc tBpeek:
local i%
rem SubTest:("Byte Peek test")
i%=1
if peekB(addr(i%))<>1
raise 1
endif
i%=255
if peekB(addr(i%))<>255
raise 2
endif
i%=256
if peekB(addr(i%))<>0
raise 3
endif
endp
proc tWpeek:
local l&,p%
rem SubTest:("Peek word")
p%=addr(l&)
l&=1
if peekW(p%)<>1
raise 1
endif
l&=65535
if peekW(p%)<>-1
raise 2
endif
l&=&ffff8000
if peekW(p%)<>-32768
raise 3
endif
l&=65536
if peekW(p%)<>0
raise 4
endif
endp
proc tDate:
local second%,minute%,hour%,day%,dayN$(10),monthN$(20),date$(30),month%,year%
local bldDate$(30),dayInM$(2),day$(2),year$(6),hour$(4),minute$(4),second$(4)
rem SubTest:("Date word functions")
date$=datim$
second%=second
minute%=minute
hour%=hour
year%=year
month%=month
monthN$=month$(month%)
day%=day
dayN$=dayName$(dow(day%,month%,year%))
dayInM$=num$(day%,-2)
if day%<10
dayInM$="0"+chr$($30+day%)
endif
year$=num$(year%,4)+" "
hour$=num$(hour%,2)+":"
if hour%<10
hour$="0"+hour$
endif
minute$=num$(minute%,2)+":"
if minute%<10
minute$="0"+minute$
endif
second$=num$(second%,2)
if second%<10
second$="0"+second$
endif
bldDate$=dayN$+" "+dayInM$+" "+monthN$+" "+year$+hour$+minute$+second$
rem print "datim$ ->",date$
rem print "Built name ->",bldDate$
rem pause pause% :key
if bldDate$<>date$
raise 1
rem beep 3,500
rem print "Check tDate:() : dates differ by at least 1 second"
rem print "String slice the text time when time is available"
rem pause pause% :key
rem raise 1
endif
endp
proc longToW:
local i%,l&
rem SubTest:("Long to word Function")
i%=&00007fff
i%=&ffff8000
l&=-32768
while i%<=32700 :rem all valid integers
if (l&/1000*1000)=l& : print l& :endif
i%=l&
l&=l&+10
endwh
onerr e1::
l&=32768
i%=l&
raise 1
e1::
onerr off
if err<>KErrOverflow%
raise 2
endif
onerr e2::
l&=-32769
i%=l&
raise 3
e2::
onerr off
if err<>KErrOverflow%
raise 4
endif
endp
proc ldToUw:
local i%,lp&,dp,numErrs%
rem SubTest:("Long/Double to unsigned word Function")
lp&=0 : rem long ptr
dp=0 : rem double ptr
numErrs%=0
while lp&<65536
if lp&/1000*1000=lp&
rem at 1,21 :print lp&
endif
dp=lp&
if uadd(lp&,0)<>uadd(dp,0)
rem alert("ldToUw: BUG!","Failed on values "+num$(lp&,10))
raise 1
endif
lp&=lp&+1
dp=dp+1
endwh
rem print "There were",numErrs%,"discrepencies - consistent with RunTime stack change"
rem pause pause% :key
if numErrs%>3 :raise 1 :endif
return
e1::
rem print "Reached loop",lp&-1
rem pause pause%
raise 2
endp
proc procPeek:(fill$,dp,lp&)
REM Peek in procedure so rt stack not in same place
return(peekB(dp)<>peekB(lp&))
endp
proc tDblToW:
local d,j%,i%,name$(30),err%,errb%
rem SubTest:("Double to word test")
name$="tWFunc\tDblToW"
err%=KErrOverflow%
errb%=KErrInvalidArgs%
onerr e1::
j%=32768.0
raise 2
e1::
onerr off
if err<>err% :raise 3 :endif
onerr e2::
j%=-32769.0
raise 4
e2::
onerr off
if err<>err% :raise 5 :alert("About to raise 5",err$(err)) :raise 5 :endif
onerr e3::
j%=9e99
raise 6
e3::
onerr off
if err<>err% :raise 7 :endif
onerr e4::
j%=-9e99
raise 8
e4::
onerr off
if err<>err% :raise 9 :endif
j%=-32768.0 :i%=-32768 :if i%<>j% :raise 10 :endif
j%=32767.0 :i%=32767 :if i%<>j% :raise 11 :endif
i%=-32768
d=-32768
do
j%=d
rem if (i%/1000*1000)=i% :print i% :endif
if j%<>i%
raise 1
rem beep 3,2000
rem print "Double",d,"is converted to word",j%
rem pause pause%
endif
i%=i%+100
d=d+100.
until i%>=32600
endp
proc tAsc:
local a%,s$(2),i%,p%
rem SubTest:("ASC() test")
s$="12"
p%=addr(s$)+1+KOplAlignment%
i%=0
while i%<256
pokeB p%,i%
a%=asc(s$)
if a%<>i%
raise 1
alarmLp:("ASC",i%)
endif
i%=i%+1
endwh
endp
proc tErr:
rem SubTest:("ERR test")
onerr e1::
raise 1 :rem go to check err is 1
onerr off
raise 2
e1::
onerr off
if err<>1
raise 3
rem beep 3,2000
rem print "'err' function failed!!!"
rem pause pause%
endif
endp
proc tLen:
local a$(255),i%
rem SubTest:("LEN test")
rem Do 2 without rept$ in case rept$ not working !
if len("")<>0 :raise 1 :endif
if len("123")<>3 :raise 2 :endif
i%=0
while i%<256
a$=rept$("A",i%)
if len(a$)<>i%
raise 3
alarmLp:("tLen",i%)
endif
i%=i%+1
endwh
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -