public void testAssign()

in computer-test/src/main/java/org/apache/hugegraph/computer/core/graph/value/ListValueTest.java [239:312]


    public void testAssign() {
        ListValue<IntValue> value1 = new ListValue<>(ValueType.INT);
        ListValue<FloatValue> value2 = new ListValue<>(ValueType.FLOAT);

        value1.add(new IntValue(101));
        value1.add(new IntValue(102));
        value1.add(new IntValue(103));

        value2.add(new FloatValue(201f));
        value2.add(new FloatValue(202f));

        ListValue<IntValue> value3 = new ListValue<>(ValueType.INT);
        ListValue<FloatValue> value4 = new ListValue<>(ValueType.FLOAT);
        Assert.assertEquals(ImmutableList.of(), value3.values());
        Assert.assertEquals(ImmutableList.of(), value4.values());

        Assert.assertNotEquals(value1, value3);
        value3.assign(value1);
        Assert.assertEquals(value1, value3);

        /*
         * NOTE: updating value1 lead to value3 to change
         * TODO: should keep value1 unmodifiable and let value3 modifiable?
         */
        Assert.assertEquals(3, value3.size());
        value1.add(new IntValue(104));
        Assert.assertEquals(4, value1.size());
        Assert.assertEquals(4, value3.size());

        Assert.assertNotEquals(value2, value4);
        value4.assign(value2);
        Assert.assertEquals(value2, value4);

        Assert.assertThrows(UnsupportedOperationException.class, () -> {
            value4.add(new FloatValue(203f));
        });

        Assert.assertThrows(IllegalArgumentException.class, () -> {
            value3.assign(value2);
        }, e -> {
            Assert.assertContains("Can't assign list<float> to list<int>",
                                  e.getMessage());
        });

        Assert.assertThrows(IllegalArgumentException.class, () -> {
            value4.assign(value1);
        }, e -> {
            Assert.assertContains("Can't assign list<int> to list<float>",
                                  e.getMessage());
        });

        Assert.assertThrows(IllegalArgumentException.class, () -> {
            Value v = new IntValue();
            value3.assign(v);
        }, e -> {
            Assert.assertContains("Can't assign '0'(IntValue) to ListValue",
                                  e.getMessage());
        });

        Assert.assertThrows(IllegalArgumentException.class, () -> {
            Value v = new LongValue();
            value4.assign(v);
        }, e -> {
            Assert.assertContains("Can't assign '0'(LongValue) to ListValue",
                                  e.getMessage());
        });

        Assert.assertThrows(IllegalArgumentException.class, () -> {
            value2.assign(null);
        }, e -> {
            Assert.assertContains("Can't assign null to ListValue",
                                  e.getMessage());
        });
    }