Spaces:
Running
Running
// _ _ | |
// __ _____ __ ___ ___ __ _| |_ ___ | |
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
// \ V V / __/ (_| |\ V /| | (_| | || __/ | |
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| | |
// | |
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. | |
// | |
// CONTACT: [email protected] | |
// | |
package projector | |
import ( | |
"testing" | |
"github.com/go-openapi/strfmt" | |
"github.com/stretchr/testify/assert" | |
"github.com/stretchr/testify/require" | |
"github.com/weaviate/weaviate/entities/additional" | |
"github.com/weaviate/weaviate/entities/search" | |
) | |
func TestProjector(t *testing.T) { | |
p := New() | |
t.Run("with multiple results", func(t *testing.T) { | |
vectors := [][]float32{ | |
{1, 0, 0, 0, 0}, | |
{0, 0, 1, 0, 0}, | |
{1, 1, 1, 0, 0}, | |
} | |
testData := []search.Result{ | |
{ | |
Schema: map[string]interface{}{"name": "item1"}, | |
Vector: vectors[0], | |
}, | |
{ | |
Schema: map[string]interface{}{"name": "item2"}, | |
Vector: vectors[1], | |
}, | |
{ | |
Schema: map[string]interface{}{"name": "item3"}, | |
Vector: vectors[2], | |
AdditionalProperties: map[string]interface{}{ | |
"classification": &additional.Classification{ // verify it doesn't remove existing additional props | |
ID: strfmt.UUID("123"), | |
}, | |
}, | |
}, | |
} | |
res, err := p.Reduce(testData, &Params{}) | |
require.Nil(t, err) | |
assert.Len(t, res, len(testData)) | |
classification, classificationOK := res[2].AdditionalProperties["classification"] | |
assert.True(t, classificationOK) | |
classificationElement, classificationElementOK := classification.(*additional.Classification) | |
assert.True(t, classificationElementOK) | |
assert.Equal(t, classificationElement.ID, strfmt.UUID("123"), | |
"existing additionals should not be removed") | |
for i := 0; i < 3; i++ { | |
featureProjection, featureProjectionOK := res[i].AdditionalProperties["featureProjection"] | |
assert.True(t, featureProjectionOK) | |
fpElement, fpElementOK := featureProjection.(*FeatureProjection) | |
assert.True(t, fpElementOK) | |
assert.Len(t, fpElement.Vector, 2) | |
} | |
}) | |
} | |