From 799ead1e727d9abe87d55d890644c409b337f524 Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Fri, 25 Jul 2008 06:13:20 +0000 Subject: Complete BigDecimal support -- ensure that failed update rolls back normalization. --- .../java/com/amazon/carbonado/TestStorables.java | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src/test/java/com/amazon/carbonado/TestStorables.java') diff --git a/src/test/java/com/amazon/carbonado/TestStorables.java b/src/test/java/com/amazon/carbonado/TestStorables.java index c54099e..bfedd12 100644 --- a/src/test/java/com/amazon/carbonado/TestStorables.java +++ b/src/test/java/com/amazon/carbonado/TestStorables.java @@ -3156,6 +3156,46 @@ public class TestStorables extends TestCase { return bd.stripTrailingZeros(); } + public void test_BigDecimalVersioned() throws Exception { + BigDecimal bd = new BigDecimal("123.000"); + BigDecimal expected = expected(bd); + + Storage storage = + getRepository().storageFor(WithBigDecimalVersioned.class); + + WithBigDecimalVersioned s = storage.prepare(); + s.setId(1); + s.setNumber(bd); + s.insert(); + + // Ensure insert behaves as if Storable was reloaded. + assertEquals(expected, s.getNumber()); + + int version = s.getVersion(); + + bd = new BigDecimal("200.000"); + expected = expected(bd); + + s = storage.prepare(); + s.setId(1); + s.setNumber(bd); + s.setVersion(version - 1); + try { + s.update(); + fail(); + } catch (OptimisticLockException e) { + } + + // Since no update actually happened, scale should stay the same. + assertEquals(bd, s.getNumber()); + + s.setVersion(version); + s.update(); + + // Now side-effect should be visble. + assertEquals(expected, s.getNumber()); + } + public void test_BigDecimalCompare() throws Exception { BigDecimal bd1 = new BigDecimal("123.0"); BigDecimal bd2 = new BigDecimal("123"); -- cgit v1.2.3