File Coverage

lib/Acme/ExtUtils/XSOne/Test/Calculator/Trig.xs
Criterion Covered Total %
statement 12 12 100.0
branch 7 8 87.5
condition n/a
subroutine n/a
pod n/a
total 19 20 95.0


line stmt bran cond sub pod time code
1             /*
2             * Acme::ExtUtils::XSOne::Test::Calculator::Trig - Trigonometric functions
3             */
4              
5             #include
6              
7 4           /* C helper functions for Trig package */
8             static double trig_normalize_angle(double radians) {
9 6 100         /* Normalize angle to [-PI, PI] */
10 6 100         while (radians > M_PI) radians -= 2.0 * M_PI;
11 4           while (radians < -M_PI) radians += 2.0 * M_PI;
12             return radians;
13             }
14 4            
15 4 50         static int trig_is_valid_asin_arg(double x) {
    100          
16             return (x >= -1.0 && x <= 1.0);
17             }
18 2            
19 2           static double trig_sec(double x) {
20             return 1.0 / cos(x);
21             }
22 2            
23 2           static double trig_csc(double x) {
24             return 1.0 / sin(x);
25             }
26 2            
27 2           static double trig_cot(double x) {
28             return cos(x) / sin(x);
29             }
30              
31             MODULE = Acme::ExtUtils::XSOne::Test::Calculator PACKAGE = Acme::ExtUtils::XSOne::Test::Calculator::Trig
32              
33             PROTOTYPES: DISABLE
34              
35             double
36             sin_val(a)
37             double a
38             CODE:
39             RETVAL = sin(a);
40             add_to_history('s', a, 0, RETVAL);
41             OUTPUT:
42             RETVAL
43              
44             double
45             cos_val(a)
46             double a
47             CODE:
48             RETVAL = cos(a);
49             add_to_history('c', a, 0, RETVAL);
50             OUTPUT:
51             RETVAL
52              
53             double
54             tan_val(a)
55             double a
56             CODE:
57             RETVAL = tan(a);
58             add_to_history('t', a, 0, RETVAL);
59             OUTPUT:
60             RETVAL
61              
62             double
63             asin_val(a)
64             double a
65             CODE:
66             if (a < -1.0 || a > 1.0) {
67             croak("asin argument must be in [-1, 1]");
68             }
69             RETVAL = asin(a);
70             add_to_history('S', a, 0, RETVAL);
71             OUTPUT:
72             RETVAL
73              
74             double
75             acos_val(a)
76             double a
77             CODE:
78             if (a < -1.0 || a > 1.0) {
79             croak("acos argument must be in [-1, 1]");
80             }
81             RETVAL = acos(a);
82             add_to_history('C', a, 0, RETVAL);
83             OUTPUT:
84             RETVAL
85              
86             double
87             atan_val(a)
88             double a
89             CODE:
90             RETVAL = atan(a);
91             add_to_history('T', a, 0, RETVAL);
92             OUTPUT:
93             RETVAL
94              
95             double
96             atan2_val(y, x)
97             double y
98             double x
99             CODE:
100             RETVAL = atan2(y, x);
101             add_to_history('A', y, x, RETVAL);
102             OUTPUT:
103             RETVAL
104              
105             double
106             deg_to_rad(degrees)
107             double degrees
108             CODE:
109             RETVAL = degrees * M_PI / 180.0;
110             OUTPUT:
111             RETVAL
112              
113             double
114             rad_to_deg(radians)
115             double radians
116             CODE:
117             RETVAL = radians * 180.0 / M_PI;
118             OUTPUT:
119             RETVAL
120              
121             double
122             hypot_val(a, b)
123             double a
124             double b
125             CODE:
126             RETVAL = hypot(a, b);
127             add_to_history('h', a, b, RETVAL);
128             OUTPUT:
129             RETVAL
130              
131             double
132             normalize_angle(radians)
133             double radians
134             CODE:
135             RETVAL = trig_normalize_angle(radians);
136             OUTPUT:
137             RETVAL
138              
139             double
140             sec_val(a)
141             double a
142             CODE:
143             RETVAL = trig_sec(a);
144             add_to_history('E', a, 0, RETVAL);
145             OUTPUT:
146             RETVAL
147              
148             double
149             csc_val(a)
150             double a
151             CODE:
152             RETVAL = trig_csc(a);
153             add_to_history('O', a, 0, RETVAL);
154             OUTPUT:
155             RETVAL
156              
157             double
158             cot_val(a)
159             double a
160             CODE:
161             RETVAL = trig_cot(a);
162             add_to_history('G', a, 0, RETVAL);
163             OUTPUT:
164             RETVAL
165              
166             int
167             is_valid_asin_arg(x)
168             double x
169             CODE:
170             RETVAL = trig_is_valid_asin_arg(x);
171             OUTPUT:
172             RETVAL
173              
174             void
175             import(...)
176             CODE:
177             {
178             static const char *trig_exports[] = {
179             "sin_val", "cos_val", "tan_val",
180             "asin_val", "acos_val", "atan_val", "atan2_val",
181             "deg_to_rad", "rad_to_deg", "hypot_val",
182             "normalize_angle", "sec_val", "csc_val", "cot_val",
183             "is_valid_asin_arg"
184             };
185             do_import(aTHX_ "Acme::ExtUtils::XSOne::Test::Calculator::Trig",
186             trig_exports, 15, items, ax);
187             }