Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(428)

Side by Side Diff: runtime/vm/intermediate_language_test.cc

Issue 402913002: Don't force range of the RangeBoundary::Shl into the Smi. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: fix the tests Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/intermediate_language.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/intermediate_language.h" 5 #include "vm/intermediate_language.h"
6 #include "vm/unit_test.h" 6 #include "vm/unit_test.h"
7 7
8 namespace dart { 8 namespace dart {
9 9
10 TEST_CASE(InstructionTests) { 10 TEST_CASE(InstructionTests) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 RangeBoundary::FromConstant(100)); 55 RangeBoundary::FromConstant(100));
56 EXPECT(positive->IsPositive()); 56 EXPECT(positive->IsPositive());
57 EXPECT(zero->Overlaps(0, 0)); 57 EXPECT(zero->Overlaps(0, 0));
58 EXPECT(positive->Overlaps(0, 0)); 58 EXPECT(positive->Overlaps(0, 0));
59 EXPECT(!negative->Overlaps(0, 0)); 59 EXPECT(!negative->Overlaps(0, 0));
60 EXPECT(range_x->Overlaps(0, 0)); 60 EXPECT(range_x->Overlaps(0, 0));
61 EXPECT(range_x->IsWithin(-15, 100)); 61 EXPECT(range_x->IsWithin(-15, 100));
62 EXPECT(!range_x->IsWithin(-15, 99)); 62 EXPECT(!range_x->IsWithin(-15, 99));
63 EXPECT(!range_x->IsWithin(-14, 100)); 63 EXPECT(!range_x->IsWithin(-14, 100));
64 64
65 #define TEST_RANGE_OP(Op, l_min, l_max, r_min, r_max, result_min, result_max) \ 65 #define TEST_RANGE_OP_(Op, l_min, l_max, r_min, r_max, Clamp, res_min, res_max)\
66 { \ 66 { \
67 RangeBoundary min, max; \ 67 RangeBoundary min, max; \
68 Range* left_range = new Range( \ 68 Range* left_range = new Range( \
69 RangeBoundary::FromConstant(l_min), \ 69 RangeBoundary::FromConstant(l_min), \
70 RangeBoundary::FromConstant(l_max)); \ 70 RangeBoundary::FromConstant(l_max)); \
71 Range* shift_range = new Range( \ 71 Range* shift_range = new Range( \
72 RangeBoundary::FromConstant(r_min), \ 72 RangeBoundary::FromConstant(r_min), \
73 RangeBoundary::FromConstant(r_max)); \ 73 RangeBoundary::FromConstant(r_max)); \
74 Op(left_range, shift_range, &min, &max); \ 74 Op(left_range, shift_range, &min, &max); \
75 EXPECT(min.Equals(result_min)); \ 75 min = Clamp(min); \
76 if (!min.Equals(result_min)) OS::Print("%s\n", min.ToCString()); \ 76 max = Clamp(max); \
77 EXPECT(max.Equals(result_max)); \ 77 EXPECT(min.Equals(res_min)); \
78 if (!max.Equals(result_max)) OS::Print("%s\n", max.ToCString()); \ 78 if (!min.Equals(res_min)) OS::Print("%s\n", min.ToCString()); \
79 EXPECT(max.Equals(res_max)); \
80 if (!max.Equals(res_max)) OS::Print("%s\n", max.ToCString()); \
79 } 81 }
80 82
83 #define NO_CLAMP(b) (b)
84 #define TEST_RANGE_OP(Op, l_min, l_max, r_min, r_max, result_min, result_max) \
85 TEST_RANGE_OP_(Op, l_min, l_max, r_min, r_max, \
86 NO_CLAMP, result_min, result_max)
87
88 #define CLAMP_TO_SMI(b) (b.Clamp(RangeBoundary::kRangeBoundarySmi))
89 #define TEST_RANGE_OP_SMI(Op, l_min, l_max, r_min, r_max, res_min, res_max) \
90 TEST_RANGE_OP_(Op, l_min, l_max, r_min, r_max, \
91 CLAMP_TO_SMI, res_min, res_max)
92
81 TEST_RANGE_OP(Range::Shl, -15, 100, 0, 2, 93 TEST_RANGE_OP(Range::Shl, -15, 100, 0, 2,
82 RangeBoundary(-60), RangeBoundary(400)); 94 RangeBoundary(-60), RangeBoundary(400));
83 TEST_RANGE_OP(Range::Shl, -15, 100, -2, 2, 95 TEST_RANGE_OP(Range::Shl, -15, 100, -2, 2,
84 RangeBoundary(-60), RangeBoundary(400)); 96 RangeBoundary(-60), RangeBoundary(400));
85 TEST_RANGE_OP(Range::Shl, -15, -10, 1, 2, 97 TEST_RANGE_OP(Range::Shl, -15, -10, 1, 2,
86 RangeBoundary(-60), RangeBoundary(-20)); 98 RangeBoundary(-60), RangeBoundary(-20));
87 TEST_RANGE_OP(Range::Shl, 5, 10, -2, 2, 99 TEST_RANGE_OP(Range::Shl, 5, 10, -2, 2,
88 RangeBoundary(5), RangeBoundary(40)); 100 RangeBoundary(5), RangeBoundary(40));
89 TEST_RANGE_OP(Range::Shl, -15, 100, 0, 64, 101 TEST_RANGE_OP(Range::Shl, -15, 100, 0, 64,
90 RangeBoundary::NegativeInfinity(), 102 RangeBoundary::NegativeInfinity(),
91 RangeBoundary::PositiveInfinity()); 103 RangeBoundary::PositiveInfinity());
92 TEST_RANGE_OP(Range::Shl, -1, 1, 63, 63, 104 TEST_RANGE_OP(Range::Shl, -1, 1, 63, 63,
93 RangeBoundary::NegativeInfinity(), 105 RangeBoundary(kMinInt64),
94 RangeBoundary::PositiveInfinity()); 106 RangeBoundary::PositiveInfinity());
95 if (kBitsPerWord == 64) { 107 if (kBitsPerWord == 64) {
96 TEST_RANGE_OP(Range::Shl, -1, 1, 62, 62, 108 TEST_RANGE_OP_SMI(Range::Shl, -1, 1, 62, 62,
97 RangeBoundary(kSmiMin), 109 RangeBoundary(kSmiMin),
98 RangeBoundary::PositiveInfinity()); 110 RangeBoundary(kSmiMax));
99 TEST_RANGE_OP(Range::Shl, -1, 1, 30, 30, 111 TEST_RANGE_OP_SMI(Range::Shl, -1, 1, 30, 30,
100 RangeBoundary(-1 << 30), 112 RangeBoundary(-1 << 30),
101 RangeBoundary(1 << 30)); 113 RangeBoundary(1 << 30));
102 } else { 114 } else {
103 TEST_RANGE_OP(Range::Shl, -1, 1, 30, 30, 115 TEST_RANGE_OP_SMI(Range::Shl, -1, 1, 30, 30,
104 RangeBoundary(kSmiMin), 116 RangeBoundary(kSmiMin),
105 RangeBoundary::PositiveInfinity()); 117 RangeBoundary(kSmiMax));
106 TEST_RANGE_OP(Range::Shl, -1, 1, 62, 62, 118 TEST_RANGE_OP_SMI(Range::Shl, -1, 1, 62, 62,
107 RangeBoundary::NegativeInfinity(), 119 RangeBoundary(kSmiMin),
108 RangeBoundary::PositiveInfinity()); 120 RangeBoundary(kSmiMax));
109 } 121 }
110 TEST_RANGE_OP(Range::Shl, 0, 100, 0, 64, 122 TEST_RANGE_OP(Range::Shl, 0, 100, 0, 64,
111 RangeBoundary(0), RangeBoundary::PositiveInfinity()); 123 RangeBoundary(0), RangeBoundary::PositiveInfinity());
112 TEST_RANGE_OP(Range::Shl, -100, 0, 0, 64, 124 TEST_RANGE_OP(Range::Shl, -100, 0, 0, 64,
113 RangeBoundary::NegativeInfinity(), RangeBoundary(0)); 125 RangeBoundary::NegativeInfinity(), RangeBoundary(0));
114 126
115 TEST_RANGE_OP(Range::Shr, -8, 8, 1, 2, RangeBoundary(-4), RangeBoundary(4)); 127 TEST_RANGE_OP(Range::Shr, -8, 8, 1, 2, RangeBoundary(-4), RangeBoundary(4));
116 TEST_RANGE_OP(Range::Shr, 1, 8, 1, 2, RangeBoundary(0), RangeBoundary(4)); 128 TEST_RANGE_OP(Range::Shr, 1, 8, 1, 2, RangeBoundary(0), RangeBoundary(4));
117 TEST_RANGE_OP(Range::Shr, -16, -8, 1, 2, 129 TEST_RANGE_OP(Range::Shr, -16, -8, 1, 2,
118 RangeBoundary(-8), RangeBoundary(-2)); 130 RangeBoundary(-8), RangeBoundary(-2));
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 RangeBoundary(static_cast<int64_t>(kMaxInt32)), 664 RangeBoundary(static_cast<int64_t>(kMaxInt32)),
653 RangeBoundary::kRangeBoundaryInt64).ConstantValue() == kMaxInt32); 665 RangeBoundary::kRangeBoundaryInt64).ConstantValue() == kMaxInt32);
654 666
655 EXPECT(RangeBoundary::Max( 667 EXPECT(RangeBoundary::Max(
656 RangeBoundary(static_cast<int64_t>(kMaxInt64)), 668 RangeBoundary(static_cast<int64_t>(kMaxInt64)),
657 RangeBoundary(static_cast<int64_t>(kMaxInt32)), 669 RangeBoundary(static_cast<int64_t>(kMaxInt32)),
658 RangeBoundary::kRangeBoundaryInt64).ConstantValue() == kMaxInt64); 670 RangeBoundary::kRangeBoundaryInt64).ConstantValue() == kMaxInt64);
659 } 671 }
660 672
661 } // namespace dart 673 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698