1 /** GSL bindings for D.
2     Authors:    Chibisi Chima-Okereke
3     Copyright:  Copyright (c) 2016, Chibisi Chima-Okereke. All rights reserved.
4     License:    Boost License 1.0
5 */
6 
7 module gsl;
8 public import gsl.blas;
9 public import gsl.block;
10 public import gsl.bspline;
11 public import gsl.cblas;
12 public import gsl.cdf;
13 public import gsl.chebyshev;
14 public import gsl.check_range;
15 public import gsl.combination;
16 public import gsl.complex;
17 public import gsl.constants;
18 public import gsl.deriv;
19 public import gsl.dht;
20 public import gsl.diff;
21 public import gsl.eigen;
22 public import gsl.errno;
23 public import gsl.fft;
24 public import gsl.fit;
25 public import gsl.histogram;
26 public import gsl.integration;
27 public import gsl.interpolation;
28 public import gsl.linalg;
29 public import gsl.machine;
30 public import gsl.math;
31 public import gsl.matrix;
32 public import gsl.min;
33 public import gsl.minmax;
34 public import gsl.mode;
35 public import gsl.monte;
36 public import gsl.multifit;
37 public import gsl.multilarge;
38 public import gsl.multimin;
39 public import gsl.multiroots;
40 public import gsl.multiset;
41 public import gsl.nan;
42 public import gsl.ntuple;
43 public import gsl.odeiv2;
44 public import gsl.odeiv;
45 public import gsl.permutation;
46 public import gsl.poly;
47 public import gsl.pow_int;
48 public import gsl.precision;
49 public import gsl.qrng;
50 public import gsl.randist;
51 public import gsl.rng;
52 public import gsl.roots;
53 public import gsl.rstat;
54 public import gsl.siman;
55 public import gsl.sort;
56 public import gsl.spblas;
57 public import gsl.spmatrix;
58 public import gsl.statistics;
59 public import gsl.sum;
60 public import gsl.sys;
61 public import gsl.vector;
62 public import gsl.wavelet;
63 
64 
65 import std.math: pow, round;
66 T round_dp(T)(T x, int dp = 0){
67     T factor = pow(10, dp + 1);
68     x *= factor;
69     x += 1.;
70     x /= 10.;
71     factor /= 10.;
72     return round(x)/factor;
73 }
74 
75 
76 unittest
77 {
78 	import std.stdio : writefln;
79 	import gsl.randist : gsl_ran_gaussian_pdf;
80 	import gsl.cdf : gsl_cdf_gaussian_P;
81 	assert(round_dp(gsl_ran_gaussian_pdf (0 , 1.), 7) == 0.3989423);
82 	assert(gsl_cdf_gaussian_P (0 , 1.) == 0.5);
83 	assert(round_dp(gsl_cdf_gaussian_P (-1.96 , 1.), 7) == 0.0249979);
84 	assert(round_dp(gsl_cdf_gaussian_P (1.96, 1.), 7) == 0.9750021);
85 }
86 
87 unittest
88 {
89 	////
90 	import std.stdio : writefln;
91 	import std.range : iota, array;
92 	import gsl.statistics : gsl_stats_mean, gsl_stats_variance, gsl_stats_sd, gsl_stats_absdev;
93 	double[10] some_numbers = iota(1., 11., 1.).array();
94 	assert(round_dp(gsl_ran_gaussian_pdf (0 , 1.), 7) == 0.3989423);
95 	assert(gsl_stats_mean(some_numbers.ptr, 1, some_numbers.length) == 5.5);
96 	assert(round_dp(gsl_stats_sd(some_numbers.ptr, 1, some_numbers.length), 7) == 3.0276504);
97 	assert(round_dp(gsl_stats_variance(some_numbers.ptr, 1, some_numbers.length), 7) == 9.1666667);
98 	assert(gsl_stats_absdev(some_numbers.ptr, 1, some_numbers.length) == 2.5);
99 }
100 
101 /*
102 void main(){
103 	import std.range : iota, array;
104     import std.stdio : writeln;
105 
106     double[] x;
107     import gsl.randist : gsl_ran_gaussian_pdf;
108     import gsl.cdf : gsl_cdf_gaussian_P;
109     writeln("PDF, x = 0: ", gsl_ran_gaussian_pdf(0, 1));
110     writeln("CDF, x = 0: ", gsl_cdf_gaussian_P (0, 1));
111     writeln("CDF, x = -1.96: ", gsl_cdf_gaussian_P (-1.96, 1));
112     writeln("CDF, x = 1.96: ", gsl_cdf_gaussian_P (1.96, 1));
113 
114     import gsl.statistics : gsl_stats_mean, gsl_stats_variance, gsl_stats_sd, gsl_stats_absdev;
115     double[10] some_numbers = iota(1., 11., 1.).array();
116     writeln("\n", gsl_stats_mean(some_numbers.ptr, 1, some_numbers.length));
117     writeln(gsl_stats_sd(some_numbers.ptr, 1, some_numbers.length));
118     writeln(gsl_stats_variance(some_numbers.ptr, 1, some_numbers.length));
119     writeln(gsl_stats_absdev(some_numbers.ptr, 1, some_numbers.length));
120 }
121 */