Skip to content

Commit 22ac5c1

Browse files
committed
feat: Check status errors
Check returned status in running stats functions
1 parent ff9aa6c commit 22ac5c1

5 files changed

Lines changed: 101 additions & 14 deletions

File tree

doc/source/gsl-ffi-running-statistics.rst

Lines changed: 78 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ The GSL-FFI-RUNNING-STATISTICS module
44
.. current-library:: dylan-gsl
55
.. current-module:: gsl-ffi-running-statistics
66

7-
Classes
8-
=======
7+
Running statistics
8+
==================
99

1010
.. class:: <gsl-rstat-workspace>
1111

1212
Accumulator used to store the running statistics.
1313

1414
Initializing the Accumulator
15-
============================
15+
----------------------------
1616

1717
.. function:: gsl-rstat-alloc
1818

@@ -36,23 +36,26 @@ Initializing the Accumulator
3636

3737
.. function:: gsl-rstat-reset
3838

39-
:signature: gsl-rstat-reset (workspace) => ()
39+
:signature: gsl-rstat-reset (workspace) => (status)
4040

4141
:parameter workspace: An instance of :class:`<gsl-rstat-workspace*>`.
42+
:value status: An instance of :class:`<c-int>`
4243

4344
:description:
4445

4546
Reset a :class:`<gsl-rstat-workspace>`.
4647

4748
Adding Data to the Accumulator
48-
==============================
49+
------------------------------
4950

5051
.. function:: gsl-rstat-add
5152

5253
:signature: gsl-rstat-add (workspace x) => (status)
5354

5455
:parameter workspace: An instance of :class:`<gsl-rstat-workspace*>`.
55-
:parameter x: An instance of :class:`<double-float>`.
56+
:parameter x: An instance of :class:`<c-double>`.
57+
:value status: An instance of :class:`<c-int>`.
58+
5659

5760
:description:
5861

@@ -70,7 +73,7 @@ Adding Data to the Accumulator
7073
Get the number of values so far added to the :class:`<gsl-rstat-workspace>`.
7174

7275
Current Statistics
73-
==================
76+
------------------
7477

7578
.. function:: gsl-rstat-min
7679

@@ -180,4 +183,71 @@ Current Statistics
180183

181184
:description:
182185

183-
Get the norm value so far added to the :class:`<gsl-rstat-workspace>`.
186+
Get the norm value so far added to the :class:`<gsl-rstat-workspace>`.
187+
188+
Quantiles
189+
=========
190+
191+
.. class:: <gsl-rstat-quantile>
192+
193+
Accumulator used to store the running quantiles.
194+
195+
Initializing the Accumulator
196+
----------------------------
197+
198+
.. function:: gsl-rstat-quantile-alloc
199+
200+
:signature: gsl-rstat-quantile-alloc (p) => (quantile)
201+
202+
:parameter p: The quantile to compute.
203+
:value quantile: An instance of :class:`<gsl-rstat-quantile*>`.
204+
205+
.. function:: gsl-rstat-quantile-free
206+
207+
:signature: gsl-rstat-quantile-free (quantile) => ()
208+
209+
:parameter quantile: An instance of :class:`<gsl-rstat-quantile*>`.
210+
211+
:description:
212+
213+
Free a :class:`<gsl-rstat-quantile*>`.
214+
215+
.. function:: gsl-rstat-quantile-reset
216+
217+
:signature: gsl-rstat-quantile-reset (quantile) => (status)
218+
219+
:parameter quantile: An instance of :class:`<gsl-rstat-quantile*>`.
220+
:value status: An instance of :class:`<c-int>`.
221+
222+
:description:
223+
224+
Reset a :class:`<gsl-rstat-quantile*>`.
225+
226+
Adding Data to the Accumulator
227+
------------------------------
228+
229+
.. function:: gsl-rstat-quantile-add
230+
231+
:signature: gsl-rstat-quantile-add (x quantile) => (status)
232+
233+
:parameter x: An instance of :class:`<c-double>`.
234+
:parameter quantile: An instance of :class:`<gsl-rstat-quantile*>`.
235+
:value status: An instance of :class:`<c-int>`.
236+
237+
:description:
238+
239+
Add a new value to the :class:`<gsl-rstat-quantile*>`.
240+
241+
Current Statistics
242+
------------------
243+
244+
.. function:: gsl-rstat-quantile-get
245+
246+
:signature: gsl-rstat-quantile-get (quantile) => (quantile)
247+
248+
:parameter quantile: An instance of :class:`<gsl-rstat-quantile*>`.
249+
:value quantile: The quantile value in the accumulator.
250+
251+
:description:
252+
253+
Get the quantile value so far added to the :class:`<gsl-rstat-quantile*>`.

src/lib/ffi/running-statistics.dylan

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ end;
3333

3434
define c-function gsl-rstat-reset
3535
input parameter workspace :: <gsl-rstat-workspace*>;
36+
result status :: <c-int>;
3637
c-name: "gsl_rstat_reset";
3738
end;
3839

@@ -47,6 +48,7 @@ end;
4748
define c-function gsl-rstat-add
4849
input parameter workspace :: <gsl-rstat-workspace*>;
4950
input parameter x :: <c-double>;
51+
result status :: <c-int>;
5052
c-name: "gsl_rstat_add";
5153
end;
5254

src/lib/gsl/error/module.dylan

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ define module gsl-error-impl
5353

5454
use common-dylan;
5555
use c-ffi;
56-
use gsl-ffi-error;
56+
use gsl-ffi-error,
57+
export: { $gsl-success };
5758

5859
use gsl-error;
5960

60-
end module;
61+
end module;

src/lib/gsl/module-running-statistics.dylan

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ define module gsl-running-statistics-impl
4545
use common-dylan;
4646
use c-ffi;
4747
use gsl-error;
48+
use gsl-error-impl,
49+
import: { $gsl-success };
4850

4951
use gsl-ffi-running-statistics,
5052
prefix: "ffi/";

src/lib/gsl/running-statistics.dylan

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ end;
2828

2929
define function rstat-reset!
3030
(rstat :: <rstat>) => ()
31-
ffi/gsl-rstat-reset(rstat.%rstat-workspace)
31+
let status = ffi/gsl-rstat-reset(rstat.%rstat-workspace);
32+
if (status ~= $gsl-success)
33+
error(make(<gsl-error>, code: status))
34+
end
3235
end;
3336

3437
define method size
@@ -42,7 +45,10 @@ define generic rstat-add!
4245
define method rstat-add!
4346
(rstat :: <rstat>, x :: <double-float>)
4447
=> ()
45-
ffi/gsl-rstat-add(rstat.%rstat-workspace, x)
48+
let status = ffi/gsl-rstat-add(rstat.%rstat-workspace, x);
49+
if (status ~= $gsl-success)
50+
error(make(<gsl-error>, code: status))
51+
end
4652
end;
4753

4854
define method rstat-add!
@@ -127,15 +133,21 @@ end;
127133

128134
define function quantile-rstat-reset!
129135
(quantile-rstat :: <quantile-rstat>) => ()
130-
ffi/gsl-rstat-quantile-reset(quantile-rstat.%quantile-rstat-workspace)
136+
let status = ffi/gsl-rstat-quantile-reset(quantile-rstat.%quantile-rstat-workspace);
137+
if (status ~= $gsl-success)
138+
error(make(<gsl-error>, code: status))
139+
end
131140
end;
132141

133142
define generic quantile-rstat-add!
134143
(quantile-rstat :: <quantile-rstat>, x :: <object>) => ();
135144

136145
define method quantile-rstat-add!
137146
(quantile-rstat :: <quantile-rstat>, x :: <double-float>) => ()
138-
ffi/gsl-rstat-quantile-add(x, quantile-rstat.%quantile-rstat-workspace)
147+
let status = ffi/gsl-rstat-quantile-add(x, quantile-rstat.%quantile-rstat-workspace);
148+
if (status ~= $gsl-success)
149+
error(make(<gsl-error>, code: status))
150+
end
139151
end;
140152

141153
define method quantile-rstat-add!

0 commit comments

Comments
 (0)