1 27 package org.htmlparser.tests.utilTests; 28 29 import java.io.File ; 30 import java.util.StringTokenizer ; 31 import java.util.Date ; 32 import java.util.Enumeration ; 33 import java.util.Vector ; 34 35 import org.htmlparser.tests.ParserTestCase; 36 import org.htmlparser.util.sort.Ordered; 37 import org.htmlparser.util.sort.Sort; 38 import org.htmlparser.util.sort.Sortable; 39 40 43 public class SortTest extends ParserTestCase 44 { 45 static 46 { 47 System.setProperty ("org.htmlparser.tests.utilTests.SortTest", "SortTest"); 48 } 49 50 53 public SortTest (String name) 54 { 55 super (name); 56 } 57 58 61 class Item implements Ordered 62 { 63 String mData; 64 65 public Item (String data) 66 { 67 mData = data; 68 } 69 70 public int compare (Object o) 71 { 72 return (mData.compareTo (((Item)o).mData)); 73 } 74 75 public String toString () 76 { 77 return (mData); 78 } 79 } 80 81 84 class List extends Vector implements Sortable 85 { 86 List (String words) 87 { 88 StringTokenizer toks; 89 90 toks = new StringTokenizer (words); 91 outer: 92 while (toks.hasMoreTokens ()) 93 addElement (new Item (toks.nextToken ())); 94 Sort.QuickSort ((Sortable)this); 95 } 96 97 101 public int first () 102 { 103 return (0); 104 } 105 public int last () 106 { 107 return (size () - 1); 108 } 109 public Ordered fetch (int index, Ordered reuse) 110 { 111 return ((Ordered)elementAt (index)); 112 } 113 public void swap (int i, int j) 114 { 115 Object o = elementAt (i); 116 setElementAt (elementAt (j), i); 117 setElementAt (o, j); 118 } 119 } 120 121 124 class SortableFile extends File implements Ordered 125 { 126 public SortableFile (String name) 127 { 128 super (name); 129 } 130 131 public SortableFile (File dir, String name) 132 { 133 super (dir, name); 134 } 135 136 public int compare (Object o) 137 { 138 long ret; 139 140 File f = (File )o; 141 142 ret = lastModified () - f.lastModified (); 143 if (ret < Integer.MIN_VALUE) 144 ret = Integer.MIN_VALUE; 145 if (ret > Integer.MAX_VALUE) 146 ret = Integer.MAX_VALUE; 147 148 return ((int)ret); 149 } 150 } 151 152 155 public void testQuickSort () 156 { 157 Item[] words = 158 { 159 new Item ("gazelle"), 160 new Item ("infant"), 161 new Item ("toenail"), 162 new Item ("breast"), 163 new Item ("Derrick"), 164 new Item ("toast"), 165 new Item ("caretaker"), 166 }; 167 168 Sort.QuickSort (words); 169 170 171 assertEquals ("element 0 wrong ", "Derrick", words[0].mData); 172 assertEquals ("element 1 wrong ", "breast", words[1].mData); 173 assertEquals ("element 2 wrong ", "caretaker", words[2].mData); 174 assertEquals ("element 3 wrong ", "gazelle", words[3].mData); 175 assertEquals ("element 4 wrong ", "infant", words[4].mData); 176 assertEquals ("element 5 wrong ", "toast", words[5].mData); 177 assertEquals ("element 6 wrong ", "toenail", words[6].mData); 178 179 } 180 181 184 public void testSortList () 185 { 186 List list = new List ( 187 "'Twas brillig and the slithy toves " + 188 "Did gyre and gimble in the wabe " + 189 "All mimsy were the borogroves " + 190 "And the mome raths outgrabe."); 191 StringBuffer b = new StringBuffer (); 192 for (Enumeration e = list.elements (); e.hasMoreElements ();) 193 { 194 if (0 != b.length ()) 195 b.append (' '); 196 b.append (e.nextElement ()); 197 } 198 assertEquals ("wrong ordering", 199 "'Twas All And Did and and borogroves " 200 + "brillig gimble gyre in mimsy mome outgrabe. " 201 + "raths slithy the the the the toves wabe were", 202 b.toString ()); 203 204 } 205 206 209 public void testSortVector () 210 { 211 Vector directory = new Vector (); 213 File dir = new File ("."); 214 String [] listing = dir.list (); 215 for (int i = 0; i < listing.length; i++) 216 { 217 File f = new SortableFile (dir, listing[i]); 218 if (f.isFile ()) 219 directory.addElement (f); 220 } 221 222 Sort.QuickSort (directory); 223 224 int index = directory.size () * 2 / 3; 226 SortableFile test = 227 (SortableFile)directory.elementAt (index); 228 directory.removeElementAt (index); 229 int ordinal = Sort.bsearch (directory, test); 230 assertEquals ("ordinal not correct value", index, ordinal); 231 232 directory.insertElementAt (test, ordinal); 234 Date last = null; 235 for (int i = 0; i < directory.size (); i++) 236 { 237 File f = (File )directory.elementAt (i); 238 String name = f.getName (); 239 Date date = new Date (f.lastModified ()); 240 if (null != last) 241 assertTrue ("file " + name + " has a date before", !date.before (last)); 242 last = date; 243 } 244 } 245 } 246 | Popular Tags |