Fix incorrect multivalue return type

This fixes GH-107 and supersedes and closes GH-108.
This commit is contained in:
Nguyễn Gia Phong 2020-06-02 10:26:02 +07:00
parent c24df3143b
commit c216f307ef
3 changed files with 11 additions and 10 deletions

View File

@ -1444,7 +1444,7 @@ cdef class Source:
@property
def position(self) -> Vector3:
"""3D position of the source."""
return from_vector3(self.impl.get_position())
return tuple(from_vector3(self.impl.get_position()))
@position.setter
def position(self, value: Vector3) -> None:
@ -1458,7 +1458,7 @@ cdef class Source:
position, and instead just alters the pitch as determined
by the doppler effect.
"""
return from_vector3(self.impl.get_velocity())
return tuple(from_vector3(self.impl.get_velocity()))
@velocity.setter
def velocity(self, value: Vector3) -> None:
@ -1481,7 +1481,7 @@ cdef class Source:
comes from, this also affects the facing direction.
"""
cdef pair[alure.Vector3, alure.Vector3] o = self.impl.get_orientation()
return from_vector3(o.first), from_vector3(o.second)
return tuple(from_vector3(o.first)), tuple(from_vector3(o.second))
@orientation.setter
def orientation(self, value: Tuple[Vector3, Vector3]) -> None:
@ -2234,7 +2234,7 @@ cdef class ReverbEffect(BaseEffect):
@property
def reflections_pan(self) -> Vector3:
"""Reflections as 3D vector of magnitude between 0 and 1."""
return self.properties.reflections_pan
return tuple(self.properties.reflections_pan)
@reflections_pan.setter
def reflections_pan(self, value: Vector3) -> None:
@ -2277,7 +2277,7 @@ cdef class ReverbEffect(BaseEffect):
@property
def late_reverb_pan(self) -> Vector3:
"""Late reverb as 3D vector of magnitude between 0 and 1."""
return self.properties.late_reverb_pan
return tuple(self.properties.late_reverb_pan)
@late_reverb_pan.setter
def late_reverb_pan(self, value: Vector3) -> None:

View File

@ -22,7 +22,7 @@ for single-precision floating-point numbers.
__all__ = ['FLT_MAX', 'allclose', 'isclose']
from math import isclose as _isclose
from typing import Sequence
from typing import Any, Callable, Sequence
FLT_EPSILON: float = 2.0 ** -23
FLT_MAX: float = 2.0**128 - 2.0**104
@ -42,7 +42,8 @@ def isclose(a: float, b: float) -> bool:
return _isclose(a, b, rel_tol=FLT_EPSILON)
def allclose(a: Sequence[float], b: Sequence[float]) -> bool:
def allclose(a: Sequence[float], b: Sequence[float],
close: Callable[[Any, Any], bool] = isclose) -> bool:
"""Determine whether two sequences of single-precision
floating-point numbers are close in value.
@ -53,4 +54,4 @@ def allclose(a: Sequence[float], b: Sequence[float]) -> bool:
That is, NaN is not close to anything, even itself.
inf and -inf are only close to themselves.
"""
return all(map(isclose, a, b))
return type(a) is type(b) and all(map(close, a, b))

View File

@ -200,9 +200,9 @@ def test_velocity(context):
def test_orientation(context):
"""Test read-write property orientation."""
with Source(context) as source:
assert all(map(allclose, source.orientation, ((0, 0, -1), (0, 1, 0))))
assert allclose(source.orientation, ((0, 0, -1), (0, 1, 0)), allclose)
source.orientation = (1, 1, -2), (3, -5, 8)
assert all(map(allclose, source.orientation, ((1, 1, -2), (3, -5, 8))))
assert allclose(source.orientation, ((1, 1, -2), (3, -5, 8)), allclose)
def test_cone_angles(context):