api_scilab tests: fix memory errors
[scilab.git] / scilab / modules / api_scilab / tests / unit_tests / api_c / int_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
21 const char fname[] = "int_test";
22
23 int sci_int_test(scilabEnv env, int nin, scilabVar* in, int nopt, scilabOpt opt, int nout, scilabVar* out)
24 {
25     int i = 0;
26     int inr1 = 0;
27     int inc1 = 0;
28     int size1 = 0;
29     int* in1 = NULL;
30
31     int in2 = 0;
32
33     int* out1 = NULL;
34     int* out2 = NULL;
35
36     int out3 = 0;
37
38     if (nin != 2)
39     {
40         Scierror(999, _("%s: Wrong number of input arguments: %d expected.\n"), fname, 2);
41         return STATUS_ERROR;
42     }
43
44     if (nout != 3)
45     {
46         Scierror(999, _("%s: Wrong number of output arguments: %d expected.\n"), fname, 3);
47         return STATUS_ERROR;
48     }
49
50     //in[0] : matrix 2d of int32
51     if (scilab_isInt32(env, in[0]) == 0 || scilab_isMatrix2d(env, in[0]) == 0)
52     {
53         Scierror(999, _("%s: Wrong type for input argument #%d: A int32 matrix expected.\n"), fname, 1);
54         return STATUS_ERROR;
55     }
56
57     size1 = scilab_getDim2d(env, in[0], &inr1, &inc1);
58     scilab_getInteger32Array(env, in[0], &in1);
59
60     //in[1] : int
61     if (scilab_isInt32(env, in[1]) == 0 || scilab_isScalar(env, in[1]) == 0)
62     {
63         Scierror(999, _("%s: Wrong type for input argument #%d: A int32 expected.\n"), fname, 2);
64         return STATUS_ERROR;
65     }
66
67     scilab_getInteger32(env, in[1], &in2);
68
69     //out1 : matrix 2d of int with same size of in[0]
70     out[0] = scilab_createInteger32Matrix2d(env, inr1, inc1);
71     scilab_getInteger32Array(env, out[0], &out1);
72
73     for (i = 0; i < size1; ++i)
74     {
75         out1[i] = in1[i] * 10;
76     }
77
78     //out2 : 3d matrix of int
79     int out2dims[3] = {inr1, inc1, 2};
80
81     out[1] = scilab_createInteger32Matrix(env, 3, out2dims);
82     scilab_getInteger32Array(env, out[1], &out2);
83
84     for (i = 0; i < size1; ++i)
85     {
86         out2[i] = in1[i] * 10;
87         out2[i + size1] = in1[i] * 100;
88     }
89
90     //out3 : int
91     out[2] = scilab_createInteger32(env, in2 * 1000);
92     return STATUS_OK;
93 }