174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes/* 2994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * this work for additional information regarding copyright ownership. 5994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * (the "License"); you may not use this file except in compliance with 7994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * the License. You may obtain a copy of the License at 874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes * 9994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 1074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes * 11994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * See the License for the specific language governing permissions and 15994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * limitations under the License. 16994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes */ 17994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes 18994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughespackage org.apache.harmony.tests.java.text; 19994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes 20994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.CollationElementIterator; 21994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.Collator; 22994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.RuleBasedCollator; 23994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.StringCharacterIterator; 24994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.util.Locale; 25994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes 26994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport junit.framework.TestCase; 27994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes 28994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes/** 29994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Test CollationElementIterator 3074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes * 31994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Only test normal condition. 3274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes * 33994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes */ 34994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughespublic class CollationElementIteratorTest extends TestCase { 35994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes 3674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes private RuleBasedCollator coll; 373df3bfcbad6f4da20964424c4772985d1b1586a1Rayhaan Jaufeerally private RuleBasedCollator traditionalSpanishColl; 3874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 3974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes protected void setUp() { 4074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes coll = (RuleBasedCollator) Collator.getInstance(Locale.US); 413df3bfcbad6f4da20964424c4772985d1b1586a1Rayhaan Jaufeerally traditionalSpanishColl = (RuleBasedCollator) 423df3bfcbad6f4da20964424c4772985d1b1586a1Rayhaan Jaufeerally Collator.getInstance(Locale.forLanguageTag("es-u-co-trad")); 4374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 4474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 4574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testGetOffset() { 4674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "abc"; 4774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = coll.getCollationElementIterator(text); 4874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int[] offsets = { 0, 1, 2, 3 }; 4974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int offset = iterator.getOffset(); 5074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int i = 0; 5174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(offsets[i++], offset); 5274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (offset != text.length()) { 5374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.next(); 5474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes offset = iterator.getOffset(); 5574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(offsets[i++], offset); 5674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 5774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 5874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 5974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testNext() { 6074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "abc"; 6174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = coll.getCollationElementIterator(text); 6274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int[] orders = new int[text.length()]; 6374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 6474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int i = 0; 6574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (order != CollationElementIterator.NULLORDER) { 6674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes orders[i++] = order; 6774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 6874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 6974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 7074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int offset = iterator.getOffset(); 7174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(text.length(), offset); 7255dfcd8b9609f112b0542af6a705080d98e00d2accornelius 7355dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.reset(); 7474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.previous(); 7574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 7674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (order != CollationElementIterator.NULLORDER) { 7774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(orders[--i], order); 7874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.previous(); 7974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 8074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 8174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(0, iterator.getOffset()); 8274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 8374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 8474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testPrevious() { 8574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(Locale.US); 8674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "abc"; 8774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = coll 8874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes .getCollationElementIterator(text); 8974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int[] orders = new int[text.length()]; 9074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 9174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int i = 0; 9274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (order != CollationElementIterator.NULLORDER) { 9374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes orders[i++] = order; 9474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 9574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 9674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 9774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int offset = iterator.getOffset(); 9874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(text.length(), offset); 9955dfcd8b9609f112b0542af6a705080d98e00d2accornelius 10055dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.reset(); 10174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.previous(); 10274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 10374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (order != CollationElementIterator.NULLORDER) { 10474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(orders[--i], order); 10574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.previous(); 10674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 10774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 10874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(0, iterator.getOffset()); 10974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 11074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 11174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testReset() { 11274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "abc"; 11374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = coll.getCollationElementIterator(text); 11474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int[] orders = new int[text.length()]; 11574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 11674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int i = 0; 11774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (order != CollationElementIterator.NULLORDER) { 11874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes orders[i++] = order; 11974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 12074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 12174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 12274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int offset = iterator.getOffset(); 12374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(text.length(), offset); 12474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 12574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.reset(); 12674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(0, iterator.getOffset()); 12774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 12874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 12974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testGetMaxExpansion() { 13074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "cha"; 131ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance( 132ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath Locale.forLanguageTag("es-u-co-trad")); 13374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 13474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 13574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (order != CollationElementIterator.NULLORDER) { 13674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(1, iterator.getMaxExpansion(order)); 13774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 13874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 13974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 14074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 14174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testPrimaryOrder() { 14274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("de", "DE")); 14374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "\u00e6"; 14474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 14574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 14674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int pOrder = CollationElementIterator.primaryOrder(order); 14774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator2 = rbColl.getCollationElementIterator("ae"); 14874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order2 = iterator2.next(); 14974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int pOrder2 = CollationElementIterator.primaryOrder(order2); 15074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(pOrder, pOrder2); 15174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 15274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 15374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testSecondaryOrder() { 15474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("fr", "FR")); 15574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "a\u00e0"; 15674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 15774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 15874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int sOrder1 = CollationElementIterator.secondaryOrder(order); 15974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 16074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 16174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int sOrder2 = CollationElementIterator.secondaryOrder(order); 16274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 16374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(sOrder1, sOrder2); 16474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 16574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 16674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testTertiaryOrder() { 16774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("fr", "FR")); 16874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "abAB"; 16974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 17074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 17174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int tOrder1 = CollationElementIterator.tertiaryOrder(order); 17274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 17374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int tOrder2 = CollationElementIterator.tertiaryOrder(order); 17474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(tOrder1, tOrder2); 17574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 17674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 17774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes tOrder1 = CollationElementIterator.tertiaryOrder(order); 17874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 17974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes tOrder2 = CollationElementIterator.tertiaryOrder(order); 18074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(tOrder1, tOrder2); 18174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 18274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 18374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testSetOffset() { 184ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance( 185ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath Locale.forLanguageTag("es-u-co-trad")); 18674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "cha"; 18774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 18855dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.setOffset(0); 18955dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(0, iterator.getOffset()); 19074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setOffset(1); 19155dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(0, iterator.getOffset()); 19255dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.setOffset(2); 19355dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(2, iterator.getOffset()); 19474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 19574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 19674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testSetTextString() { 19774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "caa"; 1983df3bfcbad6f4da20964424c4772985d1b1586a1Rayhaan Jaufeerally CollationElementIterator iterator = traditionalSpanishColl.getCollationElementIterator(text); 19955dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.setOffset(0); 20055dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(0, iterator.getOffset()); 20174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setOffset(1); 20274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(1, iterator.getOffset()); 20355dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.setOffset(2); 20455dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(2, iterator.getOffset()); 20574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setText("cha"); 20655dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.setOffset(0); 20755dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(0, iterator.getOffset()); 20874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setOffset(1); 20955dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(0, iterator.getOffset()); 21055dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.setOffset(2); 21155dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(2, iterator.getOffset()); 21274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 21374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 21474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testSetTextCharacterIterator() { 21574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "caa"; 2163df3bfcbad6f4da20964424c4772985d1b1586a1Rayhaan Jaufeerally CollationElementIterator iterator = traditionalSpanishColl.getCollationElementIterator(text); 21774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setOffset(1); 21874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(1, iterator.getOffset()); 2193df3bfcbad6f4da20964424c4772985d1b1586a1Rayhaan Jaufeerally // In traditional spanish the "ch" acts as a single character so the iterator cannot stop 2203df3bfcbad6f4da20964424c4772985d1b1586a1Rayhaan Jaufeerally // between the 'c' and the 'h', it goes back if that is attempted. 22174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setText(new StringCharacterIterator("cha")); 22274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setOffset(1); 2233df3bfcbad6f4da20964424c4772985d1b1586a1Rayhaan Jaufeerally assertEquals(0, iterator.getOffset()); 22474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 225994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes} 226