Spaces:
Sleeping
Sleeping
File size: 2,715 Bytes
45b4689 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
import pytest
import numpy as np
from app.scorer import cosine_similarity, DimensionalityMismatchError, ZeroVectorError, EmptyInputError
@pytest.fixture
def valid_input():
query_vector = np.array([[1, 0]])
corpus_vectors = np.array([[1, 0], [0, 1], [1, 1]])
return query_vector, corpus_vectors
@pytest.fixture
def zero_query_vector():
query_vector = np.array([[0, 0]])
corpus_vectors = np.array([[1, 0], [0, 1]])
return query_vector, corpus_vectors
@pytest.fixture
def corpus_with_zero_vector():
query_vector = np.array([[1, 1]])
corpus_vectors = np.array([[1, 0], [0, 1], [0, 0]])
return query_vector, corpus_vectors
@pytest.fixture
def dimensionality_mismatch():
query_vector = np.array([[1, 0]])
corpus_vectors = np.array([[1, 0, 0], [0, 1, 0]])
return query_vector, corpus_vectors
@pytest.fixture
def empty_input():
query_vector = np.array([[]])
corpus_vectors = np.array([[]])
return query_vector, corpus_vectors
@pytest.mark.unit
def test_cosine_similarity_valid_input(valid_input):
query_vector, corpus_vectors = valid_input
similarities = cosine_similarity(query_vector, corpus_vectors)
assert isinstance(similarities, np.ndarray)
assert similarities.shape == (3,)
assert similarities[0] == pytest.approx(1.0) # Same direction
assert similarities[1] == pytest.approx(0.0) # Orthogonal
assert similarities[2] == pytest.approx(1 / np.sqrt(2)) # Diagonal similarity
@pytest.mark.unit
def test_cosine_similarity_zero_query_vector(zero_query_vector):
query_vector, corpus_vectors = zero_query_vector
with pytest.raises(ZeroVectorError):
cosine_similarity(query_vector, corpus_vectors)
@pytest.mark.unit
def test_cosine_similarity_corpus_with_zero_vector(corpus_with_zero_vector):
query_vector, corpus_vectors = corpus_with_zero_vector
with pytest.raises(ZeroVectorError):
cosine_similarity(query_vector, corpus_vectors)
@pytest.mark.unit
def test_cosine_similarity_dimensionality_mismatch(dimensionality_mismatch):
query_vector, corpus_vectors = dimensionality_mismatch
with pytest.raises(DimensionalityMismatchError):
cosine_similarity(query_vector, corpus_vectors)
@pytest.mark.unit
def test_cosine_similarity_empty_inputs(empty_input):
query_vector, corpus_vectors = empty_input
with pytest.raises(EmptyInputError):
cosine_similarity(query_vector, corpus_vectors)
@pytest.mark.integration
def test_cosine_similarity_output_range(valid_input):
query_vector, corpus_vectors = valid_input
similarities = cosine_similarity(query_vector, corpus_vectors)
assert np.all(similarities >= -1)
assert np.all(similarities <= 1)
|