/*
 * DFGtests.cpp
 *
 *  Created on: Jul 23, 2015
 *      Author: pgess
 */
#include "passmanager.h"
#include "pass/dfgpass.h"

#include "gtest/gtest.h"
using namespace xreate;
using namespace std;

TEST(DFG, testFunctionRetSymbolExists){
	PassManager* man = PassManager::prepareForCode
			("test = function():: int; entry  {\n"
			"  data = [1..5]::[int].\n"
			"  \n"
			"  result = loop fold(data->i::int, 0->sum::int)::int{\n"
			"    if (i==3)::int {valNull = null. valNull} else {i+sum}\n"
			"  }.\n"
			"  \n"
			"  result\n"
			"}");

	man->runWithoutCompilation();
	ClaspLayer::ModelFragment answer = man->clasp->query(Config::get("clasp.ret.symbol"));

	if (answer)
		EXPECT_EQ(1, std::distance(answer->first, answer->second));

	for (auto functionIt = answer->first; functionIt != answer->second; ++functionIt){
		auto ret = ClaspLayer::parse<string, Gringo::Value>(functionIt->second);

		ASSERT_EQ("test", std::get<0>(ret));

		SymbolPacked symbolRet = std::get<0>(ClaspLayer::parse<SymbolPacked>(std::get<1>(ret)));
		ASSERT_EQ(3, symbolRet.identifier);
		ASSERT_EQ(0, symbolRet.scope);
	}
}

