blob: d4400acc7a9f2aa368f96ec09bc815a188ae41c1 [file] [log] [blame] [edit]
#include "analysis/cfg.h"
#include "support/colors.h"
#include "wasm-s-parser.h"
#include "wasm.h"
#include "gtest/gtest.h"
using namespace wasm;
using namespace wasm::analysis;
TEST(CFGTest, Print) {
auto moduleText = R"wasm(
(module
(func $foo
(drop
(i32.const 0)
)
(drop
(if (result i32)
(i32.const 1)
(block
(loop $loop
(br_if $loop
(i32.const 2)
)
)
(i32.const 3)
)
(return
(i32.const 4)
)
)
)
)
)
)wasm";
auto cfgText = R"cfg(;; preds: [], succs: [1, 5]
0:
0: i32.const 0
1: drop
2: i32.const 1
;; preds: [0], succs: [2]
1:
;; preds: [1, 2], succs: [3, 2]
2:
3: i32.const 2
4: br_if $loop
;; preds: [2], succs: [4]
3:
5: loop $loop
;; preds: [3], succs: [6]
4:
6: i32.const 3
7: block
;; preds: [0], succs: []
5:
8: i32.const 4
9: return
;; preds: [4], succs: []
6:
10: drop
11: block
)cfg";
Module wasm;
SExpressionParser parser(moduleText);
SExpressionWasmBuilder builder(wasm, *(*parser.root)[0], IRProfile::Normal);
CFG cfg = CFG::fromFunction(wasm.getFunction("foo"));
bool colors = Colors::isEnabled();
Colors::setEnabled(false);
std::stringstream ss;
cfg.print(ss);
Colors::setEnabled(colors);
EXPECT_EQ(ss.str(), cfgText);
}