14TEST(DeltaTests, TestDeltaCreation)
20 auto valueType = TestType::createValueType();
21 auto pointerType = PointerType::Create();
28 LlvmDeltaOperation::Create(valueType,
"test-delta1", Linkage::externalLinkage,
"",
true, 4));
29 auto dep = delta1->AddContextVar(*imp).inner;
30 auto d1 = &delta1->finalize(
31 TestOperation::createNode(delta1->subregion(), { dep }, { valueType })->output(0));
35 LlvmDeltaOperation::Create(valueType,
"test-delta2", Linkage::internalLinkage,
"",
false, 4));
36 auto d2 = &delta2->finalize(
37 TestOperation::createNode(delta2->subregion(), {}, { valueType })->output(0));
39 GraphExport::Create(*d1,
"");
40 GraphExport::Create(*d2,
"");
47 EXPECT_TRUE(delta1->constant());
48 EXPECT_EQ(*delta1->Type(), *valueType);
50 EXPECT_FALSE(delta2->constant());
51 EXPECT_EQ(*delta2->Type(), *valueType);
54TEST(DeltaTests, TestRemoveDeltaInputsWhere)
60 auto valueType = TestType::createValueType();
67 LlvmDeltaOperation::Create(valueType,
"delta", Linkage::externalLinkage,
"",
true, 4));
68 auto deltaInput0 = deltaNode->AddContextVar(*x).input;
69 auto deltaInput1 = deltaNode->AddContextVar(*x).input;
70 deltaNode->AddContextVar(*x);
73 { deltaNode->MapInputContextVar(*deltaInput1).inner },
74 std::vector<std::shared_ptr<const Type>>{ valueType },
75 std::vector<std::shared_ptr<const Type>>{ valueType })
78 deltaNode->finalize(result);
82 auto numRemovedInputs = deltaNode->RemoveDeltaInputsWhere(
85 return input.
index() == deltaInput1->index();
87 EXPECT_EQ(numRemovedInputs, 0u);
88 EXPECT_EQ(deltaNode->ninputs(), 3u);
89 EXPECT_EQ(deltaNode->GetContextVars().size(), 3u);
92 numRemovedInputs = deltaNode->RemoveDeltaInputsWhere(
95 return input.
index() == 2;
97 EXPECT_EQ(numRemovedInputs, 1u);
98 EXPECT_EQ(deltaNode->ninputs(), 2u);
99 EXPECT_EQ(deltaNode->GetContextVars().size(), 2u);
100 EXPECT_EQ(deltaNode->input(0), deltaInput0);
101 EXPECT_EQ(deltaNode->input(1), deltaInput1);
104 numRemovedInputs = deltaNode->RemoveDeltaInputsWhere(
107 return input.
index() == 0;
109 EXPECT_EQ(numRemovedInputs, 1u);
110 EXPECT_EQ(deltaNode->ninputs(), 1u);
111 EXPECT_EQ(deltaNode->GetContextVars().size(), 1u);
112 EXPECT_EQ(deltaNode->input(0), deltaInput1);
113 EXPECT_EQ(deltaInput1->index(), 0u);
114 EXPECT_EQ(deltaNode->MapInputContextVar(*deltaInput1).inner->index(), 0u);
117TEST(DeltaTests, TestPruneDeltaInputs)
123 auto valueType = TestType::createValueType();
130 LlvmDeltaOperation::Create(valueType,
"delta", Linkage::externalLinkage,
"",
true, 4));
132 deltaNode->AddContextVar(*x);
133 auto deltaInput1 = deltaNode->AddContextVar(*x).input;
134 deltaNode->AddContextVar(*x);
137 { deltaNode->MapInputContextVar(*deltaInput1).inner },
138 std::vector<std::shared_ptr<const Type>>{ valueType },
139 std::vector<std::shared_ptr<const Type>>{ valueType })
142 deltaNode->finalize(result);
145 auto numRemovedInputs = deltaNode->PruneDeltaInputs();
148 EXPECT_EQ(numRemovedInputs, 2u);
149 EXPECT_EQ(deltaNode->ninputs(), 1u);
150 EXPECT_EQ(deltaNode->GetContextVars().size(), 1u);
151 EXPECT_EQ(deltaNode->input(0), deltaInput1);
152 EXPECT_EQ(deltaNode->subregion()->argument(0), deltaNode->MapInputContextVar(*deltaInput1).inner);
153 EXPECT_EQ(deltaInput1->index(), 0u);
154 EXPECT_EQ(deltaNode->MapInputContextVar(*deltaInput1).inner->index(), 0u);