Esempio n. 1
0
    bool isInRange(const vector3& posLeafCenter, const axisAlignedBox& octreeNode, const uint32& lod)
    {
        const vector3 sizeLeaf(t_tileContainer::voxelLength);
        const vector3 sizeLeafDoubled(sizeLeaf*2);
        const vector3 octreeNodeTwiceMinimum((octreeNode.getMinimum()/sizeLeafDoubled).getFloor()*sizeLeafDoubled);
        const axisAlignedBox octreeNodeTwice(octreeNodeTwiceMinimum, octreeNodeTwiceMinimum + octreeNode.getSize()*2.);

        const vector3 posLeafCenterScaled((posLeafCenter / sizeLeafDoubled).getFloor());

        if (lod != 0 && false)
        {
            if (octreeNode.getSize() == sizeLeaf)
            {
                const real radius(m_syncRadien[lod-1] / 2.);
                blub::sphere coll2(posLeafCenter, radius);
                if (coll2.intersects(octreeNode))
                {
                    return false;
                }
            }
        }

        const real radius(m_syncRadien[lod]);
        blub::sphere coll(posLeafCenterScaled * sizeLeafDoubled + sizeLeaf, radius);
        const bool result(coll.intersects(octreeNodeTwice));

        return result;
    }
Esempio n. 2
0
void CollationThaiTest::TestReordering(void) {
  // Until UCA 4.1, the collation code swapped Thai/Lao prevowels with the following consonants,
  // resulting in consonant+prevowel == prevowel+consonant.
  // From UCA 5.0 on, there are order-reversing contractions for prevowel+consonant.
  // From UCA 5.0 until UCA 6.1, there was a tertiary difference between
  // consonant+prevowel and prevowel+consonant.
  // In UCA 6.2, they compare equal again.
  // The test was modified to using a collator with strength=secondary,
  // ignoring possible tertiary differences.
  const char *tests[] = {
    "\\u0E41c\\u0301",       "=", "\\u0E41\\u0107", // composition
    "\\u0E41\\U0001D7CE",    "<", "\\u0E41\\U0001D7CF", // supplementaries
    "\\u0E41\\U0001D15F",    "=", "\\u0E41\\U0001D158\\U0001D165", // supplementary composition decomps to supplementary
    "\\u0E41\\U0002F802",    "=", "\\u0E41\\u4E41", // supplementary composition decomps to BMP
    "\\u0E41\\u0301",        "=", "\\u0E41\\u0301", // unsafe (just checking backwards iteration)
    "\\u0E41\\u0301\\u0316", "=", "\\u0E41\\u0316\\u0301",

    "\\u0e24\\u0e41",        "=", "\\u0e41\\u0e24", // exiting contraction bug
    "\\u0e3f\\u0e3f\\u0e24\\u0e41", "=", "\\u0e3f\\u0e3f\\u0e41\\u0e24",

    "abc\\u0E41c\\u0301",       "=", "abc\\u0E41\\u0107", // composition
    "abc\\u0E41\\U0001D000",    "<", "abc\\u0E41\\U0001D001", // supplementaries
    "abc\\u0E41\\U0001D15F",    "=", "abc\\u0E41\\U0001D158\\U0001D165", // supplementary composition decomps to supplementary
    "abc\\u0E41\\U0002F802",    "=", "abc\\u0E41\\u4E41", // supplementary composition decomps to BMP
    "abc\\u0E41\\u0301",        "=", "abc\\u0E41\\u0301", // unsafe (just checking backwards iteration)
    "abc\\u0E41\\u0301\\u0316", "=", "abc\\u0E41\\u0316\\u0301",

    "\\u0E41c\\u0301abc",       "=", "\\u0E41\\u0107abc", // composition
    "\\u0E41\\U0001D000abc",    "<", "\\u0E41\\U0001D001abc", // supplementaries
    "\\u0E41\\U0001D15Fabc",    "=", "\\u0E41\\U0001D158\\U0001D165abc", // supplementary composition decomps to supplementary
    "\\u0E41\\U0002F802abc",    "=", "\\u0E41\\u4E41abc", // supplementary composition decomps to BMP
    "\\u0E41\\u0301abc",        "=", "\\u0E41\\u0301abc", // unsafe (just checking backwards iteration)
    "\\u0E41\\u0301\\u0316abc", "=", "\\u0E41\\u0316\\u0301abc",

    "abc\\u0E41c\\u0301abc",       "=", "abc\\u0E41\\u0107abc", // composition
    "abc\\u0E41\\U0001D000abc",    "<", "abc\\u0E41\\U0001D001abc", // supplementaries
    "abc\\u0E41\\U0001D15Fabc",    "=", "abc\\u0E41\\U0001D158\\U0001D165abc", // supplementary composition decomps to supplementary
    "abc\\u0E41\\U0002F802abc",    "=", "abc\\u0E41\\u4E41abc", // supplementary composition decomps to BMP
    "abc\\u0E41\\u0301abc",        "=", "abc\\u0E41\\u0301abc", // unsafe (just checking backwards iteration)
    "abc\\u0E41\\u0301\\u0316abc", "=", "abc\\u0E41\\u0316\\u0301abc",
  };

  LocalPointer<Collator> coll2(coll->clone());
  UErrorCode status = U_ZERO_ERROR;
  coll2->setAttribute(UCOL_STRENGTH, UCOL_SECONDARY, status);
  if(U_FAILURE(status)) {
    errln("Unable to set the Thai collator clone to secondary strength");
    return;
  }
  compareArray(*coll2, tests, sizeof(tests)/sizeof(tests[0]));
 
  const char *rule = "& c < ab";
  const char *testcontraction[] = { "\\u0E41ab", ">", "\\u0E41c"}; // After UCA 4.1 Thai are normal so won't break a contraction
  UnicodeString rules;
  parseChars(rules, rule);
  LocalPointer<RuleBasedCollator> rcoll(new RuleBasedCollator(rules, status));
  if(U_SUCCESS(status)) {
    compareArray(*rcoll, testcontraction, 3);
  } else {
    errln("Couldn't instantiate collator from rules");
  }

}