Search in sources :

Example 1 with UnicodeMap

use of android.icu.dev.util.UnicodeMap in project j2objc by google.

the class UnicodeMapTest method TestUnicodeMapGeneralCategory.

public void TestUnicodeMapGeneralCategory() {
    logln("Setting General Category");
    UnicodeMap<String> map1 = new UnicodeMap();
    Map<Integer, String> map2 = new HashMap<Integer, String>();
    // Map<Integer, String> map3 = new TreeMap<Integer, String>();
    map1 = new UnicodeMap<String>();
    map2 = new TreeMap<Integer, String>();
    for (int cp = 0; cp <= SET_LIMIT; ++cp) {
        int enumValue = UCharacter.getIntPropertyValue(cp, propEnum);
        // if (enumValue <= 0) continue; // for smaller set
        String value = UCharacter.getPropertyValueName(propEnum, enumValue, UProperty.NameChoice.LONG);
        map1.put(cp, value);
        map2.put(cp, value);
    }
    checkNext(map1, map2, Integer.MAX_VALUE);
    logln("Comparing General Category");
    check(map1, map2, -1);
    logln("Comparing Values");
    Set<String> values1 = map1.getAvailableValues(new TreeSet<String>());
    Set<String> values2 = new TreeSet<String>(map2.values());
    if (!TestBoilerplate.verifySetsIdentical(this, values1, values2)) {
        throw new IllegalArgumentException("Halting");
    }
    logln("Comparing Sets");
    for (Iterator<String> it = values1.iterator(); it.hasNext(); ) {
        String value = it.next();
        logln(value == null ? "null" : value);
        UnicodeSet set1 = map1.keySet(value);
        UnicodeSet set2 = TestBoilerplate.getSet(map2, value);
        if (!TestBoilerplate.verifySetsIdentical(this, set1, set2)) {
            throw new IllegalArgumentException("Halting");
        }
    }
}
Also used : HashMap(java.util.HashMap) UnicodeSet(android.icu.text.UnicodeSet) TreeSet(java.util.TreeSet) UnicodeMap(android.icu.dev.util.UnicodeMap)

Example 2 with UnicodeMap

use of android.icu.dev.util.UnicodeMap in project j2objc by google.

the class UnicodeMapTest method checkNext.

private void checkNext(UnicodeMap<String> map1, Map<Integer, String> map2, int limit) {
    logln("Comparing nextRange");
    Map localMap = new TreeMap();
    UnicodeMapIterator<String> mi = new UnicodeMapIterator<String>(map1);
    while (mi.nextRange()) {
        logln(Utility.hex(mi.codepoint) + ".." + Utility.hex(mi.codepointEnd) + " => " + mi.value);
        for (int i = mi.codepoint; i <= mi.codepointEnd; ++i) {
            // if (i >= limit) continue;
            localMap.put(i, mi.value);
        }
    }
    checkMap(map2, localMap);
    logln("Comparing next");
    mi.reset();
    localMap = new TreeMap();
    // String lastValue = null;
    while (mi.next()) {
        // if (!UnicodeMap.areEqual(lastValue, mi.value)) {
        // // System.out.println("Change: " + Utility.hex(mi.codepoint) + " => " + mi.value);
        // lastValue = mi.value;
        // }
        // if (mi.codepoint >= limit) continue;
        localMap.put(mi.codepoint, mi.value);
    }
    checkMap(map2, localMap);
}
Also used : UnicodeMapIterator(android.icu.dev.util.UnicodeMapIterator) TreeMap(java.util.TreeMap) UnicodeMap(android.icu.dev.util.UnicodeMap) HashMap(java.util.HashMap) TreeMap(java.util.TreeMap) Map(java.util.Map) SortedMap(java.util.SortedMap)

Example 3 with UnicodeMap

use of android.icu.dev.util.UnicodeMap in project j2objc by google.

the class UnicodeMapTest method TestModify.

@Test
public void TestModify() {
    Random random = new Random(0);
    UnicodeMap unicodeMap = new UnicodeMap();
    HashMap hashMap = new HashMap();
    String[] values = { null, "the", "quick", "brown", "fox" };
    for (int count = 1; count <= MODIFY_TEST_ITERATIONS; ++count) {
        String value = values[random.nextInt(values.length)];
        // test limited range
        int start = random.nextInt(MODIFY_TEST_LIMIT);
        int end = random.nextInt(MODIFY_TEST_LIMIT);
        if (start > end) {
            int temp = start;
            start = end;
            end = temp;
        }
        int modCount = count & 0xFF;
        if (modCount == 0 && isVerbose()) {
            logln("***" + count);
            logln(unicodeMap.toString());
        }
        unicodeMap.putAll(start, end, value);
        if (modCount == 1 && isVerbose()) {
            logln(">>>\t" + Utility.hex(start) + ".." + Utility.hex(end) + "\t" + value);
            logln(unicodeMap.toString());
        }
        for (int i = start; i <= end; ++i) {
            hashMap.put(new Integer(i), value);
        }
        if (!hasSameValues(unicodeMap, hashMap)) {
            errln("Failed at " + count);
        }
    }
}
Also used : Random(java.util.Random) HashMap(java.util.HashMap) UnicodeMap(android.icu.dev.util.UnicodeMap) Test(org.junit.Test)

Example 4 with UnicodeMap

use of android.icu.dev.util.UnicodeMap in project j2objc by google.

the class TransliteratorTest method TestSourceTargetSet2.

@Test
public void TestSourceTargetSet2() {
    Normalizer2 nfc = Normalizer2.getNFCInstance();
    Normalizer2 nfd = Normalizer2.getNFDInstance();
    // Normalizer2 nfkd = Normalizer2.getInstance(null, "nfkd", Mode.DECOMPOSE);
    // UnicodeSet nfkdSource = new UnicodeSet();
    // UnicodeSet nfkdTarget = new UnicodeSet();
    // for (int i = 0; i <= 0x10FFFF; ++i) {
    // if (nfkd.isInert(i)) {
    // continue;
    // }
    // nfkdSource.add(i);
    // String t = nfkd.getDecomposition(i);
    // if (t != null) {
    // nfkdTarget.addAll(t);
    // } else {
    // nfkdTarget.add(i);
    // }
    // }
    // nfkdSource.freeze();
    // nfkdTarget.freeze();
    // logln("NFKD Source: " + nfkdSource.toPattern(false));
    // logln("NFKD Target: " + nfkdTarget.toPattern(false));
    UnicodeMap<UnicodeSet> leadToTrail = new UnicodeMap();
    UnicodeMap<UnicodeSet> leadToSources = new UnicodeMap();
    UnicodeSet nonStarters = new UnicodeSet("[:^ccc=0:]").freeze();
    CanonicalIterator can = new CanonicalIterator("");
    UnicodeSet disorderedMarks = new UnicodeSet();
    for (int i = 0; i <= 0x10FFFF; ++i) {
        String s = nfd.getDecomposition(i);
        if (s == null) {
            continue;
        }
        can.setSource(s);
        for (String t = can.next(); t != null; t = can.next()) {
            disorderedMarks.add(t);
        }
        // if s has two code points, (or more), add the lead/trail information
        int first = s.codePointAt(0);
        int firstCount = Character.charCount(first);
        if (s.length() == firstCount)
            continue;
        String trailString = s.substring(firstCount);
        // add all the trail characters
        if (!nonStarters.containsSome(trailString)) {
            continue;
        }
        UnicodeSet trailSet = leadToTrail.get(first);
        if (trailSet == null) {
            leadToTrail.put(first, trailSet = new UnicodeSet());
        }
        // add remaining trails
        trailSet.addAll(trailString);
        // add the sources
        UnicodeSet sourcesSet = leadToSources.get(first);
        if (sourcesSet == null) {
            leadToSources.put(first, sourcesSet = new UnicodeSet());
        }
        sourcesSet.add(i);
    }
    for (Entry<String, UnicodeSet> x : leadToSources.entrySet()) {
        String lead = x.getKey();
        UnicodeSet sources = x.getValue();
        UnicodeSet trailSet = leadToTrail.get(lead);
        for (String source : sources) {
            for (String trail : trailSet) {
                can.setSource(source + trail);
                for (String t = can.next(); t != null; t = can.next()) {
                    if (t.endsWith(trail))
                        continue;
                    disorderedMarks.add(t);
                }
            }
        }
    }
    for (String s : nonStarters) {
        disorderedMarks.add("\u0345" + s);
        disorderedMarks.add(s + "\u0323");
        String xx = nfc.normalize("\u01EC" + s);
        if (!xx.startsWith("\u01EC")) {
            logln("??");
        }
    }
    // for (int i = 0; i <= 0x10FFFF; ++i) {
    // String s = nfkd.getDecomposition(i);
    // if (s != null) {
    // disorderedMarks.add(s);
    // disorderedMarks.add(nfc.normalize(s));
    // addDerivedStrings(nfc, disorderedMarks, s);
    // }
    // s = nfd.getDecomposition(i);
    // if (s != null) {
    // disorderedMarks.add(s);
    // }
    // if (!nfc.isInert(i)) {
    // if (i == 0x00C0) {
    // logln("\u00C0");
    // }
    // can.setSource(s+"\u0334");
    // for (String t = can.next(); t != null; t = can.next()) {
    // addDerivedStrings(nfc, disorderedMarks, t);
    // }
    // can.setSource(s+"\u0345");
    // for (String t = can.next(); t != null; t = can.next()) {
    // addDerivedStrings(nfc, disorderedMarks, t);
    // }
    // can.setSource(s+"\u0323");
    // for (String t = can.next(); t != null; t = can.next()) {
    // addDerivedStrings(nfc, disorderedMarks, t);
    // }
    // }
    // }
    logln("Test cases: " + disorderedMarks.size());
    disorderedMarks.addAll(0, 0x10FFFF).freeze();
    logln("isInert \u0104 " + nfc.isInert('\u0104'));
    Object[][] rules = { { ":: [:sc=COMMON:] any-name;", null }, { ":: [:Greek:] hex-any/C;", null }, { ":: [:Greek:] any-hex/C;", null }, { ":: [[:Mn:][:Me:]] remove;", null }, { ":: [[:Mn:][:Me:]] null;", null }, { ":: lower;", null }, { ":: upper;", null }, { ":: title;", null }, { ":: CaseFold;", null }, { ":: NFD;", null }, { ":: NFC;", null }, { ":: NFKD;", null }, { ":: NFKC;", null }, { ":: [[:Mn:][:Me:]] NFKD;", null }, { ":: Latin-Greek;", null }, { ":: [:Latin:] NFKD;", null }, { ":: NFKD;", null }, { ":: NFKD;\n" + ":: [[:Mn:][:Me:]] remove;\n" + ":: NFC;", null } };
    for (Object[] rulex : rules) {
        String rule = (String) rulex[0];
        Transliterator trans = Transliterator.createFromRules("temp", rule, Transliterator.FORWARD);
        UnicodeSet actualSource = trans.getSourceSet();
        UnicodeSet actualTarget = trans.getTargetSet();
        UnicodeSet empiricalSource = new UnicodeSet();
        UnicodeSet empiricalTarget = new UnicodeSet();
        String ruleDisplay = rule.replace("\n", "\t\t");
        UnicodeSet toTest = disorderedMarks;
        // if (rulex[1] != null) {
        // toTest = new UnicodeSet(disorderedMarks);
        // toTest.addAll((UnicodeSet) rulex[1]);
        // }
        String test = nfd.normalize("\u0104");
        boolean DEBUG = true;
        @SuppressWarnings("unused") int // for debugging
        count = 0;
        for (String s : toTest) {
            if (s.equals(test)) {
                logln(test);
            }
            String t = trans.transform(s);
            if (!s.equals(t)) {
                if (!isAtomic(s, t, trans)) {
                    isAtomic(s, t, trans);
                    continue;
                }
                // }
                if (DEBUG) {
                    if (!actualSource.containsAll(s)) {
                        count++;
                    }
                    if (!actualTarget.containsAll(t)) {
                        count++;
                    }
                }
                addSourceTarget(s, empiricalSource, t, empiricalTarget);
            }
        }
        assertEquals("getSource(" + ruleDisplay + ")", empiricalSource, actualSource, SetAssert.MISSING_OK);
        assertEquals("getTarget(" + ruleDisplay + ")", empiricalTarget, actualTarget, SetAssert.MISSING_OK);
    }
}
Also used : Normalizer2(android.icu.text.Normalizer2) CaseInsensitiveString(android.icu.util.CaseInsensitiveString) ReplaceableString(android.icu.text.ReplaceableString) UnicodeSet(android.icu.text.UnicodeSet) CanonicalIterator(android.icu.text.CanonicalIterator) UnicodeMap(android.icu.dev.util.UnicodeMap) Transliterator(android.icu.text.Transliterator) Test(org.junit.Test)

Example 5 with UnicodeMap

use of android.icu.dev.util.UnicodeMap in project j2objc by google.

the class UnicodeMapBoilerplateTest method _addTestObject.

/* (non-Javadoc)
     * @see android.icu.dev.test.TestBoilerplate#_addTestObject(java.util.List)
     */
protected boolean _addTestObject(List<UnicodeMap> list) {
    if (list.size() > 30)
        return false;
    UnicodeMap result = new UnicodeMap();
    for (int i = 0; i < 50; ++i) {
        int start = random.nextInt(25);
        String value = TEST_VALUES[random.nextInt(TEST_VALUES.length)];
        result.put(start, value);
    }
    list.add(result);
    return true;
}
Also used : UnicodeMap(android.icu.dev.util.UnicodeMap)

Aggregations

UnicodeMap (android.icu.dev.util.UnicodeMap)8 UnicodeSet (android.icu.text.UnicodeSet)4 HashMap (java.util.HashMap)4 Test (org.junit.Test)3 TreeSet (java.util.TreeSet)2 UnicodeMapIterator (android.icu.dev.util.UnicodeMapIterator)1 UCharacter (android.icu.lang.UCharacter)1 CanonicalIterator (android.icu.text.CanonicalIterator)1 Normalizer2 (android.icu.text.Normalizer2)1 ReplaceableString (android.icu.text.ReplaceableString)1 Transliterator (android.icu.text.Transliterator)1 CaseInsensitiveString (android.icu.util.CaseInsensitiveString)1 HashSet (java.util.HashSet)1 Map (java.util.Map)1 Random (java.util.Random)1 Set (java.util.Set)1 SortedMap (java.util.SortedMap)1 SortedSet (java.util.SortedSet)1 TreeMap (java.util.TreeMap)1