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

Unified Diff: test/unittests/wasm/asm-types-unittest.cc

Issue 2148073002: V8. ASM-2-WASM. Fixes technical debt in asm-types. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/asmjs/asm-types.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/unittests/wasm/asm-types-unittest.cc
diff --git a/test/unittests/wasm/asm-types-unittest.cc b/test/unittests/wasm/asm-types-unittest.cc
index b4fbb77dcdccc5bc37c0b391c0d6e4db01471866..4b9096d17d061235902891f3ad1d45b8eba2a195 100644
--- a/test/unittests/wasm/asm-types-unittest.cc
+++ b/test/unittests/wasm/asm-types-unittest.cc
@@ -33,18 +33,23 @@ class AsmTypeTest : public TestWithZone {
{Type::Int32Array(), {Type::Heap()}},
{Type::Float32Array(), {Type::Heap()}},
{Type::Float64Array(), {Type::Heap()}},
- {Type::FloatishDoubleQ(), {Type::Floatish(), Type::DoubleQ()}},
- {Type::FloatQDoubleQ(),
- {Type::FloatQ(), Type::Floatish(), Type::DoubleQ()}},
- {Type::Float(), {Type::FloatQ(), Type::Floatish()}},
- {Type::FloatQ(), {Type::Floatish()}},
+ {Type::Float(),
+ {Type::FloatishDoubleQ(), Type::FloatQDoubleQ(), Type::FloatQ(),
+ Type::Floatish()}},
+ {Type::Floatish(), {Type::FloatishDoubleQ()}},
+ {Type::FloatQ(),
+ {Type::FloatishDoubleQ(), Type::FloatQDoubleQ(),
+ Type::Floatish()}},
{Type::FixNum(),
{Type::Signed(), Type::Extern(), Type::Unsigned(), Type::Int(),
Type::Intish()}},
{Type::Unsigned(), {Type::Int(), Type::Intish()}},
{Type::Signed(), {Type::Extern(), Type::Int(), Type::Intish()}},
{Type::Int(), {Type::Intish()}},
- {Type::Double(), {Type::DoubleQ(), Type::Extern()}},
+ {Type::DoubleQ(), {Type::FloatishDoubleQ(), Type::FloatQDoubleQ()}},
+ {Type::Double(),
+ {Type::FloatishDoubleQ(), Type::FloatQDoubleQ(), Type::DoubleQ(),
+ Type::Extern()}},
}) {}
protected:
@@ -232,7 +237,7 @@ TEST_F(AsmTypeTest, Names) {
auto* ft =
Type::FunctionTableType(zone(), 15, Function(Type::Double)(Type::Int));
- EXPECT_THAT(ft->Name(), StrEq("(int) -> double[15]"));
+ EXPECT_THAT(ft->Name(), StrEq("((int) -> double)[15]"));
}
TEST_F(AsmTypeTest, IsExactly) {
@@ -260,12 +265,22 @@ TEST_F(AsmTypeTest, IsExactly) {
}
}
+bool FunctionsWithSameSignature(AsmType* a, AsmType* b) {
+ if (auto* func_a = a->AsFunctionType()) {
John 2016/07/13 22:54:36 Brad, I'm OOO right now, so can you please send a
+ if (auto* func_b = b->AsFunctionType()) {
+ return a->IsA(b);
+ }
+ }
+ return false;
+}
+
TEST_F(AsmTypeTest, IsA) {
Type* test_types[] = {
#define CREATE(CamelName, string_name, number, parent_types) Type::CamelName(),
FOR_EACH_ASM_VALUE_TYPE_LIST(CREATE)
#undef CREATE
Function(Type::Int)(Type::Double),
+ Function(Type::Int)(Type::Int, Type::Int),
Function(Type::Int)(Type::DoubleQ),
Overload(Function(Type::Int)(Type::Double)),
Function(Type::Int)(Type::Int, Type::Int),
@@ -278,15 +293,24 @@ TEST_F(AsmTypeTest, IsA) {
for (size_t ii = 0; ii < arraysize(test_types); ++ii) {
for (size_t jj = 0; jj < arraysize(test_types); ++jj) {
const bool Expected =
- (ii == jj) || ParentsOf(test_types[ii]).count(test_types[jj]) != 0;
+ (ii == jj) || ParentsOf(test_types[ii]).count(test_types[jj]) != 0 ||
+ FunctionsWithSameSignature(test_types[ii], test_types[jj]);
EXPECT_EQ(Expected, test_types[ii]->IsA(test_types[jj]))
<< test_types[ii]->Name() << (Expected ? " is not a " : " is a ")
<< test_types[jj]->Name();
}
}
+
+ EXPECT_TRUE(Function(Type::Int)(Type::Int, Type::Int)
+ ->IsA(Function(Type::Int)(Type::Int, Type::Int)));
+
+ EXPECT_FALSE(Function(Type::Int)(Type::Int, Type::Int)
+ ->IsA(Function(Type::Double)(Type::Int, Type::Int)));
+ EXPECT_FALSE(Function(Type::Int)(Type::Int, Type::Int)
+ ->IsA(Function(Type::Int)(Type::Double, Type::Int)));
}
-TEST_F(AsmTypeTest, ValidateCall) {
+TEST_F(AsmTypeTest, CanBeInvokedWith) {
auto* min_max_int = Type::MinMaxType(zone(), Type::Signed(), Type::Int());
auto* i2s = Function(Type::Signed)(Type::Int);
auto* ii2s = Function(Type::Signed)(Type::Int, Type::Int);
@@ -294,21 +318,17 @@ TEST_F(AsmTypeTest, ValidateCall) {
auto* iiii2s =
Function(Type::Signed)(Type::Int, Type::Int, Type::Int, Type::Int);
- EXPECT_EQ(Type::Signed(), min_max_int->AsCallableType()->ValidateCall(
- min_max_int->AsFunctionType()->ReturnType(),
- min_max_int->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Signed(), min_max_int->AsCallableType()->ValidateCall(
- ii2s->AsFunctionType()->ReturnType(),
- ii2s->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Signed(), min_max_int->AsCallableType()->ValidateCall(
- iii2s->AsFunctionType()->ReturnType(),
- iii2s->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Signed(), min_max_int->AsCallableType()->ValidateCall(
- iiii2s->AsFunctionType()->ReturnType(),
- iiii2s->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::None(), min_max_int->AsCallableType()->ValidateCall(
- i2s->AsFunctionType()->ReturnType(),
- i2s->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(min_max_int->AsCallableType()->CanBeInvokedWith(
+ ii2s->AsFunctionType()->ReturnType(),
+ ii2s->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(min_max_int->AsCallableType()->CanBeInvokedWith(
+ iii2s->AsFunctionType()->ReturnType(),
+ iii2s->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(min_max_int->AsCallableType()->CanBeInvokedWith(
+ iiii2s->AsFunctionType()->ReturnType(),
+ iiii2s->AsFunctionType()->Arguments()));
+ EXPECT_FALSE(min_max_int->AsCallableType()->CanBeInvokedWith(
+ i2s->AsFunctionType()->ReturnType(), i2s->AsFunctionType()->Arguments()));
auto* min_max_double =
Type::MinMaxType(zone(), Type::Double(), Type::Double());
@@ -318,88 +338,68 @@ TEST_F(AsmTypeTest, ValidateCall) {
Function(Type::Double)(Type::Double, Type::Double, Type::Double);
auto* dddd2d = Function(Type::Double)(Type::Double, Type::Double,
Type::Double, Type::Double);
- EXPECT_EQ(Type::Double(), min_max_double->AsCallableType()->ValidateCall(
- min_max_double->AsFunctionType()->ReturnType(),
- min_max_double->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Double(), min_max_double->AsCallableType()->ValidateCall(
- dd2d->AsFunctionType()->ReturnType(),
- dd2d->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Double(), min_max_double->AsCallableType()->ValidateCall(
- ddd2d->AsFunctionType()->ReturnType(),
- ddd2d->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Double(), min_max_double->AsCallableType()->ValidateCall(
- dddd2d->AsFunctionType()->ReturnType(),
- dddd2d->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::None(), min_max_double->AsCallableType()->ValidateCall(
- d2d->AsFunctionType()->ReturnType(),
- d2d->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(min_max_double->AsCallableType()->CanBeInvokedWith(
+ dd2d->AsFunctionType()->ReturnType(),
+ dd2d->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(min_max_double->AsCallableType()->CanBeInvokedWith(
+ ddd2d->AsFunctionType()->ReturnType(),
+ ddd2d->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(min_max_double->AsCallableType()->CanBeInvokedWith(
+ dddd2d->AsFunctionType()->ReturnType(),
+ dddd2d->AsFunctionType()->Arguments()));
+ EXPECT_FALSE(min_max_double->AsCallableType()->CanBeInvokedWith(
+ d2d->AsFunctionType()->ReturnType(), d2d->AsFunctionType()->Arguments()));
auto* min_max = Overload(min_max_int, min_max_double);
- EXPECT_EQ(Type::None(), min_max->AsCallableType()->ValidateCall(
- i2s->AsFunctionType()->ReturnType(),
- i2s->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::None(), min_max->AsCallableType()->ValidateCall(
- d2d->AsFunctionType()->ReturnType(),
- d2d->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Signed(), min_max->AsCallableType()->ValidateCall(
- min_max_int->AsFunctionType()->ReturnType(),
- min_max_int->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Signed(), min_max->AsCallableType()->ValidateCall(
- ii2s->AsFunctionType()->ReturnType(),
- ii2s->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Signed(), min_max->AsCallableType()->ValidateCall(
- iii2s->AsFunctionType()->ReturnType(),
- iii2s->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Signed(), min_max->AsCallableType()->ValidateCall(
- iiii2s->AsFunctionType()->ReturnType(),
- iiii2s->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Double(), min_max->AsCallableType()->ValidateCall(
- min_max_double->AsFunctionType()->ReturnType(),
- min_max_double->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Double(), min_max->AsCallableType()->ValidateCall(
- dd2d->AsFunctionType()->ReturnType(),
- dd2d->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Double(), min_max->AsCallableType()->ValidateCall(
- ddd2d->AsFunctionType()->ReturnType(),
- ddd2d->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Double(), min_max->AsCallableType()->ValidateCall(
- dddd2d->AsFunctionType()->ReturnType(),
- dddd2d->AsFunctionType()->Arguments()));
+ EXPECT_FALSE(min_max->AsCallableType()->CanBeInvokedWith(
+ i2s->AsFunctionType()->ReturnType(), i2s->AsFunctionType()->Arguments()));
+ EXPECT_FALSE(min_max->AsCallableType()->CanBeInvokedWith(
+ d2d->AsFunctionType()->ReturnType(), d2d->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(min_max->AsCallableType()->CanBeInvokedWith(
+ ii2s->AsFunctionType()->ReturnType(),
+ ii2s->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(min_max->AsCallableType()->CanBeInvokedWith(
+ iii2s->AsFunctionType()->ReturnType(),
+ iii2s->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(min_max->AsCallableType()->CanBeInvokedWith(
+ iiii2s->AsFunctionType()->ReturnType(),
+ iiii2s->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(min_max->AsCallableType()->CanBeInvokedWith(
+ dd2d->AsFunctionType()->ReturnType(),
+ dd2d->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(min_max->AsCallableType()->CanBeInvokedWith(
+ ddd2d->AsFunctionType()->ReturnType(),
+ ddd2d->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(min_max->AsCallableType()->CanBeInvokedWith(
+ dddd2d->AsFunctionType()->ReturnType(),
+ dddd2d->AsFunctionType()->Arguments()));
auto* fround = Type::FroundType(zone());
ZoneVector<AsmType*> arg(zone());
arg.push_back(Type::Floatish());
- EXPECT_EQ(Type::Float(),
- fround->AsCallableType()->ValidateCall(Type::Float(), arg));
+ EXPECT_TRUE(fround->AsCallableType()->CanBeInvokedWith(Type::Float(), arg));
arg.clear();
arg.push_back(Type::FloatQ());
- EXPECT_EQ(Type::Float(),
- fround->AsCallableType()->ValidateCall(Type::Float(), arg));
+ EXPECT_TRUE(fround->AsCallableType()->CanBeInvokedWith(Type::Float(), arg));
arg.clear();
arg.push_back(Type::Float());
- EXPECT_EQ(Type::Float(),
- fround->AsCallableType()->ValidateCall(Type::Float(), arg));
+ EXPECT_TRUE(fround->AsCallableType()->CanBeInvokedWith(Type::Float(), arg));
arg.clear();
arg.push_back(Type::DoubleQ());
- EXPECT_EQ(Type::Float(),
- fround->AsCallableType()->ValidateCall(Type::Float(), arg));
+ EXPECT_TRUE(fround->AsCallableType()->CanBeInvokedWith(Type::Float(), arg));
arg.clear();
arg.push_back(Type::Double());
- EXPECT_EQ(Type::Float(),
- fround->AsCallableType()->ValidateCall(Type::Float(), arg));
+ EXPECT_TRUE(fround->AsCallableType()->CanBeInvokedWith(Type::Float(), arg));
arg.clear();
arg.push_back(Type::Signed());
- EXPECT_EQ(Type::Float(),
- fround->AsCallableType()->ValidateCall(Type::Float(), arg));
+ EXPECT_TRUE(fround->AsCallableType()->CanBeInvokedWith(Type::Float(), arg));
arg.clear();
arg.push_back(Type::Unsigned());
- EXPECT_EQ(Type::Float(),
- fround->AsCallableType()->ValidateCall(Type::Float(), arg));
+ EXPECT_TRUE(fround->AsCallableType()->CanBeInvokedWith(Type::Float(), arg));
arg.clear();
arg.push_back(Type::FixNum());
- EXPECT_EQ(Type::Float(),
- fround->AsCallableType()->ValidateCall(Type::Float(), arg));
+ EXPECT_TRUE(fround->AsCallableType()->CanBeInvokedWith(Type::Float(), arg));
auto* idf2v = Function(Type::Void)(Type::Int, Type::Double, Type::Float);
auto* i2d = Function(Type::Double)(Type::Int);
@@ -408,24 +408,21 @@ TEST_F(AsmTypeTest, ValidateCall) {
auto* idif2i =
Function(Type::Int)(Type::Int, Type::Double, Type::Int, Type::Float);
auto* overload = Overload(idf2v, i2f, /*i2d missing, */ fi2d, idif2i);
- EXPECT_EQ(Type::Void(), overload->AsCallableType()->ValidateCall(
- idf2v->AsFunctionType()->ReturnType(),
- idf2v->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Float(), overload->AsCallableType()->ValidateCall(
- i2f->AsFunctionType()->ReturnType(),
- i2f->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Double(), overload->AsCallableType()->ValidateCall(
- fi2d->AsFunctionType()->ReturnType(),
- fi2d->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::Int(), overload->AsCallableType()->ValidateCall(
- idif2i->AsFunctionType()->ReturnType(),
- idif2i->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::None(), overload->AsCallableType()->ValidateCall(
- i2d->AsFunctionType()->ReturnType(),
- i2d->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::None(), i2f->AsCallableType()->ValidateCall(
- i2d->AsFunctionType()->ReturnType(),
- i2d->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(overload->AsCallableType()->CanBeInvokedWith(
+ idf2v->AsFunctionType()->ReturnType(),
+ idf2v->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(overload->AsCallableType()->CanBeInvokedWith(
+ i2f->AsFunctionType()->ReturnType(), i2f->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(overload->AsCallableType()->CanBeInvokedWith(
+ fi2d->AsFunctionType()->ReturnType(),
+ fi2d->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(overload->AsCallableType()->CanBeInvokedWith(
+ idif2i->AsFunctionType()->ReturnType(),
+ idif2i->AsFunctionType()->Arguments()));
+ EXPECT_FALSE(overload->AsCallableType()->CanBeInvokedWith(
+ i2d->AsFunctionType()->ReturnType(), i2d->AsFunctionType()->Arguments()));
+ EXPECT_FALSE(i2f->AsCallableType()->CanBeInvokedWith(
+ i2d->AsFunctionType()->ReturnType(), i2d->AsFunctionType()->Arguments()));
auto* ffi = Type::FFIType(zone());
AsmType* (*kReturnTypes[])() = {
@@ -437,27 +434,24 @@ TEST_F(AsmTypeTest, ValidateCall) {
for (size_t ii = 0; ii < arraysize(kReturnTypes); ++ii) {
for (size_t jj = 0; jj < arraysize(kParameterTypes); ++jj) {
auto* f = Function(kReturnTypes[ii])(kParameterTypes[jj]);
- EXPECT_EQ(kReturnTypes[ii](), ffi->AsCallableType()->ValidateCall(
- f->AsFunctionType()->ReturnType(),
- f->AsFunctionType()->Arguments()))
+ EXPECT_TRUE(ffi->AsCallableType()->CanBeInvokedWith(
+ f->AsFunctionType()->ReturnType(), f->AsFunctionType()->Arguments()))
<< kReturnTypes[ii]()->Name();
// Call with non-parameter type type should fail.
f = Function(kReturnTypes[ii])(kParameterTypes[jj], Type::Int);
- EXPECT_EQ(Type::None(), ffi->AsCallableType()->ValidateCall(
- f->AsFunctionType()->ReturnType(),
- f->AsFunctionType()->Arguments()))
+ EXPECT_FALSE(ffi->AsCallableType()->CanBeInvokedWith(
+ f->AsFunctionType()->ReturnType(), f->AsFunctionType()->Arguments()))
<< kReturnTypes[ii]()->Name();
}
}
auto* ft0 = Type::FunctionTableType(zone(), 10, fi2d);
- EXPECT_EQ(Type::Double(), ft0->AsCallableType()->ValidateCall(
- fi2d->AsFunctionType()->ReturnType(),
- fi2d->AsFunctionType()->Arguments()));
- EXPECT_EQ(Type::None(), ft0->AsCallableType()->ValidateCall(
- i2d->AsFunctionType()->ReturnType(),
- i2d->AsFunctionType()->Arguments()));
+ EXPECT_TRUE(ft0->AsCallableType()->CanBeInvokedWith(
+ fi2d->AsFunctionType()->ReturnType(),
+ fi2d->AsFunctionType()->Arguments()));
+ EXPECT_FALSE(ft0->AsCallableType()->CanBeInvokedWith(
+ i2d->AsFunctionType()->ReturnType(), i2d->AsFunctionType()->Arguments()));
}
TEST_F(AsmTypeTest, ToReturnType) {
« no previous file with comments | « src/asmjs/asm-types.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698