1
+ using Xunit ;
2
+
3
+ namespace RDotNet
4
+ {
5
+ public class CharacterMatrixTest : RDotNetTestFixture
6
+ {
7
+ [ Fact ]
8
+ public void TestCharacter ( )
9
+ {
10
+ SetUpTest ( ) ;
11
+ var engine = this . Engine ;
12
+ var matrix = engine . Evaluate ( "x <- matrix(c(1, NA, 2, 3, NA, 4), nrow=3, ncol=2, byrow=TRUE)" ) . AsCharacterMatrix ( ) ;
13
+ Assert . Equal ( 3 , matrix . RowCount ) ;
14
+ Assert . Equal ( 2 , matrix . ColumnCount ) ;
15
+ Assert . Equal ( "1" , matrix [ 0 , 0 ] ) ;
16
+ Assert . Null ( matrix [ 0 , 1 ] ) ;
17
+ Assert . Equal ( "2" , matrix [ 1 , 0 ] ) ;
18
+ Assert . Equal ( "3" , matrix [ 1 , 1 ] ) ;
19
+ Assert . Null ( matrix [ 2 , 0 ] ) ;
20
+ Assert . Equal ( "4" , matrix [ 2 , 1 ] ) ;
21
+
22
+ matrix [ 0 , 0 ] = null ;
23
+ matrix [ 0 , 1 ] = "A" ;
24
+ Assert . Null ( matrix [ 0 , 0 ] ) ;
25
+ Assert . Equal ( "A" , matrix [ 0 , 1 ] ) ;
26
+
27
+ var logical = engine . Evaluate ( "is.na(x)" ) . AsLogical ( ) ; // This gets strung out as col1 + col2
28
+ // The original x was never modified, just our copy of it did. So the logical should reflect the
29
+ // original value of x.
30
+ Assert . False ( logical [ 0 ] ) ; // 1
31
+ Assert . False ( logical [ 1 ] ) ; // 2
32
+ Assert . True ( logical [ 2 ] ) ; // NA
33
+ Assert . True ( logical [ 3 ] ) ; // NA
34
+ Assert . False ( logical [ 4 ] ) ; // 3
35
+ Assert . False ( logical [ 5 ] ) ; // 4
36
+ }
37
+
38
+ [ Fact ]
39
+ public void TestCharacter_NoConversion ( )
40
+ {
41
+ SetUpTest ( ) ;
42
+ var engine = this . Engine ;
43
+ var matrix = engine . Evaluate ( "x <- matrix(c('1', NA, '2', '3', NA, '4'), nrow=3, ncol=2, byrow=TRUE)" ) . AsCharacterMatrix ( ) ;
44
+ Assert . Equal ( 3 , matrix . RowCount ) ;
45
+ Assert . Equal ( 2 , matrix . ColumnCount ) ;
46
+ Assert . Equal ( "1" , matrix [ 0 , 0 ] ) ;
47
+ Assert . Null ( matrix [ 0 , 1 ] ) ;
48
+ Assert . Equal ( "2" , matrix [ 1 , 0 ] ) ;
49
+ Assert . Equal ( "3" , matrix [ 1 , 1 ] ) ;
50
+ Assert . Null ( matrix [ 2 , 0 ] ) ;
51
+ Assert . Equal ( "4" , matrix [ 2 , 1 ] ) ;
52
+
53
+ matrix [ 0 , 0 ] = null ;
54
+ matrix [ 0 , 1 ] = "A" ;
55
+ Assert . Null ( matrix [ 0 , 0 ] ) ;
56
+ Assert . Equal ( "A" , matrix [ 0 , 1 ] ) ;
57
+
58
+ var logical = engine . Evaluate ( "is.na(x)" ) . AsLogical ( ) ;
59
+ Assert . True ( logical [ 0 ] ) ; // Was 1, now NA because we modified the original x
60
+ Assert . False ( logical [ 1 ] ) ; // 2
61
+ Assert . True ( logical [ 2 ] ) ; // NA
62
+ Assert . False ( logical [ 3 ] ) ; // "A"
63
+ Assert . False ( logical [ 4 ] ) ; // 3
64
+ Assert . False ( logical [ 5 ] ) ; // 4
65
+ }
66
+ }
67
+ }
0 commit comments