OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 10 matching lines...) Expand all Loading... |
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | 27 |
28 #include "v8.h" | 28 #include "v8.h" |
29 | 29 |
30 #include "cctest.h" | 30 #include "cctest.h" |
31 #include "cpu.h" | 31 #include "utils/random-number-generator.h" |
32 | 32 |
33 using namespace v8::internal; | 33 using namespace v8::internal; |
34 | 34 |
35 | 35 |
36 TEST(FeatureImplications) { | 36 static const int kMaxRuns = 12345; |
37 // Test for features implied by other features. | 37 static const int kRandomSeeds[] = { |
38 CPU cpu; | 38 -1, 1, 42, 100, 1234567890, 987654321, 0xdeadbeef |
| 39 }; |
39 | 40 |
40 // ia32 and x64 features | |
41 CHECK(!cpu.has_sse() || cpu.has_mmx()); | |
42 CHECK(!cpu.has_sse2() || cpu.has_sse()); | |
43 CHECK(!cpu.has_sse3() || cpu.has_sse2()); | |
44 CHECK(!cpu.has_ssse3() || cpu.has_sse3()); | |
45 CHECK(!cpu.has_sse41() || cpu.has_sse3()); | |
46 CHECK(!cpu.has_sse42() || cpu.has_sse41()); | |
47 | 41 |
48 // arm features | 42 TEST(NextIntWithMaxValue) { |
49 CHECK(!cpu.has_vfp3_d32() || cpu.has_vfp3()); | 43 for (unsigned n = 0; n < ARRAY_SIZE(kRandomSeeds); ++n) { |
| 44 RandomNumberGenerator rng(kRandomSeeds[n]); |
| 45 for (int max = 1; max <= kMaxRuns; ++max) { |
| 46 int n = rng.NextInt(max); |
| 47 CHECK_LE(0, n); |
| 48 CHECK_LT(n, max); |
| 49 } |
| 50 } |
50 } | 51 } |
51 | 52 |
52 | 53 |
53 TEST(NumberOfProcessorsOnline) { | 54 TEST(NextBoolReturnsBooleanValue) { |
54 CHECK_GT(CPU::NumberOfProcessorsOnline(), 0); | 55 for (unsigned n = 0; n < ARRAY_SIZE(kRandomSeeds); ++n) { |
| 56 RandomNumberGenerator rng(kRandomSeeds[n]); |
| 57 for (int k = 0; k < kMaxRuns; ++k) { |
| 58 bool b = rng.NextBool(); |
| 59 CHECK(b == false || b == true); |
| 60 } |
| 61 } |
55 } | 62 } |
| 63 |
| 64 |
| 65 TEST(NextDoubleRange) { |
| 66 for (unsigned n = 0; n < ARRAY_SIZE(kRandomSeeds); ++n) { |
| 67 RandomNumberGenerator rng(kRandomSeeds[n]); |
| 68 for (int k = 0; k < kMaxRuns; ++k) { |
| 69 double d = rng.NextDouble(); |
| 70 CHECK_LE(0.0, d); |
| 71 CHECK_LT(d, 1.0); |
| 72 } |
| 73 } |
| 74 } |
| 75 |
| 76 |
| 77 TEST(RandomSeedFlagIsUsed) { |
| 78 for (unsigned n = 0; n < ARRAY_SIZE(kRandomSeeds); ++n) { |
| 79 FLAG_random_seed = kRandomSeeds[n]; |
| 80 RandomNumberGenerator rng1; |
| 81 RandomNumberGenerator rng2(kRandomSeeds[n]); |
| 82 for (int k = 1; k <= kMaxRuns; ++k) { |
| 83 int64_t i1, i2; |
| 84 rng1.NextBytes(&i1, sizeof(i1)); |
| 85 rng2.NextBytes(&i2, sizeof(i2)); |
| 86 CHECK_EQ(i2, i1); |
| 87 CHECK_EQ(rng2.NextInt(), rng1.NextInt()); |
| 88 CHECK_EQ(rng2.NextInt(k), rng1.NextInt(k)); |
| 89 CHECK_EQ(rng2.NextDouble(), rng1.NextDouble()); |
| 90 } |
| 91 } |
| 92 } |
OLD | NEW |