⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmaths.tpl

📁 在手机操作系统symbina上使用的一个脚本扩展语言的代码实现,可以参考用于自己的开发
💻 TPL
字号:
REM tMaths.tpl
REM EPOC OPL automatic test code for maths operations.
REM Copyright (c) 1991-2000 Symbian Ltd. All rights reserved.

INCLUDE "Const.oph"
INCLUDE "hUtils.oph"

PROC Standalone:
	REM Main procedure called when not running inside test harness.
	LOADM KhUtils$
	hLink:("tMaths", hThreadIdFromOplDoc&:, KhUserFull%)
	REM After standalone completion, control returns here.
	dINIT "Tests complete" :DIALOG
ENDP


proc tMaths:
	rem hInitTestHarness:(KhInitLocalErrorHandling%, KhInitNotUsed%)
	rem strtest:("Maths")  :rem In T_UTIL.OPL
	hRunTest%:("divZero")
	hRunTest%:("overFlow")
	hRunTest%:("arith")
	hRunTest%:("transcnd")
	hRunTest%:("fErrors")
	rem hCleanUp%:("CleanUp")
	rem KLog%:(KhLogHigh%,"Some sample text")
endp


REM---------------------------------------------------------------------------

proc divZero:
	rem SubTest:("Test Division by Zero")
	onerr intOk
	print 1/0
	onerr off :raise 1
intOk::
	onerr off
	if err<>-8
		raise 2
	endif	
	onerr longOk
	print &00000001/&0
	onerr off :raise 3
longOk::
	onerr off
	if err<>-8
		raise 4
	endif
	onerr dblOk
	print 1.0/0.0
	onerr off :raise 5
dblOk::
	onerr off
	if err<>-8
		raise 6
	endif
endp


proc overFlow:
	local i%,l&,r
	rem SubTest:("Test Integer Overflow and Underflow")
	i%=32767/2*2+1
	if i%<>32767 :raise 1 :endif
	i%=-32766/2*2-2
	if i%<>-32768 :raise 2 :endif

	onerr intOver1
	i%=32767+1	:raise 3
intOver1::
	onerr off
	if err<>-6	:raise 4 :endif
	onerr intOver2
	i%=32767*2 :raise 5
intOver2::
	onerr off
	if err<>-6 :raise 6 :endif
	onerr intOver3
	i%=32767-(-1) :raise 7
intOver3::
	onerr off
	if err<>-6 :raise 8 :endif
	onerr intOver4
	i%=32767**2 : raise 9
intOver4::
	onerr off
	if err<>-6 :raise 10 :endif
	onerr intOver5
	i%=32767+32767 :raise 11
intOver5::
	onerr off
	if err<>-6	:raise 12 :endif
	onerr intOver6
	i%=32767*100 :raise 13
intOver6::
	onerr off
	if err<>-6 :raise 14 :endif
	onerr intOver7
	i%=32767-(-32767) :raise 15
intOver7::
	onerr off
	if err<>-6 :raise 16 :endif

	rem Underflow - large negative integers
	onerr intUnder1
	i%=$8000-1 :raise 17
intUnder1::
	onerr off
	if err<>-6 :raise 18 :endif
	onerr intUnder2
	i%=$8000+(-1) :raise 19
intUnder2::
	onerr off
	if err<>-6 :raise 20 :endif
	onerr intUnder3
	i%=$8000*2 :raise 21
intUnder3::
	onerr off
	if err<>-6 :raise 22 :endif
	hlog%:(KhLogalways%,"ERROR !!TODO defect EDNRANS-4KDEFM Skipping Overflow errors.")
goto SKIPOVER::
	onerr intUnder4
	i%=-32768**2 :raise 23
intUnder4::
	onerr off
	if err<>-6 :raise 24 :endif
SKIPOVER::

	onerr intUnder5
	i%=$8000-$7fff :raise 25
intUnder5::
	onerr off
	if err<>-6 :raise 26 :endif
	onerr intUnder6
	i%=$8000+($8000) :raise 27
intUnder6::
	onerr off
	if err<>-6 :raise 28 :endif
	onerr intUnder7
	i%=$8000*$7fff :raise 29
intUnder7::
	onerr off
	if err<>-6 :raise 30 :endif

	rem SubTest:("Test Long Overflow and Underflow")
	
	l&=&7fffffff/2*2+1
	if l&<>&7fffffff :raise 1 :endif
	l&=&80000002/2*2-2
	if l&<>&80000000 :raise 2 :endif

	onerr longOver1
	l&=&7fffffff+1 :raise 3
longOver1::
	onerr off
	if err<>-6 :raise 4 :endif
	onerr longOver2
	l& = &7fffffff-(-1) :raise 5
longOver2::
	onerr off
	if err<>-6 :raise 6 :endif
	onerr longOver3
	l& = &7fffffff*2 :raise 7
longOver3::
	onerr off
	if err<>-6 :raise 8 :endif
	onerr longOver4
	l& = &7fffffff**2 :raise 9
longOver4::
	onerr off
	if err<>-6 :raise 10 :endif
	onerr longOver5
	l&=&7fffffff+&7fffffff :raise 11
longOver5::
	onerr off
	if err<>-6 :raise 12 :endif
	onerr longOver6
	l& = &7fffffff-(&80000000) :raise 13
longOver6::
	onerr off
	if err<>-6 :raise 14 :endif
	onerr longOver7
	l& = &7fffffff*&7fffffff :raise 15
longOver7::
	onerr off
	if err<>-6 :raise 16 :endif

	rem Underflow - large negative longs
	onerr longUndr1
	l& = &80000000-1 :raise 17
longUndr1::
	onerr off
	if err<>-6 :raise 18 :endif
	onerr longUndr2
	l& = &80000000+(-1) :raise 19
longUndr2::
	onerr off
	if err<>-6	:raise 20 :endif
	onerr longUndr3
	l& = &80000000*2 :raise 21
longUndr3::
	onerr off
	if err<>-6 :raise 22 :endif
	onerr longUndr4
	l& = &80000000**2 :raise 23
longUndr4::
	onerr off
	if err<>-6 :raise 24 :endif
		onerr longUndr5
	l& = &80000000-&7fffffff :raise 25
longUndr5::
	onerr off
	if err<>-6 :raise 26 :endif
	onerr longUndr7
	l& = &80000000+(&80000000) :raise 27
longUndr7::
	onerr off
	if err<>-6	:raise 28 :endif
	onerr longUndr8
	l& = &80000000*&7fffffff :raise 29
longUndr8::
	onerr off
	if err<>-6 :raise 30 :endif
	
	rem SubTest:("Test Real Overflow and Underflow")	
	hlog%:(KhLogalways%,"ERROR !!TODO defect EDNRANS-4KDEFM Skipping Overflow errors.")
goto EndofTRealTests::
	
	onerr realOver1
	r=-1e308-1e308 :raise 37
realOver1::
	onerr off
	if err<>-6 :raise 38 :endif
	onerr realOver2
	r=1e308+1e308 :raise 39
realOver2::
	onerr off
	if err<>-6 :raise 40 :endif
	onerr realOver3
	r=1e308*3.0 :raise 41
realOver3::
	onerr off
	if err<>-6	:raise 42 :endif
	onerr realOver4
	r=1e308/0.4 :raise 43
realOver4::
	onerr off
	if err<>-6 :raise 44 :endif
	onerr realOver5
	r=1e308**2.0 :raise 45
realOver5::
	onerr off
	if err<>-6 :raise 46 :endif
	
	rem Underflow not achievable by subtraction or addition 
	rem due to lack of precision
	onerr realUndr1
	r=3e-324*0.2 :raise 47
realUndr1::
	onerr off
	if err<>-5 :raise 48 :endif
	onerr realUndr2
	r=5E-324/3.0 :raise 49
realUndr2::
	onerr off
	if err<>-5 :raise 50 :endif
	onerr realUndr3
	r=5E-324**2.0 :raise 51
realUndr3::
	onerr off
	if err<>-5 :raise 52 :endif
EndOfTrealTests::
endp


proc arith:
	local ires%,l&,lres&
	rem SubTest:("Real Arithmetic Operators")
	rem print "2.0+3.0=";2.0+3.0
	if (2.0+3.0)  <>  5.0 :raise 1 :endif
	rem print "2.0-3.0=";2.0-3.0
	if (2.0-3.0)  <>  -1.0 :raise 2 :endif
	rem print "2.0*3.0=";2.0*3.0
	if (2.0*3.0)  <>  6.0 :raise 3 :endif
	rem print "3.0/2.0=";3.0/2.0
	if (3.0/2.0)  <>  1.5 :raise 4 :endif
	rem print "2.0**3.0=";2.0**3.0
	if DblNeqG%:((2.0**3.0),8.0,1E-15) :raise 5 :endif

	rem print "1.0**10.0=";1.0**10.0
	if 1.0**10.0 <> 1.0 :raise 6 :endif
	rem print "2.0**0.0=";2.0**0.0
	if 2.0**0.0 <> 1.0 :raise 7 :endif
	rem print "0.0**1.0=";0.0**1.0
	if 0.0**1.0 <> 0.0 :raise 8 :endif
	rem print "2.0 and 3.0=";2.0 and 3.0
	if (2.0 and 3.0)=0 :raise 9 :endif
	rem print "0.0 and 3.0=";0.0 and 3.0
	if (0.0 and 3.0)=-1 :raise 10 :endif
	rem print "2.0 or 3.0=";2.0 or 3.0
	if (2.0 or 3.0)=0 :raise 11 :endif
	rem print "2.0 or 0.0=";2.0 or 0.0
	if (2.0 or 0.0)=0 :raise 12 :endif
	rem print "0.0 or 0.0=";0.0 or 0.0
	if (0.0 or 0.0)= -1 :raise 13 :endif
	rem print "not 3.0=";not 3.0
	if	(not 3.0)=-1 :raise 14 :endif
	rem print "not 0.0=";not 0.0
	if (not 0.0)=0 :raise 15 :endif
	rem print "-3.0=";-(3.0)
	if -(3.0)<>0.0-3.0 :raise 16 :endif	

	rem SubTest:("Integer Arithmetic Operators")

	rem print "2+3=";2+3
	if (2+3) <> 5 :raise 1 :endif
	rem print "2-3=";2-3
	if (2-3) <> -1 :raise 2 :endif
	rem print "2*3=";2*3
	if (2*3)  <>  6 :raise 3 :endif
	rem print "3/2=";3/2
	if (3/2)  <>  1 :raise 4 :endif
	rem print "2**3=";2**3
	if 2**3 <> 8 :raise 5 :endif
	rem print "1**10=";1**10
	if 1**10 <> 1 :raise 6 :endif
	rem print "2**0=";2**0
	if 2**0 <> 1 :raise 7 :endif
	rem print "0**1=";0**1
	if 0**1 <> 0 :raise 8 :endif
	rem print "2 and 3=";2 and 3
	if (2 and 3)=0 :raise 9 :endif
	rem print "0 and 3=";0 and 3
	if (0 and 3)=-1 :raise 10 :endif
	rem print "2 or 3=";2 or 3
	if (2 or 3)=0 :raise 11 :endif
	rem print "2 or 0=";2 or 0
	if (2 or 0)=0 :raise 12 :endif
	rem print "0 or 0=";0 or 0
	if (0 or 0)= -1 :raise 13 :endif
	rem print "not 3=";not 3
	if  (not 3)=-1 :raise 14 :endif
	rem print "not 0=";not 0
	if (not 0)=0 :raise 15 :endif
	rem print "-3=";-(3)
	if -(3)<>0-3 :raise 16 :endif	

	onerr intpow
	ires%=0**-1
	raise 17
intpow::
	onerr off
	if err<>-2 :raise 18 :endif 

	rem SubTest:("Long Arithmetic Operators")

	rem print "2+3=";&2+&3
	if (&2+&3) <> &5 :raise 1 :endif
	rem print "2-3=";&2-&3
	if (&2-&3) <> &ffffffff :raise 2 :endif
	rem print "2*3=";&2*&3
	if (&2*&3)	<>  &6 :raise 3 :endif
	rem print "3/2=";&3/&2
	if (&3/&2)  <>  &1 :raise 4 :endif
	rem print "2**3=";&2**&3
	if (&2**&3) <> &8 :raise 5 :endif
	rem print "1**10=";&1**&10
	if (&1**&10) <> &1 :raise 6 :endif
	rem print "2**0=";&2**&0
	if (&2**&0) <> &1 :raise 7 :endif
	rem print "0**1=";&0**&1
	if (&0**&1) <> &0 :raise 8 :endif
	rem print "2 and 3=";&2 and &3
	if (&2 and &3)=&0 :raise 9 :endif
	rem print "0 and 3=";&0 and &3
	if (&0 and &3)=&ffffffff :raise 10 :endif
	rem print "2 or 3=";&2 or &3
	if (&2 or &3)=&0 :raise 11 :endif
	rem print "2 or 0=";&2 or &0
	if (&2 or &0)=&0 :raise 12 :endif
	rem print "0 or 0=";&0 or &0
	if (&0 or &0)= &ffffffff :raise 13 :endif
	rem print "not 3=";not &3
	if	(not &3)=&ffffffff :raise 14 :endif
	rem print "not 0=";not &0
	if (not &0)=&0 :raise 15 :endif
	rem print "-3=";-(&3)
	if -(&3)<>&0-&3 :raise 16 :endif	

	onerr longpow
	lres&=&0**&ffffffff
	raise 17
longpow::
	onerr off
	if err<>-2 :raise 18 :endif 
endp


proc transcnd:
	local lessprec,prec
	rem SubTest:("Transcendental Functions")
	prec=1e-15
	lessprec=1E-14
	rem Trig functions
	if sin(pi/2.0) <> 1.0 :raise 1 :endif
	if sin(0.0) <> 0.0 :raise 2 :endif
	if DblNeqG%:(sin(pi/6.0),0.5,prec) :raise 3 :endif
	if DblNeqG%:(sin(pi/4.0),1.0/sqr(2),prec) :raise 4 :endif
	if DblNeqG%:(sin(pi/3.0),sqr(3)/2.0,prec) :raise 5 :endif
	if DblNeqG%:(cos(pi/2.0),0.0,prec) : raise 6 :endif
	if DblNeqG%:(cos(0.0),1.0,prec) :raise 7 :endif
	if DblNeqG%:(cos(pi/6.0),sqr(3)/2.0,prec) :raise 8 :endif
	if DblNeqG%:(cos(pi/4.0),1.0/sqr(2.0),prec) :raise 9 :endif
	if DblNeqG%:(cos(pi/3.0),0.5,prec) :raise 10 :endif
	if DblNeqG%:(tan(pi),0.0,prec) :raise 11 :endif
	if tan(0.0) <> 0.0 :raise 12 :endif
	if DblNeqG%:(tan(pi/4.0),1.0,prec) :raise 13 :endif
	
	rem Inverse trig functions
	if asin(0.0) <> 0.0 :raise 14 :endif
	if DblNeqG%:(asin(1.0),pi/2.0,prec) :raise 15 :endif
	if DblNeqG%:(asin(0.5),pi/6.0,prec) :raise 16 :endif
	if DblNeqG%:(asin(1.0/sqr(2)),pi/4.0,prec) :raise 17 :endif
	if DblNeqG%:(asin(sqr(3)/2.0),pi/3.0,prec) :raise 18 :endif
	if DblNeqG%:(asin(sin(0.6)),0.6,prec) :raise 19 :endif
	if asin(sin(pi/2)) <> pi/2 :raise 20 :endif
	if acos(0.0) <> pi/2:raise 21 :endif
	if DblNeqG%:(acos(1.0),0.0,prec) :raise 22 :endif
	if DblNeqG%:(acos(sqr(3)/2.0),pi/6.0,prec) :raise 23 :endif
	if DblNeqG%:(acos(1.0/sqr(2.0)),pi/4.0,prec) :raise 24 :endif
	if DblNeqG%:(acos(0.5),pi/3.0,prec) :raise 25 :endif
	if DblNeqG%:(acos(cos(0.6)),0.6,prec) :raise 26 :endif
	if atan(0.0) <> 0.0 :raise 27 :endif
	if atan(tan(pi/4)) <> pi/4 :raise 28 :endif
	if DblNeqG%:(atan(tan(0.6)),0.6,prec) :raise 29 :endif

	rem Other functions
	if log(100.0) <> 2.0 :raise 31 :endif
	if log(10.0) <> 1.0 :raise 32 :endif
	if log(10.0**50.0) <> 50.0 :raise 33 :endif
	if exp(ln(2.0)) <> 2.0 :raise 34 :endif
	if exp(0.0) <> 1.0 :raise 35 :endif
	if DblNeqG%:(exp(ln(10.0)),10.0,lessprec) :raise 36 :endif	
	if ln(exp(1.0)) <> 1.0 :raise 37 :endif
	if ln(exp(2.0)) <> 2.0 :raise 38 :endif
	if ln(exp(1.23456)) <> 1.23456 :raise 39 :endif
	if sqr(4.0) <> 2.0 :raise 40 :endif
	if sqr(81.0) <> 9.0 :raise 41 :endif
	if sqr(9*9) <>	9.0 :raise 42 :endif
	if deg(pi) <> 180 :raise 43 :endif
	if rad(180) <> pi :raise 44 :endif
	if deg(rad(pi/3)) <> pi/3 :raise 45 :endif
	if deg(-pi/2) <> -90 :raise 46 :endif
	if rad(-45) <> -pi/4 :raise 47 :endif
	if deg(rad(-pi/6)) <> -pi/6 :raise 48 :endif
	if deg(rad(0.0)) <> 0.0 :raise 49 :endif
endp


proc fErrors:
	local d
	onerr e1
	d=cos(1E50)
	raise 1
e1::
	onerr off
	if err<>-2
		raise 2
	endif
	onerr e2
	d=cos(-1E50)
	raise 3
e2::
	onerr off
	if err<>-2
		raise 4
	endif
	onerr e3
	d=sin(1E50)
	raise 5
e3::
	onerr off
	if err<>-2
		raise 6
	endif	
	onerr e4
	d=sin(-1E50)
	raise 7
e4::
	onerr off
	if err<>-2
		raise 8
	endif

	onerr e7
	d=tan(1E20)
	raise 13
e7::
	onerr off
	if err<>-2
		raise 14
	endif
	onerr e8
	d=tan(-1E15)
	raise 15
e8::
	onerr off
	if err<>-2
		raise 16
	endif
	onerr e9
	d=asin(2.0)
	raise 17
e9::
	onerr off
	if err<>-2
		raise 18
	endif
	onerr e10
	d=acos(2.0)
	raise 19
e10::
	onerr off
	if err<>-2
		raise 20
	endif
	hlog%:(KhLogalways%,"ERROR !!TODO defect EDNRANS-4KDEFM Skipping Underflow errors.")
GOTO燬KIPUNDER::

	onerr e12
	d=rad(5E-324)
	raise 23
e12::
	onerr off
	if err<>-5
		raise 24
	endif
SKIPUNDER::

	onerr e14
	d=ln(-1)
	raise 27
e14::
	onerr off
	if err<>-2
		raise 28
	endif
	onerr e15
	d=log(-1)
	raise 29
e15::
	onerr off
	if err<>-2
		raise 30
	endif
	onerr e16
	d=sqr(-1)
	raise 31
e16::
	onerr off
	if err<>-2
		raise 32
	endif	

	hlog%:(KhLogalways%,"ERROR !!TODO defect EDNRANS-4KDEFM Skipping Overflow errors.")
goto EndOfFError::

	REM overflow tests.
	onerr e5
	d=tan(pi/2.0)
	raise 9
e5::
	onerr off
	if err<>-6
		print d,err
		raise 10
	endif
	onerr e6
	d=tan(-pi/2)
	raise 11
e6::
	onerr off
	if err<>-6
		raise 12
	endif
	onerr e11
	d=deg(1E308)
	raise 21
e11::
	onerr off
	if err<>-6
		raise 22
	endif

	onerr e13
	d=exp(800.0)
	raise 25
e13::
	onerr off
	if err<>-6
		raise 26
	endif

EndofFError::
endp


proc DblNeqG%:(l,r,prec)
	local dif,res%
	dif=abs(l-r)
	rem print "Dif=";dif
	res%=(dif>=prec)
	rem if res%
		rem	pause pause% :key
	rem endif
	return res%
endp



REM End of tMaths.tpl 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -