From e61f3f60d73b2c0618f1c87533bfc756ff217ee5 Mon Sep 17 00:00:00 2001 From: tlatorre Date: Wed, 4 Jul 2018 13:53:59 -0400 Subject: update test --- test.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'test.c') diff --git a/test.c b/test.c index 62529ea..059fd57 100644 --- a/test.c +++ b/test.c @@ -2,6 +2,24 @@ #include #include +struct solid_angle_results { + double L; + double r0; + double omega; +} solid_angle_results[] = { + {0.5,0.0,3.4732594}, + {0.5,0.2,3.4184435}, + {0.5,0.4,3.2435434}, + {0.5,0.6,2.9185178}, + {0.5,0.8,2.4122535}, + {0.5,1.0,1.7687239}, + {0.5,1.2,1.1661307}, + {0.5,1.4,0.7428889}, + {0.5,1.6,0.4841273}, + {0.5,1.8,0.3287007}, + {0.5,2.0,0.2324189} +}; + int isclose(double a, double b, double rel_tol, double abs_tol) { /* Returns 1 if a and b are "close". This algorithm is taken from Python's @@ -14,6 +32,7 @@ int isclose(double a, double b, double rel_tol, double abs_tol) int test_solid_angle(char *err) { /* Tests the get_solid_angle() function. */ + int i; double pmt[3] = {0,0,0}; double pos[3] = {0,0,1}; double n[3] = {0,0,1}; @@ -27,6 +46,18 @@ int test_solid_angle(char *err) return 1; } + for (i = 0; i < sizeof(solid_angle_results)/sizeof(struct solid_angle_results); i++) { + pos[0] = solid_angle_results[i].r0*r; + pos[2] = solid_angle_results[i].L*r; + + solid_angle = get_solid_angle(pos,pmt,n,r); + + if (!isclose(solid_angle, solid_angle_results[i].omega, 1e-4, 0)) { + sprintf(err, "solid angle = %.2f, but expected %.2f", solid_angle, solid_angle_results[i].omega); + return 1; + } + } + return 0; } -- cgit