summaryrefslogtreecommitdiffstats
path: root/vespajlib/src/test/java/com/yahoo/slime/ValueTest.java
blob: a0e3c8029ca690a5b8ad261db0364ba203997f07 (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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.slime;

import org.junit.Test;

import java.nio.charset.StandardCharsets;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

/**
 * @author hakonhall
 */
public class ValueTest {
    @Test
    public void verifyObjectEquality() {
        Slime slimeLeft = new Slime();
        Cursor left = slimeLeft.setObject();
        left.setString("a", "A");
        left.setString("b", "B");

        Slime slimeRight = new Slime();
        Cursor right = slimeRight.setObject();
        right.setString("b", "B");
        right.setString("a", "A");

        assertTrue(left.equalTo(right));
        assertTrue(right.equalTo(left));
        assertTrue(left.equalTo(left));

        right.setString("c", "C");
        assertFalse(left.equalTo(right));
        assertFalse(right.equalTo(left));
    }

    @Test
    public void verifyArrayEquality() {
        Slime slimeLeft = new Slime();
        Cursor left = slimeLeft.setArray();
        left.addArray().addString("a");
        left.addArray().addString("b");

        Slime slimeRight = new Slime();
        Cursor right = slimeRight.setArray();
        right.addArray().addString("a");
        right.addArray().addString("b");

        assertTrue(left.equalTo(right));
        assertTrue(right.equalTo(left));
        assertTrue(left.equalTo(left));

        right.addArray().addString("c");
        assertFalse(left.equalTo(right));
        assertFalse(right.equalTo(left));

        // Order matters
        Slime slimeRight2 = new Slime();
        Cursor right2 = slimeRight2.setObject();
        right2.addArray().addString("b");
        right2.addArray().addString("a");
        assertFalse(left.equalTo(right2));
        assertFalse(right2.equalTo(left));
    }

    @Test
    public void verifyPrimitiveEquality() {
        Slime left = new Slime();
        Cursor leftObject = left.setObject();
        populateWithPrimitives(leftObject, true);

        Slime right = new Slime();
        Cursor rightObject = right.setObject();
        populateWithPrimitives(rightObject, true);

        assertEqualTo(left.get().field("bool"), right.get().field("bool"));
        assertEqualTo(left.get().field("nix"), right.get().field("nix"));
        assertEqualTo(left.get().field("long"), right.get().field("long"));
        assertEqualTo(left.get().field("string"), right.get().field("string"));
        assertEqualTo(left.get().field("data"), right.get().field("data"));
        assertEqualTo(left.get(), right.get());

        assertNotEqualTo(left.get().field("bool"), right.get().field("nix"));
        assertNotEqualTo(left.get().field("nix"), right.get().field("string"));
        assertNotEqualTo(left.get().field("string"), right.get().field("data"));
        assertNotEqualTo(left.get().field("bool"), right.get().field("data"));
        assertNotEqualTo(left.get().field("bool"), right.get().field("long"));
    }

    @Test
    public void verifyPrimitiveNotEquality() {
        Slime left = new Slime();
        Cursor leftObject = left.setObject();
        populateWithPrimitives(leftObject, true);

        Slime right = new Slime();
        Cursor rightObject = right.setObject();
        populateWithPrimitives(rightObject, false);

        assertNotEqualTo(left.get().field("bool"), right.get().field("bool"));
        assertEqualTo(left.get().field("nix"), right.get().field("nix"));
        assertNotEqualTo(left.get().field("long"), right.get().field("long"));
        assertNotEqualTo(left.get().field("string"), right.get().field("string"));
        assertNotEqualTo(left.get().field("data"), right.get().field("data"));
        assertNotEqualTo(left.get(), right.get());
    }

    private void populateWithPrimitives(Cursor cursor, boolean enabled) {
        cursor.setBool("bool", enabled ? true : false);
        cursor.setNix("nix");
        cursor.setLong("long", enabled ? 1 : 0);
        cursor.setString("string", enabled ? "enabled" : "disabled");
        cursor.setDouble("double", enabled ? 1.5 : 0.5);
        cursor.setData("data", (enabled ? "edata" : "ddata").getBytes(StandardCharsets.UTF_8));
    }

    private void assertEqualTo(Inspector left, Inspector right) {
        assertTrue("'" + left + "' is not equal to '" + right + "'", left.equalTo(right));
    }

    private void assertNotEqualTo(Inspector left, Inspector right) {
        assertTrue("'" + left + "' is equal to '" + right + "'", !left.equalTo(right));
    }
}