*! version 2.0.0 Wed Feb 24 14:21:15 PST 1993 program define asserteq version 3.0 if "`3'"=="" { if substr("`1'",1,3)=="noi" { mac def Assnoi True exit } if substr("`1'",1,3)=="qui" { mac def Assnoi exit } if substr("`1'",1,3)=="tol" { if "`2'"=="default" { mac def Asserteq exit } confirm number `2' mac def Asserteq `2' exit } error 198 } if "$Asserteq"=="" { mac def Asserteq "0.00001" } if ("$Assnoi"=="True" | substr("`4'",1,3)=="noi") & /* */ substr("`4'",1,3)!="qui" { di in gr "(absolute= "in ye abs((`1')-(`3')) /* */ in gr " relative= " in ye abs(((`1')-(`3'))/(`3')) /* */ in gr ")" } if "`2'" == "==" { /* absolute */ assert abs((`1')-(`3'))<($Asserteq) exit } if "`2'" == "/=" { /* relative */ assert abs((`1')-(`3'))/max(1,abs(`3')) < ($Asserteq) exit } if "`2'" == "//" { /* forced relative */ assert abs((`1')-(`3'))/abs(`3') < ($Asserteq) exit } error 198 end exit asserteq tolerance { # | default } sets tolerance asserteq noisily sets noisy mode asserteq quietly sets quiet mode asserteq == [noisily|quietly] absolute to tolerance asserteq /= [noisily|quietly] relative to tolerance asserteq // [noisil|quietlyy] forced rel. to tolerance quiet mode is the default after macro drop _all. Note, /= is the same as == if abs()<1. Use // if you do not want this.