/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 *
 * Author: pgess <v.melnychenko@xreate.org>
 * Created on June 7, 2018, 3:35 PM
 *
 * \file    transcend.cpp
 * \brief   Transcend's tests
 */

#include "xreatemanager.h"
#include "transcendlayer.h"
#include "supplemental/docutils.h"
#include <gtest/gtest.h>

using namespace xreate;
using namespace std;

TEST(Transcend, Parse1) {
  std::string script =
    R"Code(
)Code";

  std::unique_ptr<details::tier1::XreateManager> man(details::tier1::XreateManager::prepare(std::move(script)));

  std::string scriptTranscend =
    R"Code(
    test1((1)).
    test2((1, 2)).
)Code";

  man->transcend->addRawScript(move(scriptTranscend));
  man->analyse();

  StaticModel solution = man->transcend->query("test1");
  Gringo::Symbol symbTest1 = solution.begin()->second;
  auto answer1 = man->transcend->parse<list<int>>(symbTest1);
  ASSERT_EQ(1, get<0>(answer1).size());

  solution = man->transcend->query("test2");
  Gringo::Symbol symbTest2 = solution.begin()->second;
  auto answer2 = get<0>(man->transcend->parse<list<int>>(symbTest2));
  ASSERT_EQ(2, answer2.size());
}

TEST(Transcend, Doc_Expressions1) {
  string code = getDocumentationExampleById("documentation/Transcend/transcend.xml", "Expressions1");
  XreateManager::prepare(move(code));

  ASSERT_TRUE(true);
}

TEST(Transcend, Doc_Codeblocks1) {
  string code = getDocumentationExampleById("documentation/Transcend/transcend.xml", "Codeblocks1");
  XreateManager::prepare(move(code));

  ASSERT_TRUE(true);
}