blob: 4800c93b1016b93ca6b4852d852e361d3541cfa5 [file] [log] [blame]
//===- unittests/BuildSystem/BuildValueTest.cpp ---------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2016 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#include "llbuild/BuildSystem/BuildValue.h"
#include "gtest/gtest.h"
using namespace llbuild;
using namespace llbuild::buildsystem;
using namespace llvm;
namespace {
TEST(BuildValueTest, virtualValueSerialization) {
// Check that two identical values are equivalent.
{
BuildValue a = BuildValue::makeVirtualInput();
EXPECT_EQ(a.toData(), BuildValue::makeVirtualInput().toData());
}
// Check that a moved complex value is equivalent.
{
BuildValue tmp = BuildValue::makeVirtualInput();
BuildValue a = std::move(tmp);
EXPECT_EQ(a.toData(), BuildValue::makeVirtualInput().toData());
}
// Check that an rvalue initialized complex value is equivalent.
{
BuildValue tmp = BuildValue::makeVirtualInput();
BuildValue a{ std::move(tmp) };
EXPECT_EQ(a.toData(), BuildValue::makeVirtualInput().toData());
}
}
TEST(BuildValueTest, commandValueSingleOutputSerialization) {
uint64_t signature = 0xDEADBEEF;
basic::FileInfo infos[1] = {};
infos[0].size = 1;
// Check that two identical values are equivalent.
{
BuildValue a = BuildValue::makeSuccessfulCommand(infos, signature);
EXPECT_EQ(a.toData(),
BuildValue::makeSuccessfulCommand(infos, signature).toData());
}
// Check that a moved complex value is equivalent.
{
BuildValue tmp = BuildValue::makeSuccessfulCommand(infos, signature);
BuildValue a = std::move(tmp);
EXPECT_EQ(a.toData(),
BuildValue::makeSuccessfulCommand(infos, signature).toData());
}
// Check that an rvalue initialized complex value is equivalent.
{
BuildValue tmp = BuildValue::makeSuccessfulCommand(infos, signature);
BuildValue a{ std::move(tmp) };
EXPECT_EQ(a.toData(),
BuildValue::makeSuccessfulCommand(infos, signature).toData());
}
}
TEST(BuildValueTest, commandValueMultipleOutputsSerialization) {
uint64_t signature = 0xDEADBEEF;
basic::FileInfo infos[2] = {};
infos[0].size = 1;
infos[1].size = 2;
// Check that two identical values are equivalent.
{
BuildValue a = BuildValue::makeSuccessfulCommand(infos, signature);
EXPECT_EQ(a.toData(),
BuildValue::makeSuccessfulCommand(infos, signature).toData());
}
// Check that a moved complex value is equivalent.
{
BuildValue tmp = BuildValue::makeSuccessfulCommand(infos, signature);
BuildValue a = std::move(tmp);
EXPECT_EQ(a.toData(),
BuildValue::makeSuccessfulCommand(infos, signature).toData());
}
// Check that an rvalue initialized complex value is equivalent.
{
BuildValue tmp = BuildValue::makeSuccessfulCommand(infos, signature);
BuildValue a{ std::move(tmp) };
EXPECT_EQ(a.toData(),
BuildValue::makeSuccessfulCommand(infos, signature).toData());
}
}
}