Jlm
Loading...
Searching...
No Matches
FreeTests.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2023 Nico Reißmann <nico.reissmann@gmail.com>
3 * See COPYING for terms of redistribution.
4 */
5
6#include <gtest/gtest.h>
7
9
10TEST(FreeOperationTests, TestFreeConstructor)
11{
12 using namespace jlm::llvm;
13
14 // Arrange and Act
15 FreeOperation free0(0);
16 FreeOperation free2(2);
17
18 // Assert
19 EXPECT_EQ(free0.narguments(), 2u);
20 EXPECT_EQ(free0.nresults(), 1u);
21
22 EXPECT_EQ(free2.narguments(), 4u);
23 EXPECT_EQ(free2.nresults(), 3u);
24}
25
26TEST(FreeOperationTests, TestEqualityOperator)
27{
28 using namespace jlm::llvm;
29
30 // Arrange
31 FreeOperation free0(0);
32 FreeOperation free1(1);
33 FreeOperation free2(1);
34
35 // Act and Assert
36 EXPECT_NE(free0, free1);
37 EXPECT_EQ(free1, free1);
38 EXPECT_NE(free1, free2); // 2 different instances should not compare equal
39}
40
41TEST(FreeOperationTests, TestThreeAddressCodeCreator)
42{
43 using namespace jlm::llvm;
44
45 // Arrange
47
48 auto address = ipgModule.create_variable(PointerType::Create(), "p");
49 auto memoryState = ipgModule.create_variable(MemoryStateType::Create(), "m");
50 auto iOState = ipgModule.create_variable(IOStateType::Create(), "io");
51
52 // Act
53 auto free0 = FreeOperation::Create(address, {}, iOState);
54 auto free1 = FreeOperation::Create(address, { memoryState }, iOState);
55
56 // Assert
57 EXPECT_EQ(free0->nresults(), 1u);
58 EXPECT_EQ(free1->nresults(), 2u);
59}
60
61TEST(FreeOperationTests, TestRvsdgCreator)
62{
63 using namespace jlm::llvm;
64
65 // Arrange
67
68 auto address = &jlm::rvsdg::GraphImport::Create(rvsdg, PointerType::Create(), "p");
69 auto memoryState = &jlm::rvsdg::GraphImport::Create(rvsdg, MemoryStateType::Create(), "m");
70 auto iOState = &jlm::rvsdg::GraphImport::Create(rvsdg, IOStateType::Create(), "io");
71
72 // Act
73 auto freeResults0 = FreeOperation::Create(address, {}, iOState);
74 auto freeResults1 = FreeOperation::Create(address, { memoryState }, iOState);
75
76 auto & freeNode0 = jlm::rvsdg::AssertGetOwnerNode<jlm::rvsdg::SimpleNode>(*freeResults0[0]);
77
78 // Assert
79 EXPECT_EQ(freeResults0.size(), 1u);
80 EXPECT_EQ(freeResults1.size(), 2u);
81 EXPECT_EQ(FreeOperation::addressInput(freeNode0).origin(), address);
82}
TEST(FreeOperationTests, TestFreeConstructor)
Definition FreeTests.cpp:10
llvm::Variable * create_variable(std::shared_ptr< const jlm::rvsdg::Type > type, const std::string &name)
static GraphImport & Create(Graph &graph, std::shared_ptr< const rvsdg::Type > type, std::string name)
Definition graph.cpp:36
size_t nresults() const noexcept
Definition operation.cpp:30
size_t narguments() const noexcept
Definition operation.cpp:17
Global memory state passed between functions.
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
Definition node.hpp:872