@Test
public void compareAndSet() throws Exception {
IAtomicReference<String> reference = getAtomicReference();
final SimpleClient client = getClient();
client.send(new CompareAndSetRequest(name, toData(null), toData(null)));
assertEquals(Boolean.TRUE, client.receive());
assertNull(reference.get());
client.send(new CompareAndSetRequest(name, toData("foo"), toData(null)));
assertEquals(Boolean.FALSE, client.receive());
assertNull(reference.get());
client.send(new CompareAndSetRequest(name, toData(null), toData("foo")));
assertEquals(Boolean.TRUE, client.receive());
assertEquals("foo", reference.get());
client.send(new CompareAndSetRequest(name, toData("foo"), toData("foo")));
assertEquals(Boolean.TRUE, client.receive());
assertEquals("foo",reference.get());
client.send(new CompareAndSetRequest(name, toData(null), toData("pipo")));
assertEquals(Boolean.FALSE, client.receive());
assertEquals("foo",reference.get());
client.send(new CompareAndSetRequest(name, toData("bar"), toData("foo")));
assertEquals(Boolean.FALSE, client.receive());
assertEquals("foo",reference.get());
client.send(new CompareAndSetRequest(name, toData("foo"), toData("bar")));
assertEquals(Boolean.TRUE, client.receive());
assertEquals("bar",reference.get());
client.send(new CompareAndSetRequest(name, toData("bar"), toData(null)));
assertEquals(Boolean.TRUE, client.receive());
assertEquals(null,reference.get());
}