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

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

Issue 2078053002: V8. ASM-2-WASM. Another asm-types.h revision. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: removes TODOs Created 4 years, 6 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
« src/wasm/asm-types.h ('K') | « src/wasm/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 0bca843dd238d138382b6546eec07a3860f751b9..328cb97d8f0714a8b89f53432bb4e2a7d42e0a63 100644
--- a/test/unittests/wasm/asm-types-unittest.cc
+++ b/test/unittests/wasm/asm-types-unittest.cc
@@ -216,19 +216,22 @@ TEST_F(AsmTypeTest, Names) {
->Name(),
StrEq("(double, float) -> int /\\ (int) -> int"));
- EXPECT_THAT(Type::FroundType(zone(), Type::Int())->Name(),
- StrEq("(int) -> float"));
- EXPECT_THAT(Type::FroundType(zone(), Type::Floatish())->Name(),
- StrEq("(floatish) -> float"));
- EXPECT_THAT(Type::FroundType(zone(), Type::DoubleQ())->Name(),
- StrEq("(double?) -> float"));
-
- EXPECT_THAT(Type::MinMaxType(zone(), Type::Int())->Name(),
- StrEq("(int, int...) -> int"));
- EXPECT_THAT(Type::MinMaxType(zone(), Type::Floatish())->Name(),
- StrEq("(floatish, floatish...) -> floatish"));
- EXPECT_THAT(Type::MinMaxType(zone(), Type::DoubleQ())->Name(),
- StrEq("(double?, double?...) -> double?"));
+ EXPECT_THAT(Type::FroundType(zone())->Name(), StrEq("fround"));
+
+ EXPECT_THAT(Type::MinMaxType(zone(), Type::Signed(), Type::Int())->Name(),
+ StrEq("(int, int...) -> signed"));
+ EXPECT_THAT(Type::MinMaxType(zone(), Type::Float(), Type::Floatish())->Name(),
+ StrEq("(floatish, floatish...) -> float"));
+ EXPECT_THAT(Type::MinMaxType(zone(), Type::Double(), Type::DoubleQ())->Name(),
+ StrEq("(double?, double?...) -> double"));
+
+ EXPECT_THAT(Type::FFIType(zone())->Name(), StrEq("Function"));
+
+ EXPECT_THAT(Type::FunctionTableType(zone(), 4)->Name(),
+ StrEq("[unbound][4]"));
+ auto* ft = Type::FunctionTableType(zone(), 15);
+ ft->AsFunctionTableType()->set_signature(Function(Type::Double)(Type::Int));
+ EXPECT_THAT(ft->Name(), StrEq("(int) -> double[15]"));
}
TEST_F(AsmTypeTest, IsExactly) {
@@ -240,8 +243,9 @@ TEST_F(AsmTypeTest, IsExactly) {
Function(Type::Int)(Type::DoubleQ),
Overload(Function(Type::Int)(Type::Double)),
Function(Type::Int)(Type::Int, Type::Int),
- Type::MinMaxType(zone(), Type::Int()), Function(Type::Int)(Type::Float),
- Type::FroundType(zone(), Type::Int()),
+ Type::MinMaxType(zone(), Type::Signed(), Type::Int()),
+ Function(Type::Int)(Type::Float), Type::FroundType(zone()),
+ Type::FFIType(zone()), Type::FunctionTableType(zone(), 10),
};
for (size_t ii = 0; ii < arraysize(test_types); ++ii) {
@@ -263,8 +267,9 @@ TEST_F(AsmTypeTest, IsA) {
Function(Type::Int)(Type::DoubleQ),
Overload(Function(Type::Int)(Type::Double)),
Function(Type::Int)(Type::Int, Type::Int),
- Type::MinMaxType(zone(), Type::Int()), Function(Type::Int)(Type::Float),
- Type::FroundType(zone(), Type::Int()),
+ Type::MinMaxType(zone(), Type::Signed(), Type::Int()),
+ Function(Type::Int)(Type::Float), Type::FroundType(zone()),
+ Type::FFIType(zone()), Type::FunctionTableType(zone(), 10),
};
for (size_t ii = 0; ii < arraysize(test_types); ++ii) {
@@ -279,21 +284,23 @@ TEST_F(AsmTypeTest, IsA) {
}
TEST_F(AsmTypeTest, ValidateCall) {
- auto* min_max_int = Type::MinMaxType(zone(), Type::Int());
- auto* i2i = Function(Type::Int)(Type::Int);
- auto* ii2i = Function(Type::Int)(Type::Int, Type::Int);
- auto* iii2i = Function(Type::Int)(Type::Int, Type::Int, Type::Int);
- auto* iiii2i =
- Function(Type::Int)(Type::Int, Type::Int, Type::Int, Type::Int);
-
- EXPECT_EQ(Type::Int(),
+ 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);
+ auto* iii2s = Function(Type::Signed)(Type::Int, Type::Int, Type::Int);
+ 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));
- EXPECT_EQ(Type::Int(), min_max_int->AsCallableType()->ValidateCall(ii2i));
- EXPECT_EQ(Type::Int(), min_max_int->AsCallableType()->ValidateCall(iii2i));
- EXPECT_EQ(Type::Int(), min_max_int->AsCallableType()->ValidateCall(iiii2i));
- EXPECT_EQ(Type::None(), min_max_int->AsCallableType()->ValidateCall(i2i));
-
- auto* min_max_double = Type::MinMaxType(zone(), Type::Double());
+ EXPECT_EQ(Type::Signed(), min_max_int->AsCallableType()->ValidateCall(ii2s));
+ EXPECT_EQ(Type::Signed(), min_max_int->AsCallableType()->ValidateCall(iii2s));
+ EXPECT_EQ(Type::Signed(),
+ min_max_int->AsCallableType()->ValidateCall(iiii2s));
+ EXPECT_EQ(Type::None(), min_max_int->AsCallableType()->ValidateCall(i2s));
+
+ auto* min_max_double =
+ Type::MinMaxType(zone(), Type::Double(), Type::Double());
auto* d2d = Function(Type::Double)(Type::Double);
auto* dd2d = Function(Type::Double)(Type::Double, Type::Double);
auto* ddd2d =
@@ -312,29 +319,20 @@ TEST_F(AsmTypeTest, ValidateCall) {
auto* min_max = Overload(min_max_int, min_max_double);
EXPECT_EQ(Type::None(), min_max->AsCallableType()->ValidateCall(min_max));
- EXPECT_EQ(Type::None(), min_max->AsCallableType()->ValidateCall(i2i));
+ EXPECT_EQ(Type::None(), min_max->AsCallableType()->ValidateCall(i2s));
EXPECT_EQ(Type::None(), min_max->AsCallableType()->ValidateCall(d2d));
- EXPECT_EQ(Type::Int(), min_max->AsCallableType()->ValidateCall(min_max_int));
- EXPECT_EQ(Type::Int(), min_max->AsCallableType()->ValidateCall(ii2i));
- EXPECT_EQ(Type::Int(), min_max->AsCallableType()->ValidateCall(iii2i));
- EXPECT_EQ(Type::Int(), min_max->AsCallableType()->ValidateCall(iiii2i));
+ EXPECT_EQ(Type::Signed(),
+ min_max->AsCallableType()->ValidateCall(min_max_int));
+ EXPECT_EQ(Type::Signed(), min_max->AsCallableType()->ValidateCall(ii2s));
+ EXPECT_EQ(Type::Signed(), min_max->AsCallableType()->ValidateCall(iii2s));
+ EXPECT_EQ(Type::Signed(), min_max->AsCallableType()->ValidateCall(iiii2s));
EXPECT_EQ(Type::Double(),
min_max->AsCallableType()->ValidateCall(min_max_double));
EXPECT_EQ(Type::Double(), min_max->AsCallableType()->ValidateCall(dd2d));
EXPECT_EQ(Type::Double(), min_max->AsCallableType()->ValidateCall(ddd2d));
EXPECT_EQ(Type::Double(), min_max->AsCallableType()->ValidateCall(dddd2d));
- auto* fround_floatish = Type::FroundType(zone(), Type::Floatish());
- auto* fround_floatq = Type::FroundType(zone(), Type::FloatQ());
- auto* fround_float = Type::FroundType(zone(), Type::Float());
- auto* fround_doubleq = Type::FroundType(zone(), Type::DoubleQ());
- auto* fround_double = Type::FroundType(zone(), Type::Double());
- auto* fround_signed = Type::FroundType(zone(), Type::Signed());
- auto* fround_unsigned = Type::FroundType(zone(), Type::Unsigned());
- auto* fround_fixnum = Type::FroundType(zone(), Type::FixNum());
- auto* fround =
- Overload(fround_floatish, fround_floatq, fround_float, fround_doubleq,
- fround_double, fround_signed, fround_unsigned, fround_fixnum);
+ auto* fround = Type::FroundType(zone());
EXPECT_EQ(Type::Float(), fround->AsCallableType()->ValidateCall(
Function(Type::Float)(Type::Floatish)));
@@ -366,6 +364,67 @@ TEST_F(AsmTypeTest, ValidateCall) {
EXPECT_EQ(Type::Int(), overload->AsCallableType()->ValidateCall(idif2i));
EXPECT_EQ(Type::None(), overload->AsCallableType()->ValidateCall(i2d));
EXPECT_EQ(Type::None(), i2f->AsCallableType()->ValidateCall(i2d));
+
+ auto* ffi = Type::FFIType(zone());
+ AsmType* (*kReturnTypes[])() = {
+ Type::Void, Type::Double, Type::Signed,
+ };
+ AsmType* (*kExternTypes[])() = {
+ Type::Double, Type::Signed, Type::FixNum,
+ };
+ for (size_t ii = 0; ii < arraysize(kReturnTypes); ++ii) {
+ for (size_t jj = 0; jj < arraysize(kExternTypes); ++jj) {
+ auto* f = Function(kReturnTypes[ii])(kExternTypes[jj]);
+ EXPECT_EQ(kReturnTypes[ii](), ffi->AsCallableType()->ValidateCall(f))
+ << kReturnTypes[ii]()->Name();
+
+ // Call with extern type should fail.
+ f = Function(kReturnTypes[ii])(kExternTypes[jj], Type::Int);
+ EXPECT_EQ(Type::None(), ffi->AsCallableType()->ValidateCall(f))
+ << kReturnTypes[ii]()->Name();
+ }
+ }
+
+ auto* ft0 = Type::FunctionTableType(zone(), 10);
+ ft0->AsFunctionTableType()->set_signature(fi2d);
+ EXPECT_EQ(Type::Double(), ft0->AsCallableType()->ValidateCall(fi2d));
+ EXPECT_EQ(Type::None(), ft0->AsCallableType()->ValidateCall(i2d));
+
+ auto* ft1 = Type::FunctionTableType(zone(), 10);
+ EXPECT_EQ(Type::Double(), ft1->AsCallableType()->ValidateCall(fi2d));
+ EXPECT_EQ(Type::Double(), ft1->AsCallableType()->ValidateCall(fi2d));
+ EXPECT_EQ(Type::None(), ft1->AsCallableType()->ValidateCall(i2d));
+}
+
+TEST_F(AsmTypeTest, ToReturnType) {
+ std::unordered_map<AsmType*, AsmType*> kToReturnType = {
+ {Type::Signed(), Type::Signed()}, {Type::FixNum(), Type::Signed()},
+ {Type::Double(), Type::Double()}, {Type::Float(), Type::Float()},
+ {Type::Void(), Type::Void()},
+ };
+
+ 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::DoubleQ),
+ Overload(Function(Type::Int)(Type::Double)),
+ Function(Type::Int)(Type::Int, Type::Int),
+ Type::MinMaxType(zone(), Type::Signed(), Type::Int()),
+ Function(Type::Int)(Type::Float), Type::FroundType(zone()),
+ Type::FFIType(zone()), Type::FunctionTableType(zone(), 10),
+ };
+
+ for (size_t ii = 0; ii < arraysize(test_types); ++ii) {
+ auto* return_type = Type::None();
+ auto to_return_type_iter = kToReturnType.find(test_types[ii]);
+ if (to_return_type_iter != kToReturnType.end()) {
+ return_type = to_return_type_iter->second;
+ }
+ EXPECT_EQ(return_type, test_types[ii]->ToReturnType())
+ << return_type->Name() << " != " << test_types[ii]->ToReturnType();
+ }
}
TEST_F(AsmTypeTest, IsReturnType) {
@@ -377,8 +436,9 @@ TEST_F(AsmTypeTest, IsReturnType) {
Function(Type::Int)(Type::DoubleQ),
Overload(Function(Type::Int)(Type::Double)),
Function(Type::Int)(Type::Int, Type::Int),
- Type::MinMaxType(zone(), Type::Int()), Function(Type::Int)(Type::Float),
- Type::FroundType(zone(), Type::Int()),
+ Type::MinMaxType(zone(), Type::Signed(), Type::Int()),
+ Function(Type::Int)(Type::Float), Type::FroundType(zone()),
+ Type::FFIType(zone()), Type::FunctionTableType(zone(), 10),
};
std::unordered_set<Type*> return_types{
@@ -393,6 +453,38 @@ TEST_F(AsmTypeTest, IsReturnType) {
}
}
+TEST_F(AsmTypeTest, ToParameterType) {
+ std::unordered_map<AsmType*, AsmType*> kToParameterType = {
+ {Type::Int(), Type::Int()}, {Type::Signed(), Type::Int()},
+ {Type::Unsigned(), Type::Int()}, {Type::FixNum(), Type::Int()},
+ {Type::Double(), Type::Double()}, {Type::Float(), Type::Float()},
+ };
+
+ 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::DoubleQ),
+ Overload(Function(Type::Int)(Type::Double)),
+ Function(Type::Int)(Type::Int, Type::Int),
+ Type::MinMaxType(zone(), Type::Signed(), Type::Int()),
+ Function(Type::Int)(Type::Float), Type::FroundType(zone()),
+ Type::FFIType(zone()), Type::FunctionTableType(zone(), 10),
+ };
+
+ for (size_t ii = 0; ii < arraysize(test_types); ++ii) {
+ auto* parameter_type = Type::None();
+ auto to_parameter_type_iter = kToParameterType.find(test_types[ii]);
+ if (to_parameter_type_iter != kToParameterType.end()) {
+ parameter_type = to_parameter_type_iter->second;
+ }
+ EXPECT_EQ(parameter_type, test_types[ii]->ToParameterType())
+ << parameter_type->Name()
+ << " != " << test_types[ii]->ToParameterType();
+ }
+}
+
TEST_F(AsmTypeTest, IsParameterType) {
Type* test_types[] = {
#define CREATE(CamelName, string_name, number, parent_types) Type::CamelName(),
@@ -402,8 +494,9 @@ TEST_F(AsmTypeTest, IsParameterType) {
Function(Type::Int)(Type::DoubleQ),
Overload(Function(Type::Int)(Type::Double)),
Function(Type::Int)(Type::Int, Type::Int),
- Type::MinMaxType(zone(), Type::Int()), Function(Type::Int)(Type::Float),
- Type::FroundType(zone(), Type::Int()),
+ Type::MinMaxType(zone(), Type::Signed(), Type::Int()),
+ Function(Type::Int)(Type::Float), Type::FroundType(zone()),
+ Type::FFIType(zone()), Type::FunctionTableType(zone(), 10),
};
std::unordered_set<Type*> parameter_types{
@@ -428,8 +521,9 @@ TEST_F(AsmTypeTest, IsComparableType) {
Function(Type::Int)(Type::DoubleQ),
Overload(Function(Type::Int)(Type::Double)),
Function(Type::Int)(Type::Int, Type::Int),
- Type::MinMaxType(zone(), Type::Int()), Function(Type::Int)(Type::Float),
- Type::FroundType(zone(), Type::Int()),
+ Type::MinMaxType(zone(), Type::Signed(), Type::Int()),
+ Function(Type::Int)(Type::Float), Type::FroundType(zone()),
+ Type::FFIType(zone()), Type::FunctionTableType(zone(), 10),
};
std::unordered_set<Type*> comparable_types{
@@ -454,8 +548,9 @@ TEST_F(AsmTypeTest, ElementSizeInBytes) {
Function(Type::Int)(Type::DoubleQ),
Overload(Function(Type::Int)(Type::Double)),
Function(Type::Int)(Type::Int, Type::Int),
- Type::MinMaxType(zone(), Type::Int()), Function(Type::Int)(Type::Float),
- Type::FroundType(zone(), Type::Int()),
+ Type::MinMaxType(zone(), Type::Signed(), Type::Int()),
+ Function(Type::Int)(Type::Float), Type::FroundType(zone()),
+ Type::FFIType(zone()), Type::FunctionTableType(zone(), 10),
};
auto ElementSizeInBytesForType = [](Type* type) -> int32_t {
@@ -490,8 +585,9 @@ TEST_F(AsmTypeTest, LoadType) {
Function(Type::Int)(Type::DoubleQ),
Overload(Function(Type::Int)(Type::Double)),
Function(Type::Int)(Type::Int, Type::Int),
- Type::MinMaxType(zone(), Type::Int()), Function(Type::Int)(Type::Float),
- Type::FroundType(zone(), Type::Int()),
+ Type::MinMaxType(zone(), Type::Signed(), Type::Int()),
+ Function(Type::Int)(Type::Float), Type::FroundType(zone()),
+ Type::FFIType(zone()), Type::FunctionTableType(zone(), 10),
};
auto LoadTypeForType = [](Type* type) -> Type* {
@@ -526,8 +622,9 @@ TEST_F(AsmTypeTest, StoreType) {
Function(Type::Int)(Type::DoubleQ),
Overload(Function(Type::Int)(Type::Double)),
Function(Type::Int)(Type::Int, Type::Int),
- Type::MinMaxType(zone(), Type::Int()), Function(Type::Int)(Type::Float),
- Type::FroundType(zone(), Type::Int()),
+ Type::MinMaxType(zone(), Type::Signed(), Type::Int()),
+ Function(Type::Int)(Type::Float), Type::FroundType(zone()),
+ Type::FFIType(zone()), Type::FunctionTableType(zone(), 10),
};
auto StoreTypeForType = [](Type* type) -> Type* {
« src/wasm/asm-types.h ('K') | « src/wasm/asm-types.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698