// new testing file for rounding procedure in artbin
// artbin_test_rounding.do
// IW 5/12/2023

prog drop _all

cap log close
log using artbin_test_rounding, replace text nomsg

which artbin
which art2bin


foreach opts in ///
	"pr(.02 .02) margin(.02) aratio(1 2)" ///
	"pr(.02 .04) aratio(1 2)" ///
	"pr(.2 .3) aratio(10 17)" ///
	"pr(.02 .04 .06) aratio(3 2 1) convcrit(1E-8)" ///
	"pr(.02 .04 .06) trend convcrit(1E-8)" {
	artbin, `opts' noround
	local narms = 2 + !mi(r(n3))
	forvalues i=1/`narms' {
		local n`i' = r(n`i')
		local d`i' = r(D`i')
	}
	artbin, `opts' 
	* check arm-specific results
	forvalues i=1/`narms' {
		* check rounding of n's
		assert r(n`i') == ceil(`n`i'')
		* check D's match rounded n's
		assert reldif( r(D`i')/r(n`i') , `d`i''/`n`i'' ) < 1E-9
	}
	* check overall results
	if `narms'==2 {
		assert r(D)==r(D1)+r(D2)
		assert r(n)==r(n1)+r(n2)
	}
	else if `narms'==3 {
		assert r(D)==r(D1)+r(D2)+r(D3)
		assert r(n)==r(n1)+r(n2)+r(n3)
	}
}

// REPORT SUCCESS
di as result _n "*************************************************************" ///
	_n "*** ARTBIN HAS PASSED SOFTWARE TESTING OF ROUNDING  *********" ///
	_n "*************************************************************"

log close