KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > db4o > test > JdkComparatorSort


1 /* Copyright (C) 2004 - 2006 db4objects Inc. http://www.db4o.com
2
3 This file is part of the db4o open source object database.
4
5 db4o is free software; you can redistribute it and/or modify it under
6 the terms of version 2 of the GNU General Public License as published
7 by the Free Software Foundation and as clarified by db4objects' GPL
8 interpretation policy, available at
9 http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
10 Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
11 Suite 350, San Mateo, CA 94403, USA.
12
13 db4o is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License along
19 with this program; if not, write to the Free Software Foundation, Inc.,
20 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */

21 package com.db4o.test;
22
23 import java.util.*;
24
25 import com.db4o.*;
26 import com.db4o.query.*;
27
28 public class JdkComparatorSort {
29     private static class AscendingIdComparator implements Comparator {
30         public int compare(Object JavaDoc first, Object JavaDoc second) {
31             return ((JdkComparatorSort)first)._id-((JdkComparatorSort)second)._id;
32         }
33     }
34
35     private static class DescendingIdComparator implements Comparator {
36         public int compare(Object JavaDoc first, Object JavaDoc second) {
37             return ((JdkComparatorSort)second)._id-((JdkComparatorSort)first)._id;
38         }
39     }
40
41     private static class OddEvenIdComparator implements Comparator {
42         public int compare(Object JavaDoc first, Object JavaDoc second) {
43             int idA=((JdkComparatorSort)first)._id;
44             int idB=((JdkComparatorSort)second)._id;
45             int modA=idA%2;
46             int modB=idB%2;
47             if(modA!=modB) {
48                 return modA-modB;
49             }
50             return idA-idB;
51         }
52     }
53
54     private static class AscendingNameComparator implements Comparator {
55         public int compare(Object JavaDoc first, Object JavaDoc second) {
56             return ((JdkComparatorSort)first)._name.compareTo(((JdkComparatorSort)second)._name);
57         }
58     }
59
60     private static class SmallerThanThreePredicate extends Predicate {
61         public boolean match(JdkComparatorSort candidate) {
62             return candidate._id<3;
63         }
64     }
65     
66     public int _id;
67     public String JavaDoc _name;
68     
69     public JdkComparatorSort() {
70         this(0,null);
71     }
72     
73     public JdkComparatorSort(int id, String JavaDoc name) {
74         this._id = id;
75         this._name = name;
76     }
77
78     public void store() {
79         for(int i=0;i<4;i++) {
80             Test.store(new JdkComparatorSort(i,String.valueOf(3-i)));
81         }
82     }
83     
84     public void testByIdAscending() {
85         assertIdOrder(new AscendingIdComparator(),new int[]{0,1,2,3});
86     }
87
88     public void testByIdAscendingConstrained() {
89         Query query=Test.query();
90         query.constrain(getClass());
91         query.descend("_id").constrain(new Integer JavaDoc(3)).smaller();
92         assertIdOrder(query,new AscendingIdComparator(),new int[]{0,1,2});
93     }
94
95     public void testByIdAscendingNQ() {
96         ObjectSet result=Test.objectContainer().query(new SmallerThanThreePredicate(),new AscendingIdComparator());
97         assertIdOrder(result,new int[]{0,1,2});
98     }
99
100     public void testByIdDescending() {
101         assertIdOrder(new DescendingIdComparator(),new int[]{3,2,1,0});
102     }
103
104     public void testByIdDescendingConstrained() {
105         Query query=Test.query();
106         query.constrain(getClass());
107         query.descend("_id").constrain(new Integer JavaDoc(3)).smaller();
108         assertIdOrder(query,new DescendingIdComparator(),new int[]{2,1,0});
109     }
110
111     public void testByIdDescendingNQ() {
112         ObjectSet result=Test.objectContainer().query(new SmallerThanThreePredicate(),new DescendingIdComparator());
113         assertIdOrder(result,new int[]{2,1,0});
114     }
115
116     public void testByIdOddEven() {
117         assertIdOrder(new OddEvenIdComparator(),new int[]{0,2,1,3});
118     }
119
120     public void testByIdOddEvenConstrained() {
121         Query query=Test.query();
122         query.constrain(getClass());
123         query.descend("_id").constrain(new Integer JavaDoc(3)).smaller();
124         assertIdOrder(query,new OddEvenIdComparator(),new int[]{0,2,1});
125     }
126
127     public void testByIdOddEvenNQ() {
128         ObjectSet result=Test.objectContainer().query(new SmallerThanThreePredicate(),new OddEvenIdComparator());
129         assertIdOrder(result,new int[]{0,2,1});
130     }
131
132     public void testByNameAscending() {
133         assertIdOrder(new AscendingNameComparator(),new int[]{3,2,1,0});
134     }
135
136     public void testByNameAscendingConstrained() {
137         Query query=Test.query();
138         query.constrain(getClass());
139         query.descend("_id").constrain(new Integer JavaDoc(3)).smaller();
140         assertIdOrder(query,new AscendingNameComparator(),new int[]{2,1,0});
141     }
142     
143     public void testByNameAscendingNQ() {
144         ObjectSet result=Test.objectContainer().query(new SmallerThanThreePredicate(),new AscendingNameComparator());
145         assertIdOrder(result,new int[]{2,1,0});
146     }
147
148     private void assertIdOrder(Comparator comparator,int[] ids) {
149         Query query=Test.query();
150         query.constrain(getClass());
151         assertIdOrder(query,comparator,ids);
152     }
153
154     private void assertIdOrder(Query query,Comparator comparator,int[] ids) {
155         query.sortBy(comparator);
156         ObjectSet result=query.execute();
157         assertIdOrder(result,ids);
158     }
159
160     private void assertIdOrder(ObjectSet result,int[] ids) {
161         Test.ensureEquals(ids.length,result.size());
162         for (int idx = 0; idx < ids.length; idx++) {
163             Test.ensureEquals(ids[idx], ((JdkComparatorSort)result.next())._id);
164         }
165     }
166     
167     public static void main(String JavaDoc[] args) {
168         Test.run(JdkComparatorSort.class);
169     }
170 }
171
Popular Tags