package org.rapidbeans.core.basic; import junit.framework.TestCase; import org.rapidbeans.core.exception.RapidBeansRuntimeException; /** * JUnit tests. * * @author Martin Bluemel */ public class IdNumericGeneratorTest extends TestCase { /** * a new generator begins to generate id 1, 2, 3, and so on. */ public void testGenerateNumber() { IdGeneratorNumeric generator = new IdGeneratorNumeric(); assertEquals(1, generator.generateIdValue().intValue()); assertEquals(2, generator.generateIdValue().intValue()); assertEquals(3, generator.generateIdValue().intValue()); } /** * After having generated ID 2,147,483,647 = 2^31-1 = Long.MAX_VALUE the * generator continues with negative numbers from -2,147,483,648 = 2^31-1 = * Long.MIN_VALUE up to -1. */ public void testGenerateNumberMaxInt() { IdGeneratorNumeric generator = new IdGeneratorNumeric(); generator.notifiyIdExisists(2147483645); assertEquals(2147483646, generator.generateIdValue().intValue()); assertEquals(Integer.MAX_VALUE, generator.generateIdValue().intValue()); assertEquals(Integer.MIN_VALUE, generator.generateIdValue().intValue()); assertEquals(-2147483647, generator.generateIdValue().intValue()); assertEquals(-2147483646, generator.generateIdValue().intValue()); } /** * test the boundary condition. The generator should generate a -1 as last * number and afterwards switch to 0, 0 is not given out but is the boundary */ public void testGenerateNumberBoundary1() { IdGeneratorNumeric generator = new IdGeneratorNumeric(); generator.notifiyIdExisists(-3); assertEquals(-2, generator.generateIdValue().intValue()); assertEquals(-1, generator.generateIdValue().intValue()); try { generator.generateIdValue().intValue(); fail("expected RapidBeansRuntimeException"); } catch (RapidBeansRuntimeException e) { assertTrue(true); } } /** * test case method. */ public void testSetMaxGenNumberPositive() { IdGeneratorNumeric generator = new IdGeneratorNumeric(); generator.notifiyIdExisists(247110815); assertEquals(247110816, generator.generateIdValue().intValue()); assertEquals(247110817, generator.generateIdValue().intValue()); assertEquals(247110818, generator.generateIdValue().intValue()); } /** * test case method. */ public void testSetMaxGenNumberNegative() { IdGeneratorNumeric generator = new IdGeneratorNumeric(); generator.notifiyIdExisists(-247110815); assertEquals(-247110814L, generator.generateIdValue().intValue()); assertEquals(-247110813L, generator.generateIdValue().intValue()); assertEquals(-247110812L, generator.generateIdValue().intValue()); } /** * test the boundary condition. */ public void testSetMaxGenNumberMinus1() { IdGeneratorNumeric generator = new IdGeneratorNumeric(); generator.notifiyIdExisists(-1); try { generator.generateIdValue().intValue(); fail("expected RapidBeansRuntimeException"); } catch (RapidBeansRuntimeException e) { assertTrue(true); } } /** * test the boundary condition. */ public void testSetMaxGenNumberZero() { IdGeneratorNumeric generator = new IdGeneratorNumeric(); generator.notifiyIdExisists(0); assertEquals(1, generator.generateIdValue().intValue()); assertEquals(2, generator.generateIdValue().intValue()); assertEquals(3, generator.generateIdValue().intValue()); } /** * test COMPACT mode and realeasing a number. */ public void testReleaseNumber() { IdGeneratorNumeric generator = new IdGeneratorNumeric(); generator.setMode(IdGeneratorNumeric.GENERATION_STRATEGY_COMPACT); assertEquals(1, generator.generateIdValue().intValue()); assertEquals(2, generator.generateIdValue().intValue()); assertEquals(3, generator.generateIdValue().intValue()); assertEquals(4, generator.generateIdValue().intValue()); generator.releaseNumber(2); generator.releaseNumber(3); assertEquals(3, generator.generateIdValue().intValue()); assertEquals(2, generator.generateIdValue().intValue()); assertEquals(5, generator.generateIdValue().intValue()); assertEquals(6, generator.generateIdValue().intValue()); } }