001: /* Copyright (C) 2004 - 2007 db4objects Inc. http://www.db4o.com
002:
003: This file is part of the db4o open source object database.
004:
005: db4o is free software; you can redistribute it and/or modify it under
006: the terms of version 2 of the GNU General Public License as published
007: by the Free Software Foundation and as clarified by db4objects' GPL
008: interpretation policy, available at
009: http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
010: Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
011: Suite 350, San Mateo, CA 94403, USA.
012:
013: db4o is distributed in the hope that it will be useful, but WITHOUT ANY
014: WARRANTY; without even the implied warranty of MERCHANTABILITY or
015: FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
016: for more details.
017:
018: You should have received a copy of the GNU General Public License along
019: with this program; if not, write to the Free Software Foundation, Inc.,
020: 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
021: package com.db4o.db4ounit.common.handlers;
022:
023: import com.db4o.db4ounit.util.*;
024:
025: import db4ounit.*;
026:
027: public class LongHandlerUpdateTestCase extends
028: HandlerUpdateTestCaseBase {
029:
030: public static class Item {
031: public long _typedPrimitive;
032:
033: public Long _typedWrapper;
034:
035: public Object _untyped;
036: }
037:
038: public static class ItemArrays {
039: public long[] _typedPrimitiveArray;
040:
041: public Long[] _typedWrapperArray;
042:
043: public Object[] _untypedObjectArray;
044:
045: public Object _primitiveArrayInObject;
046:
047: public Object _wrapperArrayInObject;
048: }
049:
050: private static final long[] data = new long[] { Long.MIN_VALUE,
051: Long.MIN_VALUE + 1, -5, -1, 0, 1, 5, Long.MAX_VALUE - 1,
052: Long.MAX_VALUE, };
053:
054: public static void main(String[] args) {
055: new TestRunner(LongHandlerUpdateTestCase.class).run();
056: }
057:
058: protected void assertArrays(Object obj) {
059: ItemArrays itemArrays = (ItemArrays) obj;
060:
061: assertPrimitiveArray(itemArrays._typedPrimitiveArray);
062: if (_db4oHeaderVersion == VersionServices.HEADER_30_40) {
063: // Bug in the oldest format: It accidentally long[] arrays to Long[] arrays.
064: assertWrapperArray((Long[]) itemArrays._primitiveArrayInObject);
065: } else {
066: assertPrimitiveArray((long[]) itemArrays._primitiveArrayInObject);
067: }
068: assertWrapperArray(itemArrays._typedWrapperArray);
069: assertUntypedObjectArray(itemArrays);
070: assertWrapperArray((Long[]) itemArrays._wrapperArrayInObject);
071: }
072:
073: /**
074: * @sharpen.remove Cannot convert 'object[]' to 'long[]' in .net
075: */
076: private void assertUntypedObjectArray(ItemArrays itemArrays) {
077: assertWrapperArray((Long[]) itemArrays._untypedObjectArray);
078: }
079:
080: private void assertPrimitiveArray(long[] primitiveArray) {
081: for (int i = 0; i < data.length; i++) {
082: assertAreEqual(data[i], primitiveArray[i]);
083: }
084: }
085:
086: private void assertWrapperArray(Long[] wrapperArray) {
087: for (int i = 0; i < data.length; i++) {
088: assertAreEqual(new Long(data[i]), wrapperArray[i]);
089: }
090: //FIXME: Arrays should also get a null Bitmap to fix.
091: //Assert.isNull(wrapperArray[wrapperArray.length - 1]);
092: }
093:
094: protected void assertValues(Object[] values) {
095: for (int i = 0; i < data.length; i++) {
096: Item item = (Item) values[i];
097: assertAreEqual(data[i], item._typedPrimitive);
098: assertAreEqual(new Long(data[i]), item._typedWrapper);
099: assertAreEqual(new Long(data[i]), item._untyped);
100: }
101:
102: Item nullItem = (Item) values[values.length - 1];
103: assertAreEqual(0, nullItem._typedPrimitive);
104: assertPrimitiveWrapperIsNullJavaOnly(nullItem._typedWrapper);
105: Assert.isNull(nullItem._untyped);
106: }
107:
108: private void assertAreEqual(long expected, long actual) {
109: if (expected == Long.MAX_VALUE && _handlerVersion == 0) {
110: // Bug in the oldest format: It treats Long.MAX_VALUE as null.
111: expected = 0;
112: }
113: Assert.areEqual(expected, actual);
114: }
115:
116: private void assertAreEqual(Object expected, Object actual) {
117: if (new Long(Long.MAX_VALUE).equals(expected)
118: && _handlerVersion == 0) {
119: // Bug in the oldest format: It treats Long.MAX_VALUE as null.
120: expected = null;
121: }
122: Assert.areEqual(expected, actual);
123: }
124:
125: protected Object createArrays() {
126: ItemArrays itemArrays = new ItemArrays();
127: itemArrays._typedPrimitiveArray = new long[data.length];
128: System.arraycopy(data, 0, itemArrays._typedPrimitiveArray, 0,
129: data.length);
130:
131: Long[] dataWrapper = new Long[data.length];
132: for (int i = 0; i < data.length; i++) {
133: dataWrapper[i] = new Long(data[i]);
134: }
135: itemArrays._typedWrapperArray = new Long[data.length + 1];
136: System.arraycopy(dataWrapper, 0, itemArrays._typedWrapperArray,
137: 0, dataWrapper.length);
138:
139: initializeUntypedObjectArray(itemArrays, dataWrapper);
140:
141: long[] primitiveArray = new long[data.length];
142: System.arraycopy(data, 0, primitiveArray, 0, data.length);
143: itemArrays._primitiveArrayInObject = primitiveArray;
144:
145: Long[] wrapperArray = new Long[data.length + 1];
146: System.arraycopy(dataWrapper, 0, wrapperArray, 0,
147: dataWrapper.length);
148: itemArrays._wrapperArrayInObject = wrapperArray;
149: return itemArrays;
150: }
151:
152: /**
153: * @sharpen.remove Cannot convert 'long[]' to 'object[]'
154: */
155: private void initializeUntypedObjectArray(ItemArrays itemArrays,
156: Long[] dataWrapper) {
157: itemArrays._untypedObjectArray = new Long[data.length + 1];
158: System.arraycopy(dataWrapper, 0,
159: itemArrays._untypedObjectArray, 0, dataWrapper.length);
160: }
161:
162: protected Object[] createValues() {
163: Item[] values = new Item[data.length + 1];
164: for (int i = 0; i < data.length; i++) {
165: Item item = new Item();
166: item._typedPrimitive = data[i];
167: item._typedWrapper = new Long(data[i]);
168: item._untyped = new Long(data[i]);
169: values[i] = item;
170: }
171: values[values.length - 1] = new Item();
172: return values;
173: }
174:
175: protected String typeName() {
176: return "long";
177: }
178:
179: }
|