ref: 98cfdea4d963bd7caf5a8c8c1cbf0b04db11295c
dir: /python/tests/test_cvec.py/
#! /usr/bin/env python
import numpy as np
from numpy.testing import TestCase, assert_equal
from aubio import cvec, fvec, float_type
wrong_type = 'float32' if float_type == 'float64' else 'float64'
class aubio_cvec_test_case(TestCase):
def test_vector_created_with_zeroes(self):
a = cvec(10)
assert_equal(a.norm.shape[0], 10 // 2 + 1)
assert_equal(a.phas.shape[0], 10 // 2 + 1)
assert_equal(a.norm, 0.)
assert_equal(a.phas, 0.)
def test_vector_assign_element(self):
a = cvec()
a.norm[0] = 1
assert_equal(a.norm[0], 1)
a.phas[0] = 1
assert_equal(a.phas[0], 1)
def test_vector_assign_element_end(self):
a = cvec()
a.norm[-1] = 1
assert_equal(a.norm[-1], 1)
assert_equal(a.norm[len(a.norm)-1], 1)
a.phas[-1] = 1
assert_equal(a.phas[-1], 1)
assert_equal(a.phas[len(a.phas)-1], 1)
def test_assign_cvec_norm_slice(self):
spec = cvec(1024)
spec.norm[40:100] = 100
assert_equal(spec.norm[0:40], 0)
assert_equal(spec.norm[40:100], 100)
assert_equal(spec.norm[100:-1], 0)
assert_equal(spec.phas, 0)
def test_assign_cvec_phas_slice(self):
spec = cvec(1024)
spec.phas[39:-1] = -np.pi
assert_equal(spec.phas[0:39], 0)
assert_equal(spec.phas[39:-1], -np.pi)
assert_equal(spec.norm, 0)
def test_assign_cvec_with_other_cvec(self):
""" check dest cvec is still reachable after source was deleted """
spec = cvec(1024)
a = np.random.rand(1024//2+1).astype(float_type)
b = np.random.rand(1024//2+1).astype(float_type)
spec.norm = a
spec.phas = b
new_spec = spec
del spec
assert_equal(a, new_spec.norm)
assert_equal(b, new_spec.phas)
assert_equal(id(a), id(new_spec.norm))
assert_equal(id(b), id(new_spec.phas))
def test_pass_to_numpy(self):
spec = cvec(1024)
norm = spec.norm
phas = spec.phas
del spec
new_spec = cvec(1024)
new_spec.norm = norm
new_spec.phas = phas
assert_equal(norm, new_spec.norm)
assert_equal(phas, new_spec.phas)
assert_equal(id(norm), id(new_spec.norm))
assert_equal(id(phas), id(new_spec.phas))
del norm
del phas
assert_equal(new_spec.norm, 0.)
assert_equal(new_spec.phas, 0.)
del new_spec
def test_assign_norm_too_large(self):
a = cvec(512)
b = fvec(512//2+1 + 4)
with self.assertRaises(ValueError):
a.norm = b
def test_assign_norm_too_small(self):
a = cvec(512)
b = fvec(512//2+1 - 4)
with self.assertRaises(ValueError):
a.norm = b
def test_assign_phas_too_large(self):
a = cvec(512)
b = fvec(512//2+1 + 4)
with self.assertRaises(ValueError):
a.phas = b
def test_assign_phas_too_small(self):
a = cvec(512)
b = fvec(512//2+1 - 4)
with self.assertRaises(ValueError):
a.phas = b
def test_cvec_repr(self):
win_s = 512
c = cvec(win_s)
expected_repr = "aubio cvec of {:d} elements".format(win_s//2+1)
self.assertEqual(repr(c), expected_repr)
class aubio_cvec_wrong_norm_input(TestCase):
def test_wrong_length(self):
with self.assertRaises(ValueError):
cvec(-1)
def test_set_norm_with_scalar(self):
a = cvec(512)
with self.assertRaises(ValueError):
a.norm = 1
def test_set_norm_with_scalar_array(self):
a = cvec(512)
with self.assertRaises(ValueError):
a.norm = np.ndarray(1, dtype = 'int')
def test_set_norm_with_int_array(self):
a = cvec(512)
with self.assertRaises(ValueError):
a.norm = np.zeros(512//2+1, dtype = 'int')
def test_set_norm_with_wrong_float_array(self):
a = cvec(512)
with self.assertRaises(ValueError):
a.norm = np.zeros(512//2+1, dtype = wrong_type)
def test_set_norm_with_wrong_2d_array(self):
a = cvec(512)
with self.assertRaises(ValueError):
a.norm = np.zeros((512//2+1, 2), dtype = float_type)
if __name__ == '__main__':
from unittest import main
main()