Javasci: slightly simplify the way to create a sparse or a boolean sparse matrix
[scilab.git] / scilab / modules / javasci / tests / java / org / scilab / tests / modules / javasci / testReadWrite.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - DIGITEO - Sylvestre LEDRU
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12 package org.scilab.tests.modules.javasci;
13
14 import org.testng.annotations.*;
15
16 import java.util.Arrays;
17 import java.util.Map;
18
19 import org.scilab.modules.javasci.Scilab;
20 import org.scilab.modules.javasci.JavasciException;
21 import org.scilab.modules.javasci.JavasciException.InitializationException;
22 import org.scilab.modules.javasci.JavasciException.UnsupportedTypeException;
23 import org.scilab.modules.javasci.JavasciException.UndefinedVariableException;
24 import org.scilab.modules.types.ScilabType;
25 import org.scilab.modules.types.ScilabDouble;
26 import org.scilab.modules.types.ScilabBoolean;
27 import org.scilab.modules.types.ScilabMList;
28 import org.scilab.modules.types.ScilabString;
29 import org.scilab.modules.types.ScilabSparse;
30 import org.scilab.modules.types.ScilabTypeEnum;
31
32 public class testReadWrite {
33     private Scilab sci;
34
35     /* 
36      * This method will be called for each test.
37      * with @AfterMethod, this ensures that all the time the engine is closed
38      * especially in case of error.
39      * Otherwise, the engine might be still running and all subsequent tests
40      * would fail.
41      */ 
42     @BeforeMethod
43     public void open() throws NullPointerException, JavasciException {
44         sci = new Scilab();
45         assert sci.open() == true;
46     }
47
48     @Test(sequential = true) 
49     public void putAndGetDoubleTest() throws NullPointerException, JavasciException {
50         double [][]a={{21.2, 22.0, 42.0, 39.0},{23.2, 24.0, 44.0, 40.0}};
51         ScilabDouble aOriginal = new ScilabDouble(a);
52         sci.put("a",aOriginal);
53         assert sci.exec("somme = sum(a);") == true;
54
55         ScilabDouble aFromScilab = (ScilabDouble)sci.get("a");
56
57         assert aFromScilab.equals(aOriginal);
58     }
59
60     @Test(sequential = true) 
61     public void putAndGetComplexDoubleTest() throws NullPointerException, JavasciException {
62         double [][]a={{21.2, 22.0, 42.0, 39.0},{23.2, 24.0, 44.0, 40.0}};
63         double [][]aImg={{212.2, 221.0, 423.0, 393.0},{234.2, 244.0, 441.0, 407.0}};
64
65         ScilabDouble aOriginal = new ScilabDouble(a, aImg);
66         sci.put("a",aOriginal);
67
68         ScilabDouble aFromScilab = (ScilabDouble)sci.get("a");
69
70         assert aFromScilab.equals(aOriginal);
71     }
72
73
74
75     @Test(sequential = true) 
76     public void putAndGetBooleanTest() throws NullPointerException, JavasciException {
77         boolean [][]a={{true, true, false, false},{true, false, true, false}};
78         ScilabBoolean aOriginal = new ScilabBoolean(a);
79         sci.put("a",aOriginal);
80
81         ScilabBoolean aFromScilab = (ScilabBoolean)sci.get("a");
82
83         assert aFromScilab.equals(aOriginal);
84     }
85
86     @Test(sequential = true) 
87     public void putAndGetStringTest() throws NullPointerException, JavasciException {
88         String [][]a={{"String1", "String2", "String3", "String4"},
89                       {"String5", "String6", "My String 7", "String8"}};
90         ScilabString aOriginal = new ScilabString(a);
91         sci.put("a",aOriginal);
92
93         assert sci.exec("checksize = and(size(a)==[2,4]);") == true;
94
95         ScilabBoolean checksize = (ScilabBoolean)sci.get("checksize");
96         assert checksize.getData()[0][0] == true;
97
98         ScilabString aFromScilab = (ScilabString)sci.get("a");
99
100         assert aFromScilab.equals(aOriginal);
101     }
102
103 //    @Test(sequential = true, expectedExceptions = UnsupportedTypeException.class)
104     @Test(sequential = true)
105     public void ReadSparseTypeTest() throws NullPointerException, JavasciException {
106         assert sci.exec("W=sparse([1,2;4,5;3,10],[1,2,3]);") == true;
107         assert sci.getVariableType("W") == ScilabTypeEnum.sci_sparse;
108         ScilabSparse aFromScilab = (ScilabSparse)sci.get("W");
109         assert aFromScilab.toString().equals("sparse([1, 2 ; 3, 10 ; 4, 5], [1.0 ; 3.0 ; 2.0], [4, 10])");
110         assert sci.exec("AZE= "+aFromScilab.toString());
111         ScilabSparse aFromScilab2 = (ScilabSparse)sci.get("AZE");
112
113                 assert Arrays.deepEquals(aFromScilab.getFullRealPart(), aFromScilab2.getFullRealPart()) == true;
114
115                 ScilabSparse mySparse = new ScilabSparse(100, 100, 5, new int[] { 1, 1, 1, 1, 1}, new int[]{ 1, 25, 50, 75, 99}, new double[] { 1.0, 2.0, 3.0, 4.0, 5.0});
116         // sci.put with a sparse is not yet functionnal
117 //        assert sci.put("mySparse", mySparse) == true;
118 //        String ref="mySparseRef = sparse([1, 2 ; 2, 26 ; 3, 51 ; 4, 76 ; 5, 100], [1.0 ; 2.0 ; 3.0 ; 4.0 ; 5.0], [100, 100]);";
119 //        sci.exec("isEqual=(mySparseRef==mySparse)");
120 //        ScilabBoolean isEqual = (ScilabBoolean)sci.get("isEqual");
121 //        System.out.println("isequal " +isEqual);
122
123         
124     }
125
126     @Test(sequential = true)
127     public void ReadStructTest() throws NullPointerException, JavasciException {
128         assert sci.exec("myDate=struct('day',25,'month' ,'DEC','year',2006)") == true;
129         assert sci.getVariableType("myDate") == ScilabTypeEnum.sci_mlist;
130
131         ScilabMList myDate = (ScilabMList)sci.get("myDate");
132         assert myDate.toString().equals("mlist([\"st\", \"dims\", \"day\", \"month\", \"year\"], int32([1, 1]), [25.0], [\"DEC\"], [2006.0])");
133         assert myDate.getHeight() == 1;
134         assert myDate.getWidth() == 5;
135         assert myDate.getVarName().equals("myDate");
136         assert myDate.getMListType().equals("st");
137         Map<String, ScilabType> listFields = myDate.getMListFields();
138         ScilabString month = (ScilabString)listFields.get("month");
139         assert month.getData()[0][0].equals("DEC");
140         ScilabDouble year = (ScilabDouble)listFields.get("year");
141         assert year.getRealPart()[0][0] == 2006.0;
142         ScilabDouble day = (ScilabDouble)listFields.get("day");
143         assert day.getRealPart()[0][0] == 25.0;
144
145     }
146
147     @Test(sequential = true, expectedExceptions = UndefinedVariableException.class)
148     public void UndefinedVariableExceptionTest() throws NullPointerException, JavasciException {
149         sci.get("undefinedVar"); /* Will launch an UnsupportedTypeException exception */
150     }
151
152     /**
153      * See #open()
154      */
155     @AfterMethod
156     public void close() {
157         sci.close();
158         
159     }
160 }