Ejemplo n.º 1
0
        /// <summary>
        /// Construct a CasEntries from a another CanEntries without copying the
        /// array since both are read-only.
        /// </summary>
        /// <param name="casEntries">The source CasEntries</param>
        /// <param name="determinism">The new determinism flag</param>
        /// <remarks>
        /// This is for taking a CasEntries item and producing a new
        /// one with a different deterministic setting
        /// </remarks>
        public CasEntries(CasEntries casEntries, CacheDeterminism determinism = default(CacheDeterminism))
        {
            Contract.Requires(casEntries.IsValid);

            m_hashes    = casEntries.m_hashes;
            Determinism = determinism;
        }
Ejemplo n.º 2
0
        public void BuildXLCacheDeterminismRoundTrip(int determinism)
        {
            BuildXLCacheDeterminism buildXLCacheDeterminism = m_buildXLDeterminism[determinism];
            BuildXLCacheDeterminism roundTrip = buildXLCacheDeterminism.ToMemoization().FromMemoization();

            AssertDeterminismEqualEnough(buildXLCacheDeterminism, roundTrip);
        }
Ejemplo n.º 3
0
        public void MemoizationCacheDeterminismFromMemoization(int determinism)
        {
            MemoizationCacheDeterminism memoizationCacheDeterminism = m_memoizationDeterminism[determinism];
            BuildXLCacheDeterminism     buildXLCacheDeterminism     = memoizationCacheDeterminism.FromMemoization();

            AssertDeterminismEqualEnough(buildXLCacheDeterminism, memoizationCacheDeterminism);
        }
Ejemplo n.º 4
0
        public void BuildXLCacheDeterminismToMemoization(int determinism)
        {
            BuildXLCacheDeterminism     buildXLCacheDeterminism     = m_buildXLDeterminism[determinism];
            MemoizationCacheDeterminism memoizationCacheDeterminism = buildXLCacheDeterminism.ToMemoization();

            AssertDeterminismEqualEnough(buildXLCacheDeterminism, memoizationCacheDeterminism);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Construct a CasHash entries read-only array from the given array
        /// </summary>
        /// <param name="casHashes">The ordred list of CasHashes</param>
        /// <param name="determinism">The CacheDeterminism value for this CasEntries</param>
        /// <remarks>
        /// The isDeterministic flag defaults to CacheDeterminism.None but if the
        /// buildengine knows that the content produced by the build transform
        /// is deterministic, it can set this to CacheDeterminism.Tool to help
        /// (a) the cache operate better and
        /// (b) catch bugs where determinism was not achieved even when expected
        ///
        /// Cache Agregators may use this flag in order to flag a "deterministic"
        /// result that was achieved via a shared cache (cache based determinism
        /// recovery) and will also help catch failures of that to work correctly.
        /// </remarks>
        public CasEntries(IEnumerable <CasHash> casHashes, CacheDeterminism determinism = default(CacheDeterminism))
        {
            Contract.Requires(casHashes != null);

            // The extension method here does the most efficient copy it can
            m_hashes    = casHashes.ToArray();
            Determinism = determinism;
        }
Ejemplo n.º 6
0
 private static void AssertDeterminismEqualEnough(BuildXLCacheDeterminism expected, BuildXLCacheDeterminism actual)
 {
     if (!expected.IsDeterministic)
     {
         Assert.Equal(expected.EffectiveGuid, actual.EffectiveGuid);
     }
     else
     {
         Assert.Equal(expected, actual);
     }
 }
Ejemplo n.º 7
0
 private static void AssertDeterminismEqualEnough(BuildXLCacheDeterminism buildXL, MemoizationCacheDeterminism memoization)
 {
     if (!buildXL.IsDeterministic)
     {
         Assert.Equal(buildXL.EffectiveGuid, memoization.EffectiveGuid);
     }
     else
     {
         Assert.Equal(buildXL.Guid, memoization.Guid);
         Assert.Equal(buildXL.ExpirationUtc, memoization.ExpirationUtc);
     }
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FullCacheRecordWithDeterminism"/> struct.
 /// </summary>
 public FullCacheRecordWithDeterminism(CacheDeterminism determinism)
 {
     Record      = null;
     Determinism = determinism;
 }