Пример #1
0
    void NodeIdRangeTests::TestSubtractRanges(NodeIdRange const & range, vector<NodeIdRange> const & excludes)
    {
        vector<NodeIdRange> result;

        range.Subtract(excludes, result);
        Trace.WriteInfo(TraceRangeTest, "Range {0} exclude {1} returned {2}",
            range, excludes, result);

        LargeInteger overlapSize = LargeInteger::Zero;
        for (size_t i = 0; i < result.size(); i++)
        {
            VERIFY_IS_TRUE(!result[i].IsEmpty);
            VERIFY_IS_TRUE(range.Contains(result[i]));

            for (size_t j = 0; j < excludes.size(); j++)
            {
                VERIFY_IS_TRUE(result[i].Disjoint(excludes[j]));
            }

            overlapSize = overlapSize + GetOverlapSize(range, result[i]);
        }

        for (size_t i = 0; i + 1 < result.size(); i++)
        {
            for (size_t j = i + 1; j < result.size(); j++)
            {
                VERIFY_IS_TRUE(result[i].Disjoint(result[j]));
            }
        }

        for (size_t i = 0; i < excludes.size(); i++)
        {
            overlapSize = overlapSize + GetOverlapSize(range, excludes[i]);
        }

        VERIFY_IS_TRUE(GetRangeSize(range) == overlapSize);
    }
Пример #2
0
    void NodeIdRangeTests::TestSubtract(NodeIdRange const & range, NodeIdRange const & exclude)
    {
        NodeIdRange range1, range2;
        range.Subtract(exclude, range1, range2);

        Trace.WriteInfo(TraceRangeTest, "Range {0} exclude {1} returned {2} and {3}",
            range, exclude, range1, range2);

        if (!range1.IsEmpty)
        {
            VERIFY_IS_TRUE(range.Contains(range1) && exclude.Disjoint(range1));
            if (!range2.IsEmpty)
            {
                VERIFY_IS_TRUE(range1.Disjoint(range2) && !range1.IsSuccAdjacent(range2) && !range1.IsPredAdjacent(range2));
            }
        }

        if (!range2.IsEmpty)
        {
            VERIFY_IS_TRUE((range2.IsEmpty || range.Contains(range2)) && exclude.Disjoint(range2));
        }

        VERIFY_IS_TRUE(GetRangeSize(range) == GetOverlapSize(range, exclude) + GetRangeSize(range1) + GetRangeSize(range2));
    }