/// <summary>
        /// Serializes and deserializes graph fragments synchronously according to its dependency relation specified by their order in the array.
        /// </summary>
        /// <param name="fragments">Graph fragments with total order on their dependency relation.</param>
        /// <returns>Resulting pip graph.</returns>
        private PipGraph SerializeDeserializeFragmentsSynchronously(params TestPipGraphFragment[] fragments)
        {
            var streams = SerializeFragmentsSynchronously(fragments);

            var fragmentManager = new PipGraphFragmentManager(LoggingContext, Context, PipGraphBuilder);

            for (int i = 0; i < streams.Length; ++i)
            {
                XAssert.IsTrue(fragmentManager.AddFragmentFileToGraph(streams[i], fragments[i].ModuleName));
            }

            DisposeStreams(streams);

            return(PipGraphBuilder.Build());
        }
        /// <summary>
        /// Serializes and deserializes graph fragments in parallel.
        /// </summary>
        /// <param name="fragments">Graph fragments.</param>
        /// <returns>Resulting pip graph.</returns>
        /// <remarks>
        /// The graph fragments, <paramref name="fragments"/>, are serialized synchronously, but are deserialized in parallel.
        /// For correctness, the graph fragments in <paramref name="fragments"/> are assumed to be independent of each other.
        /// </remarks>
        private PipGraph SerializeDeserializeFragmentsInParallel(params TestPipGraphFragment[] fragments)
        {
            var streams = SerializeFragmentsSynchronously(fragments);

            var fragmentManager = new PipGraphFragmentManager(LoggingContext, Context, PipGraphBuilder);

            Parallel.For(
                0,
                fragments.Length,
                i =>
            {
                XAssert.IsTrue(fragmentManager.AddFragmentFileToGraph(streams[i], fragments[i].ModuleName));
            });

            DisposeStreams(streams);

            return(PipGraphBuilder.Build());
        }