/rpy/rinterface/tests/test_SexpVector.py

https://bitbucket.org/lgautier/rpy2/ · Python · 638 lines · 522 code · 114 blank · 2 comment · 23 complexity · 4cf7011584b5406e8478beb81237a929 MD5 · raw file

  1. import unittest
  2. import sys, struct
  3. import rpy2.rinterface as ri
  4. ri.initr()
  5. def evalr(string):
  6. res = ri.parse(string)
  7. res = ri.baseenv["eval"](res)
  8. return res
  9. def floatEqual(x, y, epsilon = 0.00000001):
  10. return abs(x - y) < epsilon
  11. IS_PYTHON3 = sys.version_info[0] == 3
  12. class WrapperSexpVectorTestCase(unittest.TestCase):
  13. def testInt(self):
  14. sexp = ri.IntSexpVector([1, ])
  15. isInteger = ri.globalenv.get("is.integer")
  16. ok = isInteger(sexp)[0]
  17. self.assertTrue(ok)
  18. def testFloat(self):
  19. sexp = ri.IntSexpVector([1.0, ])
  20. isNumeric = ri.globalenv.get("is.numeric")
  21. ok = isNumeric(sexp)[0]
  22. self.assertTrue(ok)
  23. def testStr(self):
  24. sexp = ri.StrSexpVector(["a", ])
  25. isStr = ri.globalenv.get("is.character")
  26. ok = isStr(sexp)[0]
  27. self.assertTrue(ok)
  28. def testBool(self):
  29. sexp = ri.BoolSexpVector([True, ])
  30. isBool = ri.globalenv.get("is.logical")
  31. ok = isBool(sexp)[0]
  32. self.assertTrue(ok)
  33. def testComplex(self):
  34. sexp = ri.ComplexSexpVector([1+2j, ])
  35. is_complex = ri.globalenv.get("is.complex")
  36. ok = is_complex(sexp)[0]
  37. self.assertTrue(ok)
  38. def testByte(self):
  39. if IS_PYTHON3:
  40. seq = (b'a', b'b')
  41. else:
  42. seq = ('a', 'b')
  43. sexp = ri.ByteSexpVector(seq)
  44. is_raw = ri.globalenv.get("is.raw")
  45. ok = is_raw(sexp)[0]
  46. self.assertTrue(ok)
  47. class NAValuesTestCase(unittest.TestCase):
  48. def testRtoNAInteger(self):
  49. na_int = ri.NAIntegerType()
  50. r_na_int = evalr("NA_integer_")[0]
  51. self.assertTrue(r_na_int is na_int)
  52. def testNAIntegertoR(self):
  53. na_int = ri.NAIntegerType()
  54. self.assertEqual(True, ri.baseenv["is.na"](na_int)[0])
  55. def testNAIntegerBinaryfunc(self):
  56. na_int = ri.NAIntegerType()
  57. self.assertTrue((na_int + 2) is na_int)
  58. def testNAIntegerInVector(self):
  59. na_int = ri.NAIntegerType()
  60. x = ri.IntSexpVector((1, na_int, 2))
  61. self.assertTrue(x[1] is na_int)
  62. self.assertEqual(1, x[0])
  63. self.assertEqual(2, x[2])
  64. def testNAIntegerRepr(self):
  65. na_int = ri.NAIntegerType()
  66. self.assertEqual("NA_integer_", repr(na_int))
  67. def testRtoNALogical(self):
  68. na_lgl = ri.NALogicalType()
  69. r_na_lgl = evalr("NA")[0]
  70. self.assertTrue(r_na_lgl is na_lgl)
  71. def testNALogicaltoR(self):
  72. na_lgl = ri.NALogicalType()
  73. self.assertEqual(True, ri.baseenv["is.na"](na_lgl)[0])
  74. def testNALogicalInVector(self):
  75. na_bool = ri.NALogicalType()
  76. x = ri.BoolSexpVector((True, na_bool, False))
  77. self.assertTrue(x[1] is na_bool)
  78. self.assertEqual(True, x[0])
  79. self.assertEqual(False, x[2])
  80. def testNAIntegerRepr(self):
  81. na_bool = ri.NALogicalType()
  82. self.assertEqual("NA", repr(na_bool))
  83. def testRtoNAReal(self):
  84. na_real = ri.NARealType()
  85. r_na_real = evalr("NA_real_")[0]
  86. self.assertTrue(r_na_real is na_real)
  87. def testNARealtoR(self):
  88. na_real = ri.NARealType()
  89. self.assertEqual(True, ri.baseenv["is.na"](na_real)[0])
  90. def testNARealBinaryfunc(self):
  91. na_real = ri.NARealType()
  92. self.assertTrue((na_real + 2.0) is na_real)
  93. def testNARealInVector(self):
  94. na_float = ri.NARealType()
  95. x = ri.FloatSexpVector((1.1, na_float, 2.2))
  96. self.assertTrue(x[1] is na_float)
  97. self.assertEqual(1.1, x[0])
  98. self.assertEqual(2.2, x[2])
  99. def testNARealRepr(self):
  100. na_float = ri.NARealType()
  101. self.assertEqual("NA_real_", repr(na_float))
  102. def testRtoNACharacter(self):
  103. na_character = ri.NACharacterType()
  104. r_na_character = evalr("NA_character_")[0]
  105. self.assertTrue(r_na_character is na_character)
  106. def testNACharactertoR(self):
  107. na_character = ri.NACharacterType()
  108. self.assertEqual(True, ri.baseenv["is.na"](ri.StrSexpVector((na_character, )))[0])
  109. def testNACharacterInVector(self):
  110. na_str = ri.NACharacterType()
  111. x = ri.StrSexpVector(("ab", na_str, "cd"))
  112. self.assertTrue(x[1] is na_str)
  113. self.assertEqual("ab", x[0])
  114. self.assertEqual("cd", x[2])
  115. def testNACharacterRepr(self):
  116. na_str = ri.NACharacterType()
  117. self.assertEqual("NA_character_", repr(na_str))
  118. class IntSexpVectorTestCase(unittest.TestCase):
  119. def testInitFromSeq(self):
  120. seq = range(3)
  121. v = ri.IntSexpVector(seq)
  122. self.assertEqual(3, len(v))
  123. for x,y in zip(seq, v):
  124. self.assertEqual(x, y)
  125. def testInitFromIter(self):
  126. it = xrange(3)
  127. v = ri.IntSexpVector(it)
  128. self.assertEqual(3, len(v))
  129. for x,y in zip(xrange(3), v):
  130. self.assertEqual(x, y)
  131. def testInitFromSeqInvalidInt(self):
  132. seq = (1, 'b', 3)
  133. self.assertRaises(ValueError, ri.IntSexpVector, seq)
  134. def testInitFromSeqInvalidOverflow(self):
  135. v = ri.IntSexpVector((ri.R_LEN_T_MAX-1, ri.R_LEN_T_MAX))
  136. self.assertEqual(ri.R_LEN_T_MAX-1, v[0])
  137. self.assertEqual(ri.R_LEN_T_MAX, v[1])
  138. # check 64-bit architecture
  139. if struct.calcsize("P") >= 8:
  140. self.assertRaises(OverflowError,
  141. ri.IntSexpVector, (ri.R_LEN_T_MAX+1, ))
  142. class FloatSexpVectorTestCase(unittest.TestCase):
  143. def testInitFromSeq(self):
  144. seq = (1.0, 2.0, 3.0)
  145. v = ri.FloatSexpVector(seq)
  146. self.assertEqual(3, len(v))
  147. for x,y in zip(seq, v):
  148. self.assertEqual(x, y)
  149. def testInitFromIter(self):
  150. it = xrange(10)
  151. v = ri.FloatSexpVector(it)
  152. self.assertEqual(10, len(v))
  153. for x,y in zip(xrange(10), v):
  154. self.assertEqual(x, y)
  155. def testInitFromSeqInvalidFloat(self):
  156. seq = (1.0, 'b', 3.0)
  157. self.assertRaises(ValueError, ri.FloatSexpVector, seq)
  158. class ByteSexpVectorTestCase(unittest.TestCase):
  159. def testInitFromBytes(self):
  160. if IS_PYTHON3:
  161. seq = (b'a', b'b', b'c')
  162. else:
  163. seq = 'abc'
  164. v = ri.ByteSexpVector(seq)
  165. self.assertEqual(3, len(v))
  166. for x,y in zip(seq, v):
  167. self.assertEqual(x, y)
  168. def testInitFromSeqOfBytes(self):
  169. if IS_PYTHON3:
  170. seq = (b'a', b'b', b'c')
  171. else:
  172. seq = ('a', 'b', 'c')
  173. v = ri.ByteSexpVector(seq)
  174. self.assertEqual(3, len(v))
  175. for x,y in zip(seq, v):
  176. self.assertEqual(x, y)
  177. def testInitFromSeqInvalidByte(self):
  178. if IS_PYTHON3:
  179. seq = (b'a', 2, b'c')
  180. else:
  181. seq = ('a', 2, 'c')
  182. self.assertRaises(ValueError, ri.ByteSexpVector, seq)
  183. class SexpVectorTestCase(unittest.TestCase):
  184. def testMissinfType(self):
  185. self.assertRaises(ValueError, ri.SexpVector, [2, ])
  186. def testDel(self):
  187. v = ri.IntSexpVector(range(10))
  188. self.assertRaises(TypeError, v.__delitem__, 3)
  189. #FIXME: end and initializing again causes currently a lot a trouble...
  190. def testNewWithoutInit(self):
  191. if sys.version_info[0] == 2 and sys.version_info[1] < 6:
  192. self.assertTrue(False) # cannot be tested with Python < 2.6
  193. return None
  194. import multiprocessing
  195. def foo(queue):
  196. import rpy2.rinterface as rinterface
  197. rinterface.endr(1)
  198. try:
  199. tmp = ri.SexpVector([1,2], ri.INTSXP)
  200. res = (False, None)
  201. except RuntimeError, re:
  202. res = (True, re)
  203. except Exception, e:
  204. res = (False, e)
  205. queue.put(res)
  206. q = multiprocessing.Queue()
  207. p = multiprocessing.Process(target = foo, args = (q,))
  208. p.start()
  209. res = q.get()
  210. p.join()
  211. self.assertTrue(res[0])
  212. def testNewBool(self):
  213. sexp = ri.SexpVector([True, ], ri.LGLSXP)
  214. isLogical = ri.globalenv.get("is.logical")
  215. ok = isLogical(sexp)[0]
  216. self.assertTrue(ok)
  217. self.assertTrue(sexp[0])
  218. sexp = ri.SexpVector(["a", ], ri.LGLSXP)
  219. isLogical = ri.globalenv.get("is.logical")
  220. ok = isLogical(sexp)[0]
  221. self.assertTrue(ok)
  222. self.assertTrue(sexp[0])
  223. def testNewInt(self):
  224. sexp = ri.SexpVector([1, ], ri.INTSXP)
  225. isInteger = ri.globalenv.get("is.integer")
  226. ok = isInteger(sexp)[0]
  227. self.assertTrue(ok)
  228. sexp = ri.SexpVector(["a", ], ri.INTSXP)
  229. isNA = ri.globalenv.get("is.na")
  230. ok = isNA(sexp)[0]
  231. self.assertTrue(ok)
  232. def testNewReal(self):
  233. sexp = ri.SexpVector([1.0, ], ri.REALSXP)
  234. isNumeric = ri.globalenv.get("is.numeric")
  235. ok = isNumeric(sexp)[0]
  236. self.assertTrue(ok)
  237. sexp = ri.SexpVector(["a", ], ri.REALSXP)
  238. isNA = ri.globalenv.get("is.na")
  239. ok = isNA(sexp)[0]
  240. self.assertTrue(ok)
  241. def testNewComplex(self):
  242. sexp = ri.SexpVector([1.0 + 1.0j, ], ri.CPLXSXP)
  243. isComplex = ri.globalenv.get("is.complex")
  244. ok = isComplex(sexp)[0]
  245. self.assertTrue(ok)
  246. def testNewString(self):
  247. sexp = ri.SexpVector(["abc", ], ri.STRSXP)
  248. isCharacter = ri.globalenv.get("is.character")
  249. ok = isCharacter(sexp)[0]
  250. self.assertTrue(ok)
  251. sexp = ri.SexpVector([1, ], ri.STRSXP)
  252. isCharacter = ri.globalenv.get("is.character")
  253. ok = isCharacter(sexp)[0]
  254. self.assertTrue(ok)
  255. def testNewUnicode(self):
  256. sexp = ri.SexpVector([u'abc', ], ri.STRSXP)
  257. isCharacter = ri.globalenv.get("is.character")
  258. ok = isCharacter(sexp)[0]
  259. self.assertTrue(ok)
  260. self.assertEqual('abc', sexp[0])
  261. def testNewUnicodeSymbol(self):
  262. sexp = ri.SexpVector((u'\u21a7', ), ri.STRSXP)
  263. isCharacter = ri.globalenv.get("is.character")
  264. ok = isCharacter(sexp)[0]
  265. self.assertTrue(ok)
  266. self.assertEqual(u'\u21a7', sexp[0])
  267. def testNewList(self):
  268. vec = ri.ListSexpVector([1,'b',3,'d',5])
  269. ok = ri.baseenv["is.list"](vec)[0]
  270. self.assertTrue(ok)
  271. self.assertEqual(5, len(vec))
  272. self.assertEqual(1, vec[0][0])
  273. self.assertEqual('b', vec[1][0])
  274. def testNewVector(self):
  275. sexp_char = ri.SexpVector(["abc", ],
  276. ri.STRSXP)
  277. sexp_int = ri.SexpVector([1, ],
  278. ri.INTSXP)
  279. sexp = ri.SexpVector([sexp_char, sexp_int],
  280. ri.VECSXP)
  281. isList = ri.globalenv.get("is.list")
  282. ok = isList(sexp)[0]
  283. self.assertTrue(ok)
  284. self.assertEqual(2, len(sexp))
  285. def testNew_InvalidType_NotAType(self):
  286. self.assertRaises(ValueError, ri.SexpVector, [1, ], -1)
  287. self.assertRaises(ValueError, ri.SexpVector, [1, ], 250)
  288. def testNew_InvalidType_NotAVectorType(self):
  289. self.assertRaises(ValueError, ri.SexpVector, [1, ], ri.ENVSXP)
  290. def testNew_InvalidType_NotASequence(self):
  291. self.assertRaises(ValueError, ri.SexpVector, 1, ri.INTSXP)
  292. def testGetItem(self):
  293. letters_R = ri.globalenv.get("letters")
  294. self.assertTrue(isinstance(letters_R, ri.SexpVector))
  295. letters = (('a', 0), ('b', 1), ('c', 2),
  296. ('x', 23), ('y', 24), ('z', 25))
  297. for l, i in letters:
  298. self.assertTrue(letters_R[i] == l)
  299. Rlist = ri.globalenv.get("list")
  300. seq_R = ri.globalenv.get("seq")
  301. mySeq = seq_R(ri.SexpVector([0, ], ri.INTSXP),
  302. ri.SexpVector([10, ], ri.INTSXP))
  303. myList = Rlist(s=mySeq, l=letters_R)
  304. idem = ri.globalenv.get("identical")
  305. self.assertTrue(idem(mySeq, myList[0]))
  306. self.assertTrue(idem(letters_R, myList[1]))
  307. letters_R = ri.globalenv.get("letters")
  308. self.assertEqual('z', letters_R[-1])
  309. def testGetItemLang(self):
  310. formula = ri.baseenv.get('formula')
  311. f = formula(ri.StrSexpVector(['y ~ x', ]))
  312. y = f[0]
  313. self.assertEqual(ri.SYMSXP, y.typeof)
  314. def testGetItemExpression(self):
  315. expression = ri.baseenv.get('expression')
  316. e = expression(ri.StrSexpVector(['a', ]),
  317. ri.StrSexpVector(['b', ]))
  318. y = e[0]
  319. self.assertEqual(ri.STRSXP, y.typeof)
  320. def testGetItemPairList(self):
  321. pairlist = ri.baseenv.get('pairlist')
  322. pl = pairlist(a = ri.StrSexpVector([1, ]))
  323. y = pl[0]
  324. self.assertEqual(ri.LISTSXP, y.typeof)
  325. def testGetItemNegativeOutOfBound(self):
  326. letters_R = ri.globalenv.get("letters")
  327. self.assertRaises(IndexError, letters_R.__getitem__,
  328. -100)
  329. def testGetItemOutOfBound(self):
  330. myVec = ri.SexpVector([0, 1, 2, 3, 4, 5], ri.INTSXP)
  331. self.assertRaises(IndexError, myVec.__getitem__, 10)
  332. if (sys.maxint > ri.R_LEN_T_MAX):
  333. self.assertRaises(IndexError, myVec.__getitem__,
  334. ri.R_LEN_T_MAX+1)
  335. def testGetSliceFloat(self):
  336. vec = ri.FloatSexpVector([1.0,2.0,3.0])
  337. vec = vec[0:2]
  338. self.assertEqual(2, len(vec))
  339. self.assertEqual(1.0, vec[0])
  340. self.assertEqual(2.0, vec[1])
  341. def testGetSliceInt(self):
  342. vec = ri.IntSexpVector([1,2,3])
  343. vec = vec[0:2]
  344. self.assertEqual(2, len(vec))
  345. self.assertEqual(1, vec[0])
  346. self.assertEqual(2, vec[1])
  347. def testGetSliceIntNegative(self):
  348. vec = ri.IntSexpVector([1,2,3])
  349. vec = vec[-2:-1]
  350. self.assertEqual(1, len(vec))
  351. self.assertEqual(2, vec[0])
  352. def testGetSliceMissingBoundary(self):
  353. vec = ri.IntSexpVector(range(10))
  354. vec_slice = vec[:2]
  355. self.assertEqual(2, len(vec_slice))
  356. self.assertEqual(0, vec_slice[0])
  357. self.assertEqual(1, vec_slice[1])
  358. vec_slice = vec[8:]
  359. self.assertEqual(2, len(vec_slice))
  360. self.assertEqual(8, vec_slice[0])
  361. self.assertEqual(9, vec_slice[1])
  362. vec_slice = vec[-2:]
  363. self.assertEqual(2, len(vec_slice))
  364. self.assertEqual(8, vec_slice[0])
  365. self.assertEqual(9, vec_slice[1])
  366. def testGetSliceBool(self):
  367. vec = ri.BoolSexpVector([True,False,True])
  368. vec = vec[0:2]
  369. self.assertEqual(2, len(vec))
  370. self.assertEqual(True, vec[0])
  371. self.assertEqual(False, vec[1])
  372. def testGetSliceStr(self):
  373. vec = ri.StrSexpVector(['a','b','c'])
  374. vec = vec[0:2]
  375. self.assertEqual(2, len(vec))
  376. self.assertEqual('a', vec[0])
  377. self.assertEqual('b', vec[1])
  378. def testGetSliceComplex(self):
  379. vec = ri.ComplexSexpVector([1+2j,2+3j,3+4j])
  380. vec = vec[0:2]
  381. self.assertEqual(2, len(vec))
  382. self.assertEqual(1+2j, vec[0])
  383. self.assertEqual(2+3j, vec[1])
  384. def testGetSliceList(self):
  385. vec = ri.ListSexpVector([1,'b',True])
  386. vec = vec[0:2]
  387. self.assertEqual(2, len(vec))
  388. self.assertEqual(1, vec[0][0])
  389. self.assertEqual('b', vec[1][0])
  390. def testAssignItemDifferentType(self):
  391. c_R = ri.globalenv.get("c")
  392. myVec = c_R(ri.SexpVector([0, 1, 2, 3, 4, 5], ri.INTSXP))
  393. self.assertRaises(ValueError, myVec.__setitem__, 0,
  394. ri.SexpVector(["a", ], ri.STRSXP))
  395. def testAssignItemOutOfBound(self):
  396. c_R = ri.globalenv.get("c")
  397. myVec = c_R(ri.SexpVector([0, 1, 2, 3, 4, 5], ri.INTSXP))
  398. self.assertRaises(IndexError, myVec.__setitem__, 10,
  399. ri.SexpVector([1, ], ri.INTSXP))
  400. def testAssignItemInt(self):
  401. c_R = ri.globalenv.get("c")
  402. myVec = c_R(ri.SexpVector([0, 1, 2, 3, 4, 5], ri.INTSXP))
  403. myVec[0] = ri.SexpVector([100, ], ri.INTSXP)
  404. self.assertTrue(myVec[0] == 100)
  405. myVec[3] = ri.SexpVector([100, ], ri.INTSXP)
  406. self.assertTrue(myVec[3] == 100)
  407. myVec[-1] = ri.SexpVector([200, ], ri.INTSXP)
  408. self.assertTrue(myVec[5] == 200)
  409. def testAssignItemReal(self):
  410. c_R = ri.globalenv.get("c")
  411. myVec = c_R(ri.SexpVector([0.0, 1.0, 2.0, 3.0, 4.0, 5.0],
  412. ri.REALSXP))
  413. myVec[0] = ri.SexpVector([100.0, ], ri.REALSXP)
  414. self.assertTrue(floatEqual(myVec[0], 100.0))
  415. myVec[3] = ri.SexpVector([100.0, ], ri.REALSXP)
  416. self.assertTrue(floatEqual(myVec[3], 100.0))
  417. def testAssignItemLogical(self):
  418. c_R = ri.globalenv.get("c")
  419. myVec = c_R(ri.SexpVector([True, False, True, True, False],
  420. ri.LGLSXP))
  421. myVec[0] = ri.SexpVector([False, ], ri.LGLSXP)
  422. self.assertFalse(myVec[0])
  423. myVec[3] = ri.SexpVector([False, ], ri.LGLSXP)
  424. self.assertFalse(myVec[3])
  425. def testAssignItemComplex(self):
  426. c_R = ri.globalenv.get("c")
  427. myVec = c_R(ri.SexpVector([1.0+2.0j, 2.0+2.0j, 3.0+2.0j,
  428. 4.0+2.0j, 5.0+2.0j],
  429. ri.CPLXSXP))
  430. myVec[0] = ri.SexpVector([100.0+200.0j, ], ri.CPLXSXP)
  431. self.assertTrue(floatEqual(myVec[0].real, 100.0))
  432. self.assertTrue(floatEqual(myVec[0].imag, 200.0))
  433. myVec[3] = ri.SexpVector([100.0+200.0j, ], ri.CPLXSXP)
  434. self.assertTrue(floatEqual(myVec[3].real, 100.0))
  435. self.assertTrue(floatEqual(myVec[3].imag, 200.0))
  436. def testAssignItemList(self):
  437. myVec = ri.SexpVector([ri.StrSexpVector(["a", ]),
  438. ri.IntSexpVector([1, ]),
  439. ri.IntSexpVector([3, ])],
  440. ri.VECSXP)
  441. myVec[0] = ri.SexpVector([ri.FloatSexpVector([100.0, ]), ],
  442. ri.VECSXP)
  443. self.assertTrue(floatEqual(myVec[0][0][0], 100.0))
  444. myVec[2] = ri.SexpVector([ri.StrSexpVector(["a", ]), ],
  445. ri.VECSXP)
  446. self.assertTrue(myVec[2][0][0] == "a")
  447. def testAssignItemString(self):
  448. letters_R = ri.SexpVector("abcdefghij", ri.STRSXP)
  449. self.assertRaises(ValueError, letters_R.__setitem__, 0,
  450. ri.SexpVector([1, ],
  451. ri.INTSXP))
  452. letters_R[0] = ri.SexpVector(["z", ], ri.STRSXP)
  453. self.assertTrue(letters_R[0] == "z")
  454. def testSetSliceFloat(self):
  455. vec = ri.FloatSexpVector([1.0,2.0,3.0])
  456. vec[0:2] = ri.FloatSexpVector([11.0, 12.0])
  457. self.assertEqual(3, len(vec))
  458. self.assertEqual(11.0, vec[0])
  459. self.assertEqual(12.0, vec[1])
  460. self.assertEqual(3.0, vec[2])
  461. def testSetSliceInt(self):
  462. vec = ri.IntSexpVector([1,2,3])
  463. vec[0:2] = ri.IntSexpVector([11,12])
  464. self.assertEqual(3, len(vec))
  465. self.assertEqual(11, vec[0])
  466. self.assertEqual(12, vec[1])
  467. def testSetSliceIntNegative(self):
  468. vec = ri.IntSexpVector([1,2,3])
  469. vec[-2:-1] = ri.IntSexpVector([33,])
  470. self.assertEqual(3, len(vec))
  471. self.assertEqual(33, vec[1])
  472. def testSetSliceBool(self):
  473. vec = ri.BoolSexpVector([True,False,True])
  474. vec[0:2] = ri.BoolSexpVector([False, False])
  475. self.assertEqual(3, len(vec))
  476. self.assertEqual(False, vec[0])
  477. self.assertEqual(False, vec[1])
  478. def testSetSliceStr(self):
  479. vec = ri.StrSexpVector(['a','b','c'])
  480. vec[0:2] = ri.StrSexpVector(['d','e'])
  481. self.assertEqual(3, len(vec))
  482. self.assertEqual('d', vec[0])
  483. self.assertEqual('e', vec[1])
  484. def testSetSliceComplex(self):
  485. vec = ri.ComplexSexpVector([1+2j,2+3j,3+4j])
  486. vec[0:2] = ri.ComplexSexpVector([11+2j,12+3j])
  487. self.assertEqual(3, len(vec))
  488. self.assertEqual(11+2j, vec[0])
  489. self.assertEqual(12+3j, vec[1])
  490. def testSetSliceList(self):
  491. vec = ri.ListSexpVector([1,'b',True])
  492. vec[0:2] = ri.ListSexpVector([False, 2])
  493. self.assertEqual(3, len(vec))
  494. self.assertEqual(False, vec[0][0])
  495. self.assertEqual(2, vec[1][0])
  496. def testMissingRPreserveObjectBug(self):
  497. rgc = ri.baseenv['gc']
  498. xx = range(100000)
  499. x = ri.SexpVector(xx, ri.INTSXP)
  500. rgc()
  501. self.assertEqual(0, x[0])
  502. def testIndexInteger(self):
  503. x = ri.IntSexpVector((1,2,3))
  504. self.assertEqual(0, x.index(1))
  505. self.assertEqual(2, x.index(3))
  506. def testIndexStr(self):
  507. x = ri.StrSexpVector(('a','b','c'))
  508. self.assertEqual(0, x.index('a'))
  509. self.assertEqual(2, x.index('c'))
  510. def suite():
  511. suite = unittest.TestLoader().loadTestsFromTestCase(SexpVectorTestCase)
  512. suite.addTest(unittest.TestLoader().\
  513. loadTestsFromTestCase(WrapperSexpVectorTestCase))
  514. suite.addTest(unittest.TestLoader().\
  515. loadTestsFromTestCase(IntSexpVectorTestCase))
  516. suite.addTest(unittest.TestLoader().\
  517. loadTestsFromTestCase(FloatSexpVectorTestCase))
  518. suite.addTest(unittest.TestLoader().\
  519. loadTestsFromTestCase(ByteSexpVectorTestCase))
  520. suite.addTest(unittest.TestLoader().loadTestsFromTestCase(NAValuesTestCase))
  521. return suite
  522. if __name__ == '__main__':
  523. tr = unittest.TextTestRunner(verbosity = 2)
  524. tr.run(suite())