Jlm
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 
10 TEST(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 
26 TEST(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 
41 TEST(FreeOperationTests, TestThreeAddressCodeCreator)
42 {
43  using namespace jlm::llvm;
44 
45  // Arrange
46  InterProceduralGraphModule ipgModule(jlm::util::FilePath(""), "", "");
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 
61 TEST(FreeOperationTests, TestRvsdgCreator)
62 {
63  using namespace jlm::llvm;
64 
65  // Arrange
66  jlm::rvsdg::Graph rvsdg;
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
static rvsdg::Input & addressInput(const rvsdg::Node &node) noexcept
Definition: operators.hpp:2538
static std::unique_ptr< llvm::ThreeAddressCode > Create(const Variable *pointer, const std::vector< const Variable * > &memoryStates, const Variable *iOState)
Definition: operators.hpp:2558
static std::shared_ptr< const IOStateType > Create()
Definition: types.cpp:343
llvm::Variable * create_variable(std::shared_ptr< const jlm::rvsdg::Type > type, const std::string &name)
static std::shared_ptr< const MemoryStateType > Create()
Definition: types.cpp:379
static std::shared_ptr< const PointerType > Create()
Definition: types.cpp:45
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.