blob: c7e9bd99a470e3775637ccb3dc2b9f99811eacff [file] [log] [blame]
/*
* Copyright 2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* Test_Freezer.java
*
* Created on April 12, 2003, 4:15 PM
*/
package org.apache.jdo.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.jdo.impl.sco.Freezer;
import org.apache.jdo.test.util.AbstractTest;
import org.apache.jdo.test.util.JDORITestRunner;
/**
*
* @author Craig Russell
* @version 1.0.1
*/
public class Test_Freezer extends AbstractTest {
/** */
static private final short s33 = 33;
/** */
private boolean verbose;
/** */
public static void main(String args[]) {
JDORITestRunner.run(Test_Freezer.class);
}
/** */
protected void setUp() { }
/** */
protected void tearDown() { }
/** */
public void testSet() {
Set ts = new HashSet();
ts.add(new Integer(12));
ts.add(new Integer(12));
ts.add(new Integer(12));
ts.add(new Integer(12));
ts.add(new java.util.Date(2000));
ts.add(new Float(2000));
ts.add(new Float(2020));
ts.add(new Float(2000.1));
ts.add(new Integer(112));
ts.add(new Integer(212));
ts.add(new Float(2000.001));
ts.add(new Float(2000.00001));
ts.add(new Short(s33));
ts.add(new Integer(2));
ts.add(new Long(3456789L));
ts.add(new java.util.Date(1000));
List expected = new ArrayList();
expected.add(new Float(2000));
expected.add(new Float(2000.001));
expected.add(new Float(2000.1));
expected.add(new Float(2020));
expected.add(new Integer(2));
expected.add(new Integer(12));
expected.add(new Integer(112));
expected.add(new Integer(212));
expected.add(new Long(3456789L));
expected.add(new Short(s33));
expected.add(new java.util.Date(1000));
expected.add(new java.util.Date(2000));
// now freeze the set
Object[] ordered = Freezer.freeze(ts, ts.size());
List al = Arrays.asList(ordered);
if (verbose)
for (Iterator it=al.iterator(); it.hasNext();) {
Object o = it.next();
System.out.println(o.getClass().getName() + ":" + o.toString());
}
assertEquals("freezing a Set returned unexpected result", expected, al);
}
/** */
public void testMap() {
Map hm = new HashMap();
hm.put(new Integer(22), new Integer(1000));
hm.put(new java.sql.Time(2004), new Integer(6));
hm.put(new Integer(22), new Integer(1000));
hm.put(new Integer(22), new Integer(1000));
hm.put(new Integer(22), new Integer(16));
hm.put(new java.sql.Date(2001), new Integer(2));
hm.put(new java.util.Date(2000), new Integer(1));
hm.put(new Float(2000.), new Integer(10));
hm.put(new Float(2020), new Integer(14));
hm.put(new org.apache.jdo.impl.sco.SqlTime(3000), new Integer(7));
hm.put(new java.sql.Date(2002), new Integer(3));
hm.put(new Float(2000.1), new Integer(13));
hm.put(new Integer(112), new Integer(17));
hm.put(new org.apache.jdo.impl.sco.SqlDate(3004), new Integer(5));
hm.put(new Integer(212), new Integer(18));
hm.put(new java.sql.Date(2003), new Integer(4));
hm.put(new Float(2000.001), new Integer(11));
hm.put(new Float(2000.01), new Integer(12));
hm.put(new java.sql.Timestamp(2004), new Integer(8));
hm.put(new org.apache.jdo.impl.sco.SqlTimestamp(3002), new Integer(9));
hm.put(new Short(s33), new Integer(20));
hm.put(new Integer(2), new Integer(15));
hm.put(new Long(3456789L), new Integer(19));
hm.put(new java.util.Date(1000), new Integer(0));
List expected = new ArrayList();
expected.add(new SimpleEntry(new Float(2000.), new Integer(10)));
expected.add(new SimpleEntry(new Float(2000.001), new Integer(11)));
expected.add(new SimpleEntry(new Float(2000.01), new Integer(12)));
expected.add(new SimpleEntry(new Float(2000.1), new Integer(13)));
expected.add(new SimpleEntry(new Float(2020), new Integer(14)));
expected.add(new SimpleEntry(new Integer(2), new Integer(15)));
expected.add(new SimpleEntry(new Integer(22), new Integer(16)));
expected.add(new SimpleEntry(new Integer(112), new Integer(17)));
expected.add(new SimpleEntry(new Integer(212), new Integer(18)));
expected.add(new SimpleEntry(new Long(3456789L), new Integer(19)));
expected.add(new SimpleEntry(new Short(s33), new Integer(20)));
expected.add(new SimpleEntry(new java.util.Date(1000), new Integer(0)));
expected.add(new SimpleEntry(new java.util.Date(2000), new Integer(1)));
expected.add(new SimpleEntry(new java.sql.Date(2001), new Integer(2)));
expected.add(new SimpleEntry(new java.sql.Date(2002), new Integer(3)));
expected.add(new SimpleEntry(new java.sql.Date(2003), new Integer(4)));
expected.add(new SimpleEntry(new org.apache.jdo.impl.sco.SqlDate(3004), new Integer(5)));
expected.add(new SimpleEntry(new java.sql.Time(2004), new Integer(6)));
expected.add(new SimpleEntry(new org.apache.jdo.impl.sco.SqlTime(3000), new Integer(7)));
expected.add(new SimpleEntry(new java.sql.Timestamp(2004), new Integer(8)));
expected.add(new SimpleEntry(new org.apache.jdo.impl.sco.SqlTimestamp(3002), new Integer(9)));
Object[] ordered = Freezer.freeze(hm, hm.size());
List al = Arrays.asList(ordered);
if (verbose)
for (Iterator it=al.iterator(); it.hasNext();) {
Map.Entry o = (Map.Entry)it.next();
Object key = o.getKey();
Object value = o.getValue();
System.out.println(" " + value + " " + key.getClass().getName() + ":" + key.toString());
}
assertEquals("freezing a Map returned unexpected result", expected, al);
}
/** */
static class SimpleEntry implements Map.Entry {
Object key;
Object value;
public SimpleEntry(Object key, Object value) {
this.key = key;
this.value = value;
}
public SimpleEntry(Map.Entry e) {
this.key = e.getKey();
this.value = e.getValue();
}
public Object getKey() {
return key;
}
public Object getValue() {
return value;
}
public Object setValue(Object value) {
Object oldValue = this.value;
this.value = value;
return oldValue;
}
public boolean equals(Object o) {
if (!(o instanceof Map.Entry))
return false;
Map.Entry e = (Map.Entry)o;
return eq(key, e.getKey()) && eq(value, e.getValue());
}
public int hashCode() {
Object v;
return ((key == null) ? 0 : key.hashCode()) ^
((value == null) ? 0 : value.hashCode());
}
public String toString() {
return key + "=" + value;
}
private static boolean eq(Object o1, Object o2) {
return (o1 == null ? o2 == null : o1.equals(o2));
}
}
}