Home | History | Annotate | Download | only in gpu
      1 
      2 /*
      3  * Copyright 2010 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 #include "GrBinHashKey.h"
     10 #include "GrDrawTarget.h"
     11 #include "SkMatrix.h"
     12 #include "GrRedBlackTree.h"
     13 
     14 // FIXME: needs to be in a header
     15 void gr_run_unittests();
     16 
     17 // If we aren't inheriting these as #defines from elsewhere,
     18 // clang demands they be declared before we #include the template
     19 // that relies on them.
     20 #if GR_DEBUG
     21 static bool LT(const int& elem, int value) {
     22     return elem < value;
     23 }
     24 static bool EQ(const int& elem, int value) {
     25     return elem == value;
     26 }
     27 #include "GrTBSearch.h"
     28 
     29 static void test_bsearch() {
     30     const int array[] = {
     31         1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99
     32     };
     33 
     34     for (size_t n = 0; n < GR_ARRAY_COUNT(array); n++) {
     35         for (size_t i = 0; i < n; i++) {
     36             int index = GrTBSearch<int, int>(array, n, array[i]);
     37             GrAssert(index == (int) i);
     38             index = GrTBSearch<int, int>(array, n, -array[i]);
     39             GrAssert(index < 0);
     40         }
     41     }
     42 }
     43 #endif
     44 
     45 // bogus empty class for GrBinHashKey
     46 class BogusEntry {};
     47 
     48 static void test_binHashKey()
     49 {
     50     const char* testStringA_ = "abcdABCD";
     51     const char* testStringB_ = "abcdBBCD";
     52     const uint32_t* testStringA = reinterpret_cast<const uint32_t*>(testStringA_);
     53     const uint32_t* testStringB = reinterpret_cast<const uint32_t*>(testStringB_);
     54     enum {
     55         kDataLenUsedForKey = 8
     56     };
     57 
     58     GrTBinHashKey<BogusEntry, kDataLenUsedForKey> keyA;
     59     keyA.setKeyData(testStringA);
     60     // test copy constructor and comparison
     61     GrTBinHashKey<BogusEntry, kDataLenUsedForKey> keyA2(keyA);
     62     GrAssert(keyA.compare(keyA2) == 0);
     63     GrAssert(keyA.getHash() == keyA2.getHash());
     64     // test re-init
     65     keyA2.setKeyData(testStringA);
     66     GrAssert(keyA.compare(keyA2) == 0);
     67     GrAssert(keyA.getHash() == keyA2.getHash());
     68     // test sorting
     69     GrTBinHashKey<BogusEntry, kDataLenUsedForKey> keyB;
     70     keyB.setKeyData(testStringB);
     71     GrAssert(keyA.compare(keyB) < 0);
     72     GrAssert(keyA.getHash() != keyB.getHash());
     73 }
     74 
     75 
     76 void gr_run_unittests() {
     77     GR_DEBUGCODE(test_bsearch();)
     78     test_binHashKey();
     79     GrRedBlackTree<int>::UnitTest();
     80 }
     81