Assembly test for OpGroupMemberDecorate
authorDavid Neto <dneto@google.com>
Mon, 28 Sep 2015 18:09:29 +0000 (14:09 -0400)
committerDavid Neto <dneto@google.com>
Mon, 26 Oct 2015 16:55:33 +0000 (12:55 -0400)
Provides test coverage for OperandVariableIdLiteral
from the syntax table in the file 'opcode.inc'.

test/TextToBinary.Annotation.cpp

index 642ff8b..cbc1445 100644 (file)
@@ -284,9 +284,48 @@ INSTANTIATE_TEST_CASE_P(TextToBinaryDecorateLinkage, OpDecorateLinkageTest,
 #undef CASE
 // clang-format on
 
+
+// Test OpGroupMemberDecorate
+
+TEST_F(TextToBinaryTest, GroupMemberDecorateGoodOneTarget) {
+  EXPECT_THAT(CompiledInstructions("OpGroupMemberDecorate %group %id0 42"),
+              Eq(MakeInstruction(spv::OpGroupMemberDecorate,
+                                {1, 2, 42})));
+}
+
+TEST_F(TextToBinaryTest, GroupMemberDecorateGoodTwoTargets) {
+  EXPECT_THAT(CompiledInstructions("OpGroupMemberDecorate %group %id0 96 %id1 42"),
+              Eq(MakeInstruction(spv::OpGroupMemberDecorate,
+                                {1, 2, 96, 3, 42})));
+}
+
+TEST_F(TextToBinaryTest, GroupMemberDecorateMissingGroupId) {
+  EXPECT_THAT(CompileFailure("OpGroupMemberDecorate"),
+              Eq("Expected operand, found end of stream."));
+}
+
+TEST_F(TextToBinaryTest, GroupMemberDecorateInvalidGroupId) {
+  EXPECT_THAT(CompileFailure("OpGroupMemberDecorate 16"),
+              Eq("Expected id to start with %."));
+}
+
+TEST_F(TextToBinaryTest, GroupMemberDecorateInvalidTargetId) {
+  EXPECT_THAT(CompileFailure("OpGroupMemberDecorate %group 12"),
+              Eq("Expected id to start with %."));
+}
+
+TEST_F(TextToBinaryTest, GroupMemberDecorateMissingTargetMemberNumber) {
+  EXPECT_THAT(CompileFailure("OpGroupMemberDecorate %group %id0"),
+              Eq("Expected operand, found end of stream."));
+}
+
+TEST_F(TextToBinaryTest, GroupMemberDecorateInvalidTargetMemberNumber) {
+  EXPECT_THAT(CompileFailure("OpGroupMemberDecorate %group %id0 %id1"),
+              Eq("Invalid literal number '%id1'."));
+}
+
 // TODO(dneto): OpMemberDecorate
 // TODO(dneto): OpDecorationGroup
 // TODO(dneto): OpGroupDecorate
-// TODO(dneto): OpGroupMemberDecorate
 
 }  // anonymous namespace