File: test_loads.py

package info (click to toggle)
liac-arff 2.5.0-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 356 kB
  • sloc: python: 2,706; makefile: 126; sh: 23
file content (129 lines) | stat: -rw-r--r-- 2,880 bytes parent folder | download | duplicates (3)
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'], ['?']])