aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/test/java/com/yahoo/search/result/FeatureDataTestCase.java
blob: 5d423eceb9858ec20b78f3e40c7af2955d89461f (plain) (blame)
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
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.result;

import com.yahoo.data.access.slime.SlimeAdapter;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
import com.yahoo.tensor.Tensor;
import com.yahoo.tensor.serialization.TypedBinaryFormat;
import org.junit.jupiter.api.Test;

import java.util.stream.Collectors;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;

/**
 * @author bratseth
 */
public class FeatureDataTestCase {

    private static final double delta = 0.00000001;

    @Test
    void testFeatureData() {
        Cursor features = new Slime().setObject();
        features.setDouble("scalar1", 1.5);
        features.setDouble("scalar2", 2.5);
        Tensor tensor1 = Tensor.from("tensor(x[3]):[1.5, 2, 2.5]");
        features.setData("tensor1", TypedBinaryFormat.encode(tensor1));
        Tensor tensor2 = Tensor.from(0.5);
        features.setData("tensor2", TypedBinaryFormat.encode(tensor2));

        FeatureData featureData = new FeatureData(new SlimeAdapter(features));
        assertEquals("scalar1,scalar2,tensor1,tensor2",
                featureData.featureNames().stream().sorted().collect(Collectors.joining(",")));
        assertNull(featureData.getDouble("nosuch1"));
        assertEquals(1.5, featureData.getDouble("scalar1"), delta);
        assertEquals(2.5, featureData.getDouble("scalar2"), delta);
        assertEquals(2.5, featureData.getDouble("scalar2"), delta, "Cached lookup");
        assertNull(featureData.getDouble("nosuch2"));
        assertNull(featureData.getDouble("nosuch2"));

        assertNull(featureData.getTensor("nosuch1"));
        assertEquals(Tensor.from(1.5), featureData.getTensor("scalar1"));
        assertEquals(Tensor.from(2.5), featureData.getTensor("scalar2"));
        assertEquals(tensor1, featureData.getTensor("tensor1"));
        assertEquals(tensor2, featureData.getTensor("tensor2"));
        assertEquals(tensor2, featureData.getTensor("tensor2"), "Cached lookup");
        assertNull(featureData.getTensor("nosuch2"));
        assertNull(featureData.getTensor("nosuch2"));

        String expectedJson =
                "{" +
                        "\"scalar1\":1.5," +
                        "\"scalar2\":2.5," +
                        "\"tensor1\":{\"type\":\"tensor(x[3])\",\"cells\":[{\"address\":{\"x\":\"0\"},\"value\":1.5},{\"address\":{\"x\":\"1\"},\"value\":2.0},{\"address\":{\"x\":\"2\"},\"value\":2.5}]}," +
                        "\"tensor2\":{\"type\":\"tensor()\",\"cells\":[{\"address\":{},\"value\":0.5}]}" +
                        "}";
        assertEquals(expectedJson, featureData.toJson());
    }

}