6079d98e72d20c1bcc419fb58fae650aca78c744
[scilab.git] / scilab / modules / api_scilab / tests / unit_tests / api_c / double_test.c
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
4 *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13 *
14 */
15
16 #include "api_scilab.h"
17 #include "Scierror.h"
18 #include "localization.h"
19 #include "sciprint.h"
20 #include "sci_malloc.h"
21
22 const char fname[] = "double_test";
23
24 int sci_double_test(scilabEnv env, int nin, scilabVar* in, int nopt, scilabOpt opt, int nout, scilabVar* out)
25 {
26     int i = 0;
27     int inr1 = 0;
28     int inc1 = 0;
29     int size1 = 0;
30     double* in1 = NULL;
31
32     double in2 = 0;
33
34     double* out1 = NULL;
35
36     int* out2dims = NULL;
37     double* out2 = NULL;
38
39     double out3 = 0;
40
41     if (nin != 2)
42     {
43         Scierror(999, _("%s: Wrong number of input arguments: %d expected.\n"), fname, 2);
44         return STATUS_ERROR;
45     }
46
47     if (nout != 3)
48     {
49         Scierror(999, _("%s: Wrong number of output arguments: %d expected.\n"), fname, 3);
50         return STATUS_ERROR;
51     }
52
53     //in[0] : matrix 2d of double
54     if (scilab_isDouble(env, in[0]) == 0 || scilab_isMatrix2d(env, in[0]) == 0)
55     {
56         Scierror(999, _("%s: Wrong type for input argument #%d: A double matrix expected.\n"), fname, 1);
57         return STATUS_ERROR;
58     }
59
60     size1 = scilab_getDim2d(env, in[0], &inr1, &inc1);
61     scilab_getDoubleArray(env, in[0], &in1);
62
63     //in[1] : double
64     if (scilab_isDouble(env, in[1]) == 0 || scilab_isScalar(env, in[1]) == 0)
65     {
66         Scierror(999, _("%s: Wrong type for input argument #%d: A double expected.\n"), fname, 2);
67         return STATUS_ERROR;
68     }
69
70     scilab_getDouble(env, in[1], &in2);
71
72     //out1 : matrix 2d of double with same size of in[0]
73     out[0] = scilab_createDoubleMatrix2d(env, inr1, inc1, 0);
74     scilab_getDoubleArray(env, out[0], &out1);
75
76     for (i = 0; i < size1; ++i)
77     {
78         out1[i] = in1[i] * 10;
79     }
80
81     //out2 : 3d matrix of double
82     out2dims = (int*)MALLOC(3 * sizeof(int));
83     out2dims[0] = inr1;
84     out2dims[1] = inc1;
85     out2dims[2] = 2;
86
87     out[1] = scilab_createDoubleMatrix(env, 3, out2dims, 0);
88     scilab_getDoubleArray(env, out[1], &out2);
89
90     for (i = 0; i < size1; ++i)
91     {
92         out2[i] = in1[i] * 10;
93         out2[i + size1] = in1[i] * 100;
94     }
95
96     //out3 : double
97     out[2] = scilab_createDouble(env, in2 * 1000);
98     return STATUS_OK;
99 }