File: test_array.py

package info (click to toggle)
rpy 0.4.1-4
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 3,988 kB
  • ctags: 14,206
  • sloc: ansic: 15,392; python: 977; makefile: 406; sh: 28
file content (62 lines) | stat: -rw-r--r-- 1,931 bytes parent folder | download
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
from __future__ import nested_scopes

import unittest
import sys
sys.path.insert(1, "..")
from rpy import *

idx = r['[[']
idx.autoconvert(1)

def to_r(obj):
    r.list.autoconvert(0)
    idx.autoconvert(0)
    o = idx(r.list(obj),1)
    idx.autoconvert(1)
    return o

class ArrayTestCase(unittest.TestCase):

    def setUp(self):
        self.py = [[[0,6,12,18],[2,8,14,20],[4,10,16,22]],
                   [[1,7,13,19],[3,9,15,21],[5,11,17,23]]]
        set_default_mode(NO_DEFAULT)
        try:
            r.array.autoconvert(0)
            self.ra = r.array(range(24),dim=(2,3,4))
        finally:
            r.array.autoconvert(1)

    def testConversionToPy(self):
        self.failUnless(self.py == self.ra.as_py(),
                        'wrong conversion to Python')

    def testConversionToR(self):
        py_c = to_r(self.py)
        self.failUnless(r.all_equal(self.ra, py_c),
                        'R array not equal')
        
    def testDimensions(self):
        self.failUnless(r.dim(self.ra) == [len(self.py), len(self.py[0]),
                                           len(self.py[0][0])],
                        'wrong dimensions')

    def testElements(self):
        self.failUnless(self.py[0][0][0] == idx(self.ra, 1,1,1) and
                        self.py[1][2][3] == idx(self.ra, 2,3,4) and
                        self.py[1][1][2] == idx(self.ra, 2,2,3) and
                        self.py[1][0][3] == idx(self.ra, 2,1,4),
                        'Numeric array not equal')

    def testPyOutOfBounds(self):
        self.failUnlessRaises(IndexError, lambda: self.py[5][5][5])
                           
    def testROutOfBounds(self):
        self.failUnlessRaises(RException, lambda: idx(self.ra, 5,5,5))

    def testBigArray(self):
        a = r.array(range(100000), dim=(100,1000))
        self.failUnless(a[10][10] and a[80][900])
        
if __name__ == '__main__':
    unittest.main()