1 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 first, Object second) { 31 return ((JdkComparatorSort)first)._id-((JdkComparatorSort)second)._id; 32 } 33 } 34 35 private static class DescendingIdComparator implements Comparator { 36 public int compare(Object first, Object second) { 37 return ((JdkComparatorSort)second)._id-((JdkComparatorSort)first)._id; 38 } 39 } 40 41 private static class OddEvenIdComparator implements Comparator { 42 public int compare(Object first, Object 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 first, Object 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 _name; 68 69 public JdkComparatorSort() { 70 this(0,null); 71 } 72 73 public JdkComparatorSort(int id, String 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 (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 (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 (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 (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 [] args) { 168 Test.run(JdkComparatorSort.class); 169 } 170 } 171 | Popular Tags |