File Coverage

lib/Acme/ExtUtils/XSOne/Test/Calculator/Basic.xs
Criterion Covered Total %
statement 12 12 100.0
branch 6 6 100.0
condition n/a
subroutine n/a
pod n/a
total 18 18 100.0


line stmt bran cond sub pod time code
1             /*
2             * Acme::ExtUtils::XSOne::Test::Calculator::Basic - Basic arithmetic operations
3             */
4              
5             #include
6              
7 4           /* C helper functions for Basic package */
8 4 100         static double basic_safe_divide(double a, double b, int *error) {
9 2           if (b == 0.0) {
10 2           *error = 1;
11             return 0.0;
12 2           }
13 2           *error = 0;
14             return a / b;
15             }
16 6            
17 6 100         static double basic_clamp(double value, double min_val, double max_val) {
18 4 100         if (value < min_val) return min_val;
19 2           if (value > max_val) return max_val;
20             return value;
21             }
22 6            
23 6           static double basic_percent(double value, double percent) {
24             return value * percent / 100.0;
25             }
26              
27             MODULE = Acme::ExtUtils::XSOne::Test::Calculator PACKAGE = Acme::ExtUtils::XSOne::Test::Calculator::Basic
28              
29             PROTOTYPES: DISABLE
30              
31             double
32             add(a, b)
33             double a
34             double b
35             CODE:
36             RETVAL = a + b;
37             add_to_history('+', a, b, RETVAL);
38             OUTPUT:
39             RETVAL
40              
41             double
42             subtract(a, b)
43             double a
44             double b
45             CODE:
46             RETVAL = a - b;
47             add_to_history('-', a, b, RETVAL);
48             OUTPUT:
49             RETVAL
50              
51             double
52             multiply(a, b)
53             double a
54             double b
55             CODE:
56             RETVAL = a * b;
57             add_to_history('*', a, b, RETVAL);
58             OUTPUT:
59             RETVAL
60              
61             double
62             divide(a, b)
63             double a
64             double b
65             CODE:
66             if (b == 0.0) {
67             croak("Division by zero");
68             }
69             RETVAL = a / b;
70             add_to_history('/', a, b, RETVAL);
71             OUTPUT:
72             RETVAL
73              
74             double
75             modulo(a, b)
76             double a
77             double b
78             CODE:
79             if (b == 0.0) {
80             croak("Modulo by zero");
81             }
82             RETVAL = fmod(a, b);
83             add_to_history('%', a, b, RETVAL);
84             OUTPUT:
85             RETVAL
86              
87             double
88             negate(a)
89             double a
90             CODE:
91             RETVAL = -a;
92             add_to_history('n', a, 0, RETVAL);
93             OUTPUT:
94             RETVAL
95              
96             double
97             absolute(a)
98             double a
99             CODE:
100             RETVAL = fabs(a);
101             add_to_history('a', a, 0, RETVAL);
102             OUTPUT:
103             RETVAL
104              
105             double
106             safe_divide(a, b)
107             double a
108             double b
109             CODE:
110             int error;
111             RETVAL = basic_safe_divide(a, b, &error);
112             if (error) {
113             RETVAL = 0.0; /* Return 0 instead of croak */
114             }
115             add_to_history('/', a, b, RETVAL);
116             OUTPUT:
117             RETVAL
118              
119             double
120             clamp(value, min_val, max_val)
121             double value
122             double min_val
123             double max_val
124             CODE:
125             RETVAL = basic_clamp(value, min_val, max_val);
126             OUTPUT:
127             RETVAL
128              
129             double
130             percent(value, pct)
131             double value
132             double pct
133             CODE:
134             RETVAL = basic_percent(value, pct);
135             add_to_history('%', value, pct, RETVAL);
136             OUTPUT:
137             RETVAL
138              
139             void
140             import(...)
141             CODE:
142             {
143             static const char *basic_exports[] = {
144             "add", "subtract", "multiply", "divide", "modulo",
145             "negate", "absolute", "safe_divide", "clamp", "percent"
146             };
147             do_import(aTHX_ "Acme::ExtUtils::XSOne::Test::Calculator::Basic",
148             basic_exports, 10, items, ax);
149             }