1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
import unittest
import arff
try:
from StringIO import StringIO
except ImportError:
from io import StringIO
ARFF = '''% XOR Dataset
@RELATION XOR
@ATTRIBUTE input1 REAL
@ATTRIBUTE input2 REAL
@ATTRIBUTE y REAL
@DATA
0.0,0.0,0.0
0.0,1.0,1.0
1.0,0.0,1.0
1.0,1.0,0.0
%
%
% '''
ARFF_FORMAT_CORRECT = '''\
@relation "software metric"
@attribute number_of_files numeric
@attribute "lines of code" numeric
@attribute 'defect density' numeric
@data 10,10,10
'''
SPARSE_ARFF = '''% XOR Dataset
@RELATION XOR
@ATTRIBUTE input1 REAL
@ATTRIBUTE input2 REAL
@ATTRIBUTE y REAL
@DATA
{0 0}
{1 1.0, 2 1.0}
{0 1.0, 2 1.0}
{0 1.0, 1 1.0}
'''
class TestLoads(unittest.TestCase):
def get_loads(self):
load = arff.loads
return load
def test_simple(self):
loads = self.get_loads()
obj = loads(ARFF)
self.assertEqual(obj['description'], u'XOR Dataset')
self.assertEqual(obj['relation'], u'XOR')
self.assertEqual(obj['attributes'][0][0], u'input1')
self.assertEqual(obj['attributes'][0][1], u'REAL')
self.assertEqual(obj['data'][0][0], 0.0)
self.assertEqual(obj['data'][0][1], 0.0)
self.assertEqual(obj['data'][0][2], 0.0)
def test_format_correct(self):
loads = self.get_loads()
obj = loads(ARFF_FORMAT_CORRECT)
self.assertEqual(obj['attributes'][0][0], u'number_of_files')
self.assertEqual(obj['attributes'][1][0], u'lines of code')
self.assertEqual(obj['attributes'][2][0], u'defect density')
self.assertEqual(obj['relation'], u'software metric')
def test_format_error_relation(self):
fixture = '''\
@relation software metric
@attribute number_of_files numeric
@attribute "lines of code" numeric
@attribute 'defect density' numeric
@data 10,10,10
'''
loads = self.get_loads()
fixture = u'@ATTRIBUTE {name NUMERIC'
self.assertRaises(arff.BadLayout, loads, fixture)
def test_format_error_attribute(self):
fixture = '''\
@relation "software metric"
@attribute #_of_files numeric
@attribute lines of code numeric
@attribute defect density numeric
@data 10,10,10
'''
loads = self.get_loads()
fixture = u'@ATTRIBUTE {name NUMERIC'
self.assertRaises(arff.BadLayout, loads, fixture)
def test_sparse_input(self):
loads = self.get_loads()
obj = loads(ARFF)
sparse_obj = loads(SPARSE_ARFF)
self.assertEqual(obj['data'], sparse_obj['data'])
def test_quoted_null(self):
ARFF_WITH_NULL = '''% XOR Dataset
@RELATION XOR
@attribute 'bc' {'?','Y'}
@DATA
'Y'
'?'
'Y'
'?'
%
%
% '''
loads = self.get_loads()
obj = loads(ARFF_WITH_NULL)
self.assertEqual(obj['data'], [['Y'], ['?'], ['Y'], ['?']])
|