2 * Copyright (c) 2010-2020 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.modbus.internal;
15 import static org.hamcrest.CoreMatchers.*;
16 import static org.junit.Assert.assertThat;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.mockito.junit.MockitoJUnitRunner;
23 * @author Sami Salonen - Initial contribution
25 @RunWith(MockitoJUnitRunner.class)
26 public class AtomicStampedKeyValueTest {
28 @Test(expected = NullPointerException.class)
29 public void testInitWithNullValue() {
30 new AtomicStampedValue<>(0, null);
34 public void testGetters() {
35 Object val = new Object();
36 AtomicStampedValue<Object> keyValue = new AtomicStampedValue<>(42L, val);
37 assertThat(keyValue.getStamp(), is(equalTo(42L)));
38 assertThat(keyValue.getValue(), is(equalTo(val)));
42 public void testUpdateWithSameStamp() {
43 Object val = new Object();
44 AtomicStampedValue<Object> keyValue = new AtomicStampedValue<>(42L, val);
45 keyValue.update(42L, new Object());
46 assertThat(keyValue.getStamp(), is(equalTo(42L)));
47 assertThat(keyValue.getValue(), is(not(equalTo(val))));
51 public void testUpdateWithDifferentStamp() {
52 Object val = new Object();
53 AtomicStampedValue<Object> keyValue = new AtomicStampedValue<>(42L, val);
54 keyValue.update(-99L, new Object());
55 assertThat(keyValue.getStamp(), is(equalTo(-99L)));
56 assertThat(keyValue.getValue(), is(not(equalTo(val))));
60 public void testCopy() {
61 Object val = new Object();
62 AtomicStampedValue<Object> keyValue = new AtomicStampedValue<>(42L, val);
63 AtomicStampedValue<Object> copy = keyValue.copy();
66 assertThat(keyValue.getStamp(), is(equalTo(42L)));
67 assertThat(keyValue.getValue(), is(equalTo(val)));
70 assertThat(keyValue.getStamp(), is(equalTo(copy.getStamp())));
71 assertThat(keyValue.getValue(), is(equalTo(copy.getValue())));
73 // after update they live life of their own
74 Object val2 = new Object();
75 copy.update(-99L, val2);
77 assertThat(keyValue.getStamp(), is(equalTo(42L)));
78 assertThat(keyValue.getValue(), is(equalTo(val)));
80 assertThat(copy.getStamp(), is(equalTo(-99L)));
81 assertThat(copy.getValue(), is(equalTo(val2)));
85 * instance(stamp=x).copyIfStampAfter(x)
88 public void testCopyIfStampAfterEqual() {
89 Object key = new Object();
90 Object val = new Object();
91 AtomicStampedValue<Object> keyValue = new AtomicStampedValue<>(42L, val);
92 AtomicStampedValue<Object> copy = keyValue.copyIfStampAfter(42L);
95 assertThat(keyValue.getStamp(), is(equalTo(42L)));
96 assertThat(keyValue.getValue(), is(equalTo(val)));
99 assertThat(keyValue.getStamp(), is(equalTo(copy.getStamp())));
100 assertThat(keyValue.getValue(), is(equalTo(copy.getValue())));
102 // after update they live life of their own
103 Object key2 = new Object();
104 Object val2 = new Object();
105 copy.update(-99L, val2);
107 assertThat(keyValue.getStamp(), is(equalTo(42L)));
108 assertThat(keyValue.getValue(), is(equalTo(val)));
110 assertThat(copy.getStamp(), is(equalTo(-99L)));
111 assertThat(copy.getValue(), is(equalTo(val2)));
115 * instance(stamp=x-1).copyIfStampAfter(x)
118 public void testCopyIfStampAfterTooOld() {
119 Object val = new Object();
120 AtomicStampedValue<Object> keyValue = new AtomicStampedValue<>(42L, val);
121 AtomicStampedValue<Object> copy = keyValue.copyIfStampAfter(43L);
123 // keyValue unchanged
124 assertThat(keyValue.getStamp(), is(equalTo(42L)));
125 assertThat(keyValue.getValue(), is(equalTo(val)));
128 assertThat(copy, is(nullValue()));
132 * instance(stamp=x).copyIfStampAfter(x-1)
135 public void testCopyIfStampAfterFresh() {
136 Object val = new Object();
137 AtomicStampedValue<Object> keyValue = new AtomicStampedValue<>(42L, val);
138 AtomicStampedValue<Object> copy = keyValue.copyIfStampAfter(41L);
140 // keyValue unchanged
141 assertThat(keyValue.getStamp(), is(equalTo(42L)));
142 assertThat(keyValue.getValue(), is(equalTo(val)));
145 assertThat(keyValue.getStamp(), is(equalTo(copy.getStamp())));
146 assertThat(keyValue.getValue(), is(equalTo(copy.getValue())));
148 // after update they live life of their own
149 Object key2 = new Object();
150 Object val2 = new Object();
151 copy.update(-99L, val2);
153 assertThat(keyValue.getStamp(), is(equalTo(42L)));
154 assertThat(keyValue.getValue(), is(equalTo(val)));
156 assertThat(copy.getStamp(), is(equalTo(-99L)));
157 assertThat(copy.getValue(), is(equalTo(val2)));
161 public void testCompare() {
162 // equal, smaller, larger
163 assertThat(AtomicStampedValue.compare(new AtomicStampedValue<>(42L, ""), new AtomicStampedValue<>(42L, "")),
165 assertThat(AtomicStampedValue.compare(new AtomicStampedValue<>(41L, ""), new AtomicStampedValue<>(42L, "")),
167 assertThat(AtomicStampedValue.compare(new AtomicStampedValue<>(42L, ""), new AtomicStampedValue<>(41L, "")),
171 assertThat(AtomicStampedValue.compare(null, new AtomicStampedValue<>(42L, "")), is(equalTo(-1)));
172 assertThat(AtomicStampedValue.compare(new AtomicStampedValue<>(42L, ""), null), is(equalTo(1)));