| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2013 Google Inc. | 3 * Copyright 2013 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "Test.h" | 9 #include "Test.h" |
| 10 #include "SkRandom.h" | 10 #include "SkRandom.h" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 t *= -1.77245385091; // -sqrt(PI) | 54 t *= -1.77245385091; // -sqrt(PI) |
| 55 double p = 1.0/(1.0 + exp(t)); | 55 double p = 1.0/(1.0 + exp(t)); |
| 56 | 56 |
| 57 return p; | 57 return p; |
| 58 } | 58 } |
| 59 | 59 |
| 60 static void test_random_byte(skiatest::Reporter* reporter, int shift) { | 60 static void test_random_byte(skiatest::Reporter* reporter, int shift) { |
| 61 int bins[256]; | 61 int bins[256]; |
| 62 memset(bins, 0, sizeof(int)*256); | 62 memset(bins, 0, sizeof(int)*256); |
| 63 | 63 |
| 64 SkMWCRandom rand; | 64 SkRandom rand; |
| 65 for (int i = 0; i < 256*10000; ++i) { | 65 for (int i = 0; i < 256*10000; ++i) { |
| 66 bins[(rand.nextU() >> shift) & 0xff]++; | 66 bins[(rand.nextU() >> shift) & 0xff]++; |
| 67 } | 67 } |
| 68 | 68 |
| 69 REPORTER_ASSERT(reporter, chi_square_test(bins, 10000)); | 69 REPORTER_ASSERT(reporter, chi_square_test(bins, 10000)); |
| 70 } | 70 } |
| 71 | 71 |
| 72 static void test_random_float(skiatest::Reporter* reporter) { | 72 static void test_random_float(skiatest::Reporter* reporter) { |
| 73 int bins[256]; | 73 int bins[256]; |
| 74 memset(bins, 0, sizeof(int)*256); | 74 memset(bins, 0, sizeof(int)*256); |
| 75 | 75 |
| 76 SkMWCRandom rand; | 76 SkRandom rand; |
| 77 for (int i = 0; i < 256*10000; ++i) { | 77 for (int i = 0; i < 256*10000; ++i) { |
| 78 float f = rand.nextF(); | 78 float f = rand.nextF(); |
| 79 REPORTER_ASSERT(reporter, 0.0f <= f && f < 1.0f); | 79 REPORTER_ASSERT(reporter, 0.0f <= f && f < 1.0f); |
| 80 bins[(int)(f*256.f)]++; | 80 bins[(int)(f*256.f)]++; |
| 81 } | 81 } |
| 82 REPORTER_ASSERT(reporter, chi_square_test(bins, 10000)); | 82 REPORTER_ASSERT(reporter, chi_square_test(bins, 10000)); |
| 83 | 83 |
| 84 double p[32]; | 84 double p[32]; |
| 85 for (int j = 0; j < 32; ++j) { | 85 for (int j = 0; j < 32; ++j) { |
| 86 float f = rand.nextF(); | 86 float f = rand.nextF(); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 101 // The original test used 26 bit strings, but is somewhat slow. This version use
s 16 | 101 // The original test used 26 bit strings, but is somewhat slow. This version use
s 16 |
| 102 // bits which is less rigorous but much faster to generate. | 102 // bits which is less rigorous but much faster to generate. |
| 103 static double test_single_gorilla(skiatest::Reporter* reporter, int shift) { | 103 static double test_single_gorilla(skiatest::Reporter* reporter, int shift) { |
| 104 const int kWordWidth = 16; | 104 const int kWordWidth = 16; |
| 105 const double kMean = 24108.0; | 105 const double kMean = 24108.0; |
| 106 const double kStandardDeviation = 127.0; | 106 const double kStandardDeviation = 127.0; |
| 107 const int kN = (1 << kWordWidth); | 107 const int kN = (1 << kWordWidth); |
| 108 const int kNumEntries = kN >> 5; // dividing by 32 | 108 const int kNumEntries = kN >> 5; // dividing by 32 |
| 109 unsigned int entries[kNumEntries]; | 109 unsigned int entries[kNumEntries]; |
| 110 | 110 |
| 111 SkMWCRandom rand; | 111 SkRandom rand; |
| 112 memset(entries, 0, sizeof(unsigned int)*kNumEntries); | 112 memset(entries, 0, sizeof(unsigned int)*kNumEntries); |
| 113 // pre-seed our string value | 113 // pre-seed our string value |
| 114 int value = 0; | 114 int value = 0; |
| 115 for (int i = 0; i < kWordWidth-1; ++i) { | 115 for (int i = 0; i < kWordWidth-1; ++i) { |
| 116 value <<= 1; | 116 value <<= 1; |
| 117 unsigned int rnd = rand.nextU(); | 117 unsigned int rnd = rand.nextU(); |
| 118 value |= ((rnd >> shift) & 0x1); | 118 value |= ((rnd >> shift) & 0x1); |
| 119 } | 119 } |
| 120 | 120 |
| 121 // now make some strings and track them | 121 // now make some strings and track them |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 | 154 |
| 155 double p[32]; | 155 double p[32]; |
| 156 for (int bit_position = 0; bit_position < 32; ++bit_position) { | 156 for (int bit_position = 0; bit_position < 32; ++bit_position) { |
| 157 p[bit_position] = test_single_gorilla(reporter, bit_position); | 157 p[bit_position] = test_single_gorilla(reporter, bit_position); |
| 158 } | 158 } |
| 159 | 159 |
| 160 REPORTER_ASSERT(reporter, anderson_darling_test(p)); | 160 REPORTER_ASSERT(reporter, anderson_darling_test(p)); |
| 161 } | 161 } |
| 162 | 162 |
| 163 static void test_range(skiatest::Reporter* reporter) { | 163 static void test_range(skiatest::Reporter* reporter) { |
| 164 SkMWCRandom rand; | 164 SkRandom rand; |
| 165 | 165 |
| 166 // just to make sure we don't crash in this case | 166 // just to make sure we don't crash in this case |
| 167 (void) rand.nextRangeU(0, 0xffffffff); | 167 (void) rand.nextRangeU(0, 0xffffffff); |
| 168 | 168 |
| 169 // check a case to see if it's uniform | 169 // check a case to see if it's uniform |
| 170 int bins[256]; | 170 int bins[256]; |
| 171 memset(bins, 0, sizeof(int)*256); | 171 memset(bins, 0, sizeof(int)*256); |
| 172 for (int i = 0; i < 256*10000; ++i) { | 172 for (int i = 0; i < 256*10000; ++i) { |
| 173 unsigned int u = rand.nextRangeU(17, 17+255); | 173 unsigned int u = rand.nextRangeU(17, 17+255); |
| 174 REPORTER_ASSERT(reporter, 17 <= u && u <= 17+255); | 174 REPORTER_ASSERT(reporter, 17 <= u && u <= 17+255); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 187 | 187 |
| 188 test_random_float(reporter); | 188 test_random_float(reporter); |
| 189 | 189 |
| 190 test_gorilla(reporter); | 190 test_gorilla(reporter); |
| 191 | 191 |
| 192 test_range(reporter); | 192 test_range(reporter); |
| 193 } | 193 } |
| 194 | 194 |
| 195 #include "TestClassDef.h" | 195 #include "TestClassDef.h" |
| 196 DEFINE_TESTCLASS("Random", RandomTestClass, TestRandom) | 196 DEFINE_TESTCLASS("Random", RandomTestClass, TestRandom) |
| OLD | NEW |