mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
61 lines
1.9 KiB
C++
61 lines
1.9 KiB
C++
//===--- ImportTests.cpp - Tests for representation of imports ------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "TestContext.h"
|
|
#include "swift/AST/Import.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace swift;
|
|
using namespace swift::unittest;
|
|
|
|
namespace {
|
|
/// Helper class used to create ImportPath and hold all strings for identifiers
|
|
class ImportPathContext {
|
|
TestContext Ctx;
|
|
|
|
public:
|
|
ImportPathContext() = default;
|
|
|
|
/// Helper routine for building ImportPath
|
|
/// Build()
|
|
/// @see ImportPathBuilder
|
|
inline ImportPath Build(StringRef Name) noexcept {
|
|
return ImportPath::Builder(Ctx.Ctx, Name, '.').copyTo(Ctx.Ctx);
|
|
}
|
|
};
|
|
|
|
} // namespace
|
|
|
|
TEST(ImportPath, Comparison) {
|
|
ImportPathContext ctx;
|
|
|
|
/// Simple soundness check:
|
|
EXPECT_FALSE(ctx.Build("A.B.C") < ctx.Build("A.B.C"));
|
|
|
|
/// Check order chain:
|
|
/// A < A.A < A.A.A < A.A.B < A.B < A.B.A < AA < B < B.A
|
|
EXPECT_LT(ctx.Build("A"), ctx.Build("A.A"));
|
|
EXPECT_LT(ctx.Build("A.A"), ctx.Build("A.A.A"));
|
|
EXPECT_LT(ctx.Build("A.A.A"), ctx.Build("A.A.B"));
|
|
EXPECT_LT(ctx.Build("A.A.B"), ctx.Build("A.B"));
|
|
EXPECT_LT(ctx.Build("A.B"), ctx.Build("A.B.A"));
|
|
EXPECT_LT(ctx.Build("A.B.A"), ctx.Build("AA"));
|
|
EXPECT_LT(ctx.Build("B"), ctx.Build("B.A"));
|
|
|
|
/// Further ImportPaths are semantically incorrect, but we must
|
|
/// check that comparing them does not cause compiler to crash.
|
|
EXPECT_LT(ctx.Build("."), ctx.Build("A"));
|
|
EXPECT_LT(ctx.Build("A"), ctx.Build("AA."));
|
|
EXPECT_LT(ctx.Build("A"), ctx.Build("AA.."));
|
|
EXPECT_LT(ctx.Build(".A"), ctx.Build("AA"));
|
|
}
|