86 lines
2.6 KiB
Python
86 lines
2.6 KiB
Python
# Apache License, Version 2.0
|
|
|
|
# ./blender.bin --background -noaudio --python tests/python/bl_pyapi_prop_array.py -- --verbose
|
|
import bpy
|
|
import unittest
|
|
import numpy as np
|
|
|
|
|
|
class TestPropArray(unittest.TestCase):
|
|
def setUp(self):
|
|
bpy.types.Scene.test_array_f = bpy.props.FloatVectorProperty(size=10)
|
|
bpy.types.Scene.test_array_i = bpy.props.IntVectorProperty(size=10)
|
|
scene = bpy.context.scene
|
|
self.array_f = scene.test_array_f
|
|
self.array_i = scene.test_array_i
|
|
|
|
def test_foreach_getset_i(self):
|
|
with self.assertRaises(TypeError):
|
|
self.array_i.foreach_set(range(5))
|
|
|
|
self.array_i.foreach_set(range(5, 15))
|
|
|
|
with self.assertRaises(TypeError):
|
|
self.array_i.foreach_set(np.arange(5, dtype=np.int32))
|
|
|
|
with self.assertRaises(TypeError):
|
|
self.array_i.foreach_set(np.arange(10, dtype=np.int64))
|
|
|
|
with self.assertRaises(TypeError):
|
|
self.array_i.foreach_get(np.arange(10, dtype=np.float32))
|
|
|
|
a = np.arange(10, dtype=np.int32)
|
|
self.array_i.foreach_set(a)
|
|
|
|
with self.assertRaises(TypeError):
|
|
self.array_i.foreach_set(a[:5])
|
|
|
|
for v1, v2 in zip(a, self.array_i[:]):
|
|
self.assertEqual(v1, v2)
|
|
|
|
b = np.empty(10, dtype=np.int32)
|
|
self.array_i.foreach_get(b)
|
|
for v1, v2 in zip(a, b):
|
|
self.assertEqual(v1, v2)
|
|
|
|
b = [None] * 10
|
|
self.array_f.foreach_get(b)
|
|
for v1, v2 in zip(a, b):
|
|
self.assertEqual(v1, v2)
|
|
|
|
def test_foreach_getset_f(self):
|
|
with self.assertRaises(TypeError):
|
|
self.array_i.foreach_set(range(5))
|
|
|
|
self.array_f.foreach_set(range(5, 15))
|
|
|
|
with self.assertRaises(TypeError):
|
|
self.array_f.foreach_set(np.arange(5, dtype=np.float32))
|
|
|
|
with self.assertRaises(TypeError):
|
|
self.array_f.foreach_set(np.arange(10, dtype=np.int32))
|
|
|
|
with self.assertRaises(TypeError):
|
|
self.array_f.foreach_get(np.arange(10, dtype=np.float64))
|
|
|
|
a = np.arange(10, dtype=np.float32)
|
|
self.array_f.foreach_set(a)
|
|
for v1, v2 in zip(a, self.array_f[:]):
|
|
self.assertEqual(v1, v2)
|
|
|
|
b = np.empty(10, dtype=np.float32)
|
|
self.array_f.foreach_get(b)
|
|
for v1, v2 in zip(a, b):
|
|
self.assertEqual(v1, v2)
|
|
|
|
b = [None] * 10
|
|
self.array_f.foreach_get(b)
|
|
for v1, v2 in zip(a, b):
|
|
self.assertEqual(v1, v2)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import sys
|
|
sys.argv = [__file__] + (sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else [])
|
|
unittest.main()
|