blob: 70efc25f3fb072a53bfa2a38e906cb4cd3e40757 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2016, 2019 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.r.core.data;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.Arrays;
import com.ibm.icu.lang.UCharacter;
import org.junit.Test;
import org.junit.internal.ArrayComparisonFailure;
import org.eclipse.statet.rj.data.RCharacterStore;
import org.eclipse.statet.rj.data.RComplexStore;
import org.eclipse.statet.rj.data.RIntegerStore;
import org.eclipse.statet.rj.data.RLogicalStore;
import org.eclipse.statet.rj.data.RNumericStore;
import org.eclipse.statet.rj.data.RRawStore;
import org.eclipse.statet.rj.data.RStore;
import org.eclipse.statet.rj.data.impl.DefaultRObjectFactory;
public class RValueFormatterValidatorTest {
private final RValueFormatter formatter= new RValueFormatter();
private final RValueValidator validator= new RValueValidator();
public RValueFormatterValidatorTest() {
}
@Test
public void reparse_01logi() {
final RLogicalStore store= DefaultRObjectFactory.INSTANCE.createLogiData(2);
store.setLogi(0, true);
store.setLogi(1, false);
for (int i= 0; i < store.getLength(); i++) {
try {
final String fString= this.formatter.format(store, i);
// this.formatter.clear();
// this.formatter.appendLogi(store.getNum(i));
// final String aString= this.formatter.getString();
final RStore<?> vData= this.validator.toRData(store, fString);
assertEquals(false, vData.isNA(0));
assertEquals(store.getLogi(i), vData.getLogi(0));
}
catch (final AssertionError e) {
throw new ArrayComparisonFailure("", e, i);
}
}
}
@Test
public void reparse_01logi_NA() {
final RLogicalStore store= DefaultRObjectFactory.INSTANCE.createLogiData(1);
store.setNA(0);
final String fString= this.formatter.format(store, 0);
this.formatter.clear();
this.formatter.appendNA();
final String aString= this.formatter.getString();
final RStore<?> vData= this.validator.toRData(store, fString);
assertEquals(true, vData.isNA(0));
assertEquals(fString, aString);
}
@Test
public void reparse_04int() {
final RIntegerStore store= DefaultRObjectFactory.INSTANCE.createIntData(new int[] {
0,
1,
-1,
0xFFFF,
Integer.MAX_VALUE,
Integer.MIN_VALUE + 1,
});
for (int i= 0; i < store.getLength(); i++) {
try {
final String fString= this.formatter.format(store, i);
// this.formatter.clear();
// this.formatter.appendInt(store.getNum(i));
// final String aString= this.formatter.getString();
final RStore<?> vData= this.validator.toRData(store, fString);
assertEquals(false, vData.isNA(0));
assertEquals(store.getNum(i), vData.getNum(0), 0);
// assertEquals(fString, aString);
}
catch (final AssertionError e) {
throw new ArrayComparisonFailure("", e, i);
}
}
}
@Test
public void reparse_02int_NA() {
final RIntegerStore store= DefaultRObjectFactory.INSTANCE.createIntData(1);
store.setNA(0);
final String fString= this.formatter.format(store, 0);
this.formatter.clear();
this.formatter.appendNA();
final String aString= this.formatter.getString();
final RStore<?> vData= this.validator.toRData(store, fString);
assertEquals(true, vData.isNA(0));
assertEquals(fString, aString);
}
@Test
public void reparse_03num() {
final RNumericStore store= DefaultRObjectFactory.INSTANCE.createNumData(new double[] {
0.0,
-0.0,
1.0,
1e15,
1e-15,
-1e+15,
-1e-15,
1234567890.0,
0.000000000000001,
1.0000000000000011,
1.0000000000000012,
1.0000000000000013,
4.0/3,
Double.MAX_VALUE,
Double.MIN_VALUE,
Double.POSITIVE_INFINITY,
Double.NEGATIVE_INFINITY,
Double.NaN,
});
for (int i= 0; i < store.getLength(); i++) {
try {
final String fString= this.formatter.format(store, i);
this.formatter.clear();
this.formatter.appendNum(store.getNum(i));
final String aString= this.formatter.getString();
final RStore<?> vData= this.validator.toRData(store, fString);
assertNotNull(vData);
assertEquals(false, vData.isNA(0));
assertEquals(store.getNum(i), vData.getNum(0), 0);
assertEquals(fString, aString);
}
catch (final AssertionError e) {
throw new ArrayComparisonFailure("", e, i);
}
}
}
@Test
public void reparse_03num_NA() {
final RNumericStore store= DefaultRObjectFactory.INSTANCE.createNumData(1);
store.setNA(0);
final String fString= this.formatter.format(store, 0);
this.formatter.clear();
this.formatter.appendNA();
final String aString= this.formatter.getString();
final RStore<?> vData= this.validator.toRData(store, fString);
assertEquals(true, vData.isNA(0));
assertEquals(fString, aString);
}
@Test
public void reparse_04num_NA() {
final RComplexStore store= DefaultRObjectFactory.INSTANCE.createCplxData(1);
store.setNA(0);
final String fString= this.formatter.format(store, 0);
this.formatter.clear();
this.formatter.appendNA();
final String aString= this.formatter.getString();
final RStore<?> vData= this.validator.toRData(store, fString);
assertEquals(true, vData.isNA(0));
assertEquals(fString, aString);
}
@Test
public void reparse_05chr() {
final char[] chars= new char[0xFFFF + 4];
Arrays.fill(chars, 'X');
chars[0]= 'X';
for (int i= 1; i < 0xFFFF; i++) {
if (UCharacter.isBMP(i)) {
chars[i]= (char) i;
}
else {
chars[i]= 'X';
}
}
chars[0xFFFF + 0]= '\uD834';
chars[0xFFFF + 1]= '\uDD73';
chars[0xFFFF + 2]= '\uD834';
chars[0xFFFF + 3]= '\uDD1E';
final String s= new String(chars);
final RCharacterStore store= DefaultRObjectFactory.INSTANCE.createCharData(1);
store.setChar(0, s);
final String fString= this.formatter.format(store, 0);
this.formatter.clear();
this.formatter.appendStringD(s);
final String aString= this.formatter.getString();
final RStore<?> vData= this.validator.toRData(DefaultRObjectFactory.CHR_STRUCT_DUMMY, fString);
assertEquals(false, vData.isNA(0));
assertEquals(s, vData.getChar(0));
assertEquals(fString, aString);
}
@Test
public void reparse_05chr_NA() {
final RCharacterStore store= DefaultRObjectFactory.INSTANCE.createCharData(1);
store.setNA(0);
final String fString= this.formatter.format(store, 0);
this.formatter.clear();
this.formatter.appendNA();
final String aString= this.formatter.getString();
final RStore<?> vData= this.validator.toRData(store, fString);
assertEquals(true, vData.isNA(0));
assertEquals(fString, aString);
}
@Test
public void reparse_06raw() {
final RRawStore store= DefaultRObjectFactory.INSTANCE.createRawData(1);
for (int i= 0; i <= 0xFF; i++) {
try {
final byte b= (byte) i;
store.setRaw(0, b);
final String fString= this.formatter.format(store, 0);
this.formatter.clear();
this.formatter.appendRaw(b);
final String aString= this.formatter.getString();
final RStore<?> vData= this.validator.toRData(DefaultRObjectFactory.RAW_STRUCT_DUMMY, fString);
assertEquals(false, vData.isNA(0));
assertEquals(b, vData.getRaw(0));
assertEquals(fString, aString);
}
catch (final AssertionError e) {
throw new ArrayComparisonFailure("", e, i);
}
}
}
}