blob: fca5e217fb7145c1a073b51005046f739ff2a89d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.samoa.instances;
import org.apache.samoa.instances.ArffLoader;
import org.apache.samoa.instances.Instance;
import org.apache.samoa.instances.InstanceInformation;
import org.junit.Before;
import org.junit.Test;
import java.io.StringReader;
import static org.junit.Assert.assertEquals;
public class ArffLoaderTest {
private ArffLoader loader;
private StringReader reader;
@Before
public void setUp() {
String inputString = "@relation test.txt\n"
+ "\n"
+ "@attribute Dur numeric\n"
+ "@attribute Proto {udp,tcp,icmp,arp,ipx/spx,ipv6-icmp,pim,esp,igmp,rtcp,rtp,ipv6,udt}\n"
+ "@attribute Dir {' <->',' <?>',' ->',' ?>',' who',' <-',' <?'}\n"
+ "@attribute State {CON,PA_PA,PA_FRA, ...}\n"
+ "@attribute sTos numeric\n"
+ "@attribute dTos numeric\n"
+ "@attribute TotPkts numeric\n"
+ "@attribute TotBytes numeric\n"
+ "@attribute SrcBytes numeric\n"
+ "@attribute class {Background,Normal,Botnet}\n"
+ "\n"
+ "@data\n"
+ "\n"
+ "1065.731934,udp,' <->',...,0,0,2,252,145,Background\n"
+ "1471.787109,udp,' <->',CON,0,0,2,252,145,Background";
reader = new StringReader(inputString);
int size = 0;
int classAttribute = 10;
loader = new ArffLoader(reader, size, classAttribute);
}
@Test
public void testGetHeader() {
InstanceInformation header = loader.getStructure();
assertEquals(10, header.numAttributes());
assertEquals(9, header.classIndex());
assertEquals(true, header.attribute(0).isNumeric());
assertEquals(false, header.attribute(1).isNumeric());
assertEquals(false, header.attribute(2).isNumeric());
assertEquals(false, header.attribute(3).isNumeric());
assertEquals(true, header.attribute(4).isNumeric());
assertEquals(true, header.attribute(5).isNumeric());
assertEquals(true, header.attribute(6).isNumeric());
assertEquals(true, header.attribute(7).isNumeric());
assertEquals(true, header.attribute(8).isNumeric());
assertEquals(false, header.attribute(9).isNumeric());
assertEquals(7, header.attribute(2).numValues());
assertEquals(" <->", header.attribute(2).value(0));
assertEquals(" <?>", header.attribute(2).value(1));
assertEquals(" ->", header.attribute(2).value(2));
assertEquals(" ?>", header.attribute(2).value(3));
assertEquals(" who", header.attribute(2).value(4));
assertEquals(" <-", header.attribute(2).value(5));
assertEquals(" <?", header.attribute(2).value(6));
assertEquals(3, header.attribute(9).numValues());
assertEquals("Background", header.attribute(9).value(0));
assertEquals("Normal", header.attribute(9).value(1));
assertEquals("Botnet", header.attribute(9).value(2));
}
@Test
public void testReadInstance() {
Instance instance = loader.readInstance(reader);
assertEquals(1065.731934, instance.value(0), 0);
assertEquals(0, instance.value(1), 0);
assertEquals(0, instance.value(2), 0);
assertEquals(3, instance.value(3), 0);
assertEquals(0, instance.value(4), 0);
assertEquals(0, instance.value(5), 0);
assertEquals(2, instance.value(6), 0);
assertEquals(252, instance.value(7), 0);
assertEquals(145, instance.value(8), 0);
assertEquals(0, instance.value(9), 0);
}
}