aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/compiler/xla/shape_util_test.cc
diff options
context:
space:
mode:
authorGravatar Mark Heffernan <meheff@google.com>2018-06-14 14:51:26 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-06-14 14:54:32 -0700
commitf01d25471dbe26f0a1116009badc4af169f82b02 (patch)
treeddc3ff3aff6b69d49e505c92842e8ed20e413c76 /tensorflow/compiler/xla/shape_util_test.cc
parent840aeb0ce9bd0f0a1c275edc9fe6d51eff5cf33f (diff)
Add support for TOKEN type to CPU/GPU backends.
TOKENs will be used for ordering side-effecting operations. They are not materialized but can be contained in tuples and flow into and out of computations. This CL adds a trivial representation for the cpu and gpu backends to support TOKENs and modifies copy insertion to avoid making copies of tokens. This also adds a Literal TOKEN which is required for the interpreter backend. PiperOrigin-RevId: 200623120
Diffstat (limited to 'tensorflow/compiler/xla/shape_util_test.cc')
-rw-r--r--tensorflow/compiler/xla/shape_util_test.cc35
1 files changed, 35 insertions, 0 deletions
diff --git a/tensorflow/compiler/xla/shape_util_test.cc b/tensorflow/compiler/xla/shape_util_test.cc
index ebfe06d4bc..61aa198e52 100644
--- a/tensorflow/compiler/xla/shape_util_test.cc
+++ b/tensorflow/compiler/xla/shape_util_test.cc
@@ -172,6 +172,41 @@ TEST(ShapeUtilTest, CompatibleIdenticalShapes) {
ASSERT_TRUE(ShapeUtil::Compatible(shape1, shape2));
}
+TEST(ShapeUtilTest, TokenCompatibility) {
+ EXPECT_TRUE(ShapeUtil::Compatible(ShapeUtil::MakeTokenShape(),
+ ShapeUtil::MakeTokenShape()));
+ EXPECT_FALSE(ShapeUtil::Compatible(ShapeUtil::MakeTokenShape(),
+ ShapeUtil::MakeShape(F32, {})));
+ EXPECT_FALSE(ShapeUtil::Compatible(ShapeUtil::MakeShape(F32, {}),
+ ShapeUtil::MakeTokenShape()));
+ EXPECT_TRUE(ShapeUtil::Compatible(
+ ShapeUtil::MakeTupleShape({ShapeUtil::MakeTokenShape()}),
+ ShapeUtil::MakeTupleShape({ShapeUtil::MakeTokenShape()})));
+}
+
+TEST(ShapeUtilTest, TokensEqualShapes) {
+ EXPECT_TRUE(ShapeUtil::Equal(ShapeUtil::MakeTokenShape(),
+ ShapeUtil::MakeTokenShape()));
+ EXPECT_FALSE(ShapeUtil::Equal(ShapeUtil::MakeTokenShape(),
+ ShapeUtil::MakeShape(F32, {})));
+ EXPECT_FALSE(ShapeUtil::Equal(ShapeUtil::MakeShape(F32, {}),
+ ShapeUtil::MakeTokenShape()));
+ EXPECT_TRUE(ShapeUtil::Equal(
+ ShapeUtil::MakeTupleShape(
+ {ShapeUtil::MakeTokenShape(),
+ ShapeUtil::MakeShapeWithLayout(S32, {3, 4}, {0, 1})}),
+ ShapeUtil::MakeTupleShape(
+ {ShapeUtil::MakeTokenShape(),
+ ShapeUtil::MakeShapeWithLayout(S32, {3, 4}, {0, 1})})));
+ EXPECT_FALSE(ShapeUtil::Equal(
+ ShapeUtil::MakeTupleShape(
+ {ShapeUtil::MakeTokenShape(),
+ ShapeUtil::MakeShapeWithLayout(S32, {3, 4}, {0, 1})}),
+ ShapeUtil::MakeTupleShape(
+ {ShapeUtil::MakeTokenShape(),
+ ShapeUtil::MakeShapeWithLayout(S32, {3, 4}, {1, 0})})));
+}
+
TEST(ShapeUtilTest, CompatibleNotIdenticalShapes) {
Shape shape_1 = ShapeUtil::MakeShape(F32, {3, 2});
auto layout_1 = shape_1.mutable_layout();