test_buffers.py revision 11986
111986Sandreas.sandberg@arm.comimport pytest 211986Sandreas.sandberg@arm.comfrom pybind11_tests import Matrix, ConstructorStats 311986Sandreas.sandberg@arm.com 411986Sandreas.sandberg@arm.comwith pytest.suppress(ImportError): 511986Sandreas.sandberg@arm.com import numpy as np 611986Sandreas.sandberg@arm.com 711986Sandreas.sandberg@arm.com 811986Sandreas.sandberg@arm.com@pytest.requires_numpy 911986Sandreas.sandberg@arm.comdef test_to_python(): 1011986Sandreas.sandberg@arm.com m = Matrix(5, 5) 1111986Sandreas.sandberg@arm.com 1211986Sandreas.sandberg@arm.com assert m[2, 3] == 0 1311986Sandreas.sandberg@arm.com m[2, 3] = 4 1411986Sandreas.sandberg@arm.com assert m[2, 3] == 4 1511986Sandreas.sandberg@arm.com 1611986Sandreas.sandberg@arm.com m2 = np.array(m, copy=False) 1711986Sandreas.sandberg@arm.com assert m2.shape == (5, 5) 1811986Sandreas.sandberg@arm.com assert abs(m2).sum() == 4 1911986Sandreas.sandberg@arm.com assert m2[2, 3] == 4 2011986Sandreas.sandberg@arm.com m2[2, 3] = 5 2111986Sandreas.sandberg@arm.com assert m2[2, 3] == 5 2211986Sandreas.sandberg@arm.com 2311986Sandreas.sandberg@arm.com cstats = ConstructorStats.get(Matrix) 2411986Sandreas.sandberg@arm.com assert cstats.alive() == 1 2511986Sandreas.sandberg@arm.com del m 2611986Sandreas.sandberg@arm.com assert cstats.alive() == 1 2711986Sandreas.sandberg@arm.com del m2 # holds an m reference 2811986Sandreas.sandberg@arm.com assert cstats.alive() == 0 2911986Sandreas.sandberg@arm.com assert cstats.values() == ["5x5 matrix"] 3011986Sandreas.sandberg@arm.com assert cstats.copy_constructions == 0 3111986Sandreas.sandberg@arm.com # assert cstats.move_constructions >= 0 # Don't invoke any 3211986Sandreas.sandberg@arm.com assert cstats.copy_assignments == 0 3311986Sandreas.sandberg@arm.com assert cstats.move_assignments == 0 3411986Sandreas.sandberg@arm.com 3511986Sandreas.sandberg@arm.com 3611986Sandreas.sandberg@arm.com@pytest.requires_numpy 3711986Sandreas.sandberg@arm.comdef test_from_python(): 3811986Sandreas.sandberg@arm.com with pytest.raises(RuntimeError) as excinfo: 3911986Sandreas.sandberg@arm.com Matrix(np.array([1, 2, 3])) # trying to assign a 1D array 4011986Sandreas.sandberg@arm.com assert str(excinfo.value) == "Incompatible buffer format!" 4111986Sandreas.sandberg@arm.com 4211986Sandreas.sandberg@arm.com m3 = np.array([[1, 2, 3], [4, 5, 6]]).astype(np.float32) 4311986Sandreas.sandberg@arm.com m4 = Matrix(m3) 4411986Sandreas.sandberg@arm.com 4511986Sandreas.sandberg@arm.com for i in range(m4.rows()): 4611986Sandreas.sandberg@arm.com for j in range(m4.cols()): 4711986Sandreas.sandberg@arm.com assert m3[i, j] == m4[i, j] 4811986Sandreas.sandberg@arm.com 4911986Sandreas.sandberg@arm.com cstats = ConstructorStats.get(Matrix) 5011986Sandreas.sandberg@arm.com assert cstats.alive() == 1 5111986Sandreas.sandberg@arm.com del m3, m4 5211986Sandreas.sandberg@arm.com assert cstats.alive() == 0 5311986Sandreas.sandberg@arm.com assert cstats.values() == ["2x3 matrix"] 5411986Sandreas.sandberg@arm.com assert cstats.copy_constructions == 0 5511986Sandreas.sandberg@arm.com # assert cstats.move_constructions >= 0 # Don't invoke any 5611986Sandreas.sandberg@arm.com assert cstats.copy_assignments == 0 5711986Sandreas.sandberg@arm.com assert cstats.move_assignments == 0 58