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

Unified Diff: test/unittests/compiler/typer-unittest.cc

Issue 2754003007: [compiler] Add even more tests for monotonicity of typing. (Closed)
Patch Set: Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/unittests/compiler/typer-unittest.cc
diff --git a/test/unittests/compiler/typer-unittest.cc b/test/unittests/compiler/typer-unittest.cc
index d164ee3423e63b24602160122217aed897e40c75..2d6e3106fb0376bd0e2798007398bf6a3c7977b1 100644
--- a/test/unittests/compiler/typer-unittest.cc
+++ b/test/unittests/compiler/typer-unittest.cc
@@ -65,6 +65,28 @@ class TyperTest : public TypedGraphTest {
std::vector<double> integers;
std::vector<double> int32s;
+ Type* TypeUnaryOp(const Operator* op, Type* type0) {
+ Node* p0 = Parameter(0);
+ NodeProperties::SetType(p0, type0);
+ std::vector<Node*> inputs;
+ inputs.push_back(p0);
+ if (OperatorProperties::HasContextInput(op)) {
+ inputs.push_back(context_node_);
+ }
+ for (int i = 0; i < OperatorProperties::GetFrameStateInputCount(op); i++) {
+ inputs.push_back(EmptyFrameState());
+ }
+ for (int i = 0; i < op->EffectInputCount(); i++) {
+ inputs.push_back(graph()->start());
+ }
+ for (int i = 0; i < op->ControlInputCount(); i++) {
+ inputs.push_back(graph()->start());
+ }
+ Node* n = graph()->NewNode(op, static_cast<int>(inputs.size()),
+ &(inputs.front()));
+ return NodeProperties::GetType(n);
+ }
+
Type* TypeBinaryOp(const Operator* op, Type* lhs, Type* rhs) {
Node* p0 = Parameter(0);
Node* p1 = Parameter(1);
@@ -254,6 +276,13 @@ class TyperTest : public TypedGraphTest {
EXPECT_TRUE(subtype->Is(type));
}
+ void TestUnaryMonotonicity(const Operator* op, Type* upper1 = Type::Any()) {
+ UnaryTyper typer = [&](Type* type1) { return TypeUnaryOp(op, type1); };
+ for (int i = 0; i < kRepetitions; ++i) {
+ TestUnaryMonotonicity(typer, upper1);
+ }
+ }
+
void TestBinaryMonotonicity(const Operator* op, Type* upper1 = Type::Any(),
Type* upper2 = Type::Any()) {
BinaryTyper typer = [&](Type* type1, Type* type2) {
@@ -390,6 +419,29 @@ TEST_F(TyperTest, TypeJSStrictEqual) {
//------------------------------------------------------------------------------
// Typer Monotonicity
+// JS UNOPs without hint
+#define TEST_MONOTONICITY(name) \
+ TEST_F(TyperTest, Monotonicity_##name) { \
+ TestUnaryMonotonicity(javascript_.name()); \
+ }
+TEST_MONOTONICITY(ToInteger)
+TEST_MONOTONICITY(ToLength)
+TEST_MONOTONICITY(ToName)
+TEST_MONOTONICITY(ToNumber)
+TEST_MONOTONICITY(ToObject)
+TEST_MONOTONICITY(ToString)
+TEST_MONOTONICITY(ClassOf)
+TEST_MONOTONICITY(TypeOf)
+#undef TEST_MONOTONICITY
+
+// JS UNOPs with ToBooleanHint
+#define TEST_MONOTONICITY(name) \
+ TEST_F(TyperTest, Monotonicity_##name) { \
+ TestUnaryMonotonicity(javascript_.name(ToBooleanHint())); \
+ }
+TEST_MONOTONICITY(ToBoolean)
+#undef TEST_MONOTONICITY
+
// JS BINOPs with CompareOperationHint
#define TEST_MONOTONICITY(name) \
TEST_F(TyperTest, Monotonicity_##name) { \
@@ -426,6 +478,8 @@ TEST_MONOTONICITY(Subtract)
TEST_MONOTONICITY(Multiply)
TEST_MONOTONICITY(Divide)
TEST_MONOTONICITY(Modulus)
+TEST_MONOTONICITY(InstanceOf)
+TEST_MONOTONICITY(OrdinaryHasInstance)
#undef TEST_MONOTONICITY
// SIMPLIFIED BINOPs without hint, with Number input restriction
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698