protected override long RunDisruptorPass()
        {
            int            batchSize     = 10;
            CountdownEvent latch         = new CountdownEvent(1);
            long           expectedCount = myRunnable.GetSequence.Value + (ITERATIONS * batchSize);

            myRunnable.Reset(latch, expectedCount);
            Task.Factory.StartNew(() => myRunnable.Run());
            Stopwatch watch = Stopwatch.StartNew();

            ISequenced sequencer = this.sequencer;

            for (long i = 0; i < ITERATIONS; i++)
            {
                long next = sequencer.Next(batchSize);
                sequencer.Publish((next - (batchSize - 1)), next);
            }

            latch.Wait();

            long opsPerSecond = (ITERATIONS * 1000L * batchSize) / (watch.ElapsedMilliseconds);

            waitForEventProcessorSequence(expectedCount);

            return(opsPerSecond);
        }
예제 #2
0
        /// <summary>
        /// Examine if tit and tat are equal as sequenced collections
        /// using the specified item equalityComparer (assumed compatible with the two collections).
        /// </summary>
        /// <param name="collection1">The first collection</param>
        /// <param name="collection2">The second collection</param>
        /// <param name="itemequalityComparer">The item equalityComparer to use for comparison</param>
        /// <returns>True if equal</returns>
        public static bool StaticEquals(ISequenced <T> collection1, ISequenced <T> collection2, System.Collections.Generic.IEqualityComparer <T> itemequalityComparer)
        {
            if (object.ReferenceEquals(collection1, collection2))
            {
                return(true);
            }

            if (collection1.Count != collection2.Count)
            {
                return(false);
            }

            //This way we might run through both enumerations twice, but
            //probably not (if the hash codes are good)
            if (collection1.GetSequencedHashCode() != collection2.GetSequencedHashCode())
            {
                return(false);
            }

            using (System.Collections.Generic.IEnumerator <T> dat = collection2.GetEnumerator(), dit = collection1.GetEnumerator())
            {
                while (dit.MoveNext())
                {
                    dat.MoveNext();
                    if (!itemequalityComparer.Equals(dit.Current, dat.Current))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
예제 #3
0
 public void Init()
 {
     dit = new HashSet <int>(MemoryType);
     dat = new HashSet <int>(MemoryType);
     dut = new HashSet <int>(MemoryType);
     dit.Add(2); dit.Add(1);
     dat.Add(1); dat.Add(2);
     dut.Add(3);
     Dit = new LinkedList <ICollection <int> >();
     Dat = new LinkedList <ICollection <int> >();
     Dut = new LinkedList <ICollection <int> >();
 }
예제 #4
0
파일: ISequenced.cs 프로젝트: flyer87/C6
        public bool SequencedEquals(ISequenced <T> otherCollection)
        {
            // No preconditions
            // is Valid, not disposed
            Requires(IsValid);


            // Enumeration of the collections must yield equal items
            Ensures(Result <bool>() == (otherCollection != null && this.SequenceEqual(otherCollection, EqualityComparer)));
            Ensures(Result <bool>() == this.SequencedEquals(otherCollection, EqualityComparer));


            return(default(bool));
        }
예제 #5
0
 public void Init()
 {
     dit = new LinkedList <int>();
     dat = new LinkedList <int>();
     dut = new LinkedList <int>();
     dot = new LinkedList <int>();
     dit.Add(2); dit.Add(1);
     dat.Add(1); dat.Add(2);
     dut.Add(3);
     dot.Add(2); dot.Add(1);
     Dit = new HashSet <ISequenced <int> >(MemoryType);
     Dat = new HashSet <ISequenced <int> >(MemoryType);
     Dut = new HashSet <ISequenced <int> >(MemoryType);
     Dot = new HashSet <ISequenced <int> >(MemoryType);
 }
예제 #6
0
        /// <summary>
        /// Compute the unsequenced hash code of a collection
        /// </summary>
        /// <param name="items">The collection to compute hash code for</param>
        /// <param name="itemequalityComparer">The item equalitySCG.Comparer</param>
        /// <returns>The hash code</returns>
        public static int ComputeHashCode(ISequenced <T> items, System.Collections.Generic.IEqualityComparer <T> itemequalityComparer)
        {
            //NOTE: It must be possible to devise a much stronger combined hashcode,
            //but unfortunately, it has to be universal. OR we could use a (strong)
            //family and initialise its parameter randomly at load time of this class!
            //(We would not want to have yet a flag to check for invalidation?!)
            //NBNBNB: the current hashcode has the very bad property that items with hashcode 0
            // is ignored.
            int iIndexedHashCode = 0;

            foreach (T item in items)
            {
                iIndexedHashCode = iIndexedHashCode * HASHFACTOR + itemequalityComparer.GetHashCode(item);
            }

            return(iIndexedHashCode);
        }
예제 #7
0
        public static int GetSequencedHashCode <T>(this ISequenced <T> items, SCG.IEqualityComparer <T> equalityComparer = null)
        {
            if (items == null)
            {
                return(0); // TODO: Better default value?
            }

            if (equalityComparer == null)
            {
                equalityComparer = SCG.EqualityComparer <T> .Default;
            }

            var hashCode = 0; // TODO: Better intial value?

            foreach (var item in items)
            {
                hashCode = hashCode * HashFactor + equalityComparer.GetHashCode(item);
            }

            return(hashCode);
        }
예제 #8
0
        public static bool SequencedEquals <T>(this ISequenced <T> first, ISequenced <T> second, SCG.IEqualityComparer <T> equalityComparer = null)
        {
            Ensures(Result <bool>() == (ReferenceEquals(first, second) || (first != null && second != null && first.SequenceEqual(second, equalityComparer))));

            // Equal if reference equal - this is true for two nulls as well
            if (ReferenceEquals(first, second))
            {
                return(true);
            }

            if (first == null || second == null)
            {
                return(false);
            }

            if (first.Count != second.Count)
            {
                return(false);
            }

            if (equalityComparer == null)
            {
                equalityComparer = SCG.EqualityComparer <T> .Default;
            }

            using (var e1 = first.GetEnumerator())
                using (var e2 = second.GetEnumerator()) {
                    // Enumerators are equally long
                    while (e1.MoveNext() & e2.MoveNext())
                    {
                        if (!equalityComparer.Equals(e1.Current, e2.Current))
                        {
                            return(false);
                        }
                    }
                }

            return(true);
        }
예제 #9
0
 public void Dispose()
 {
     dit = dat = dut = dot = null;
     Dit = Dat = Dut = Dot = null;
 }
예제 #10
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="that"></param>
 /// <returns></returns>
 public bool SequencedEquals(ISequenced <T> that)
 {
     return(innerlist.SequencedEquals(that));
 }
예제 #11
0
 public StubPublisher(ISequenced ringBuffer)
 {
     _ringBuffer = ringBuffer;
 }
예제 #12
0
 /// <summary>
 /// Check if the contents of that is equal to the contents of this
 /// in the sequenced sense. Using the item equalityComparer of this collection.
 /// </summary>
 /// <param name="otherCollection">The collection to compare to.</param>
 /// <returns>True if  equal</returns>
 public virtual bool SequencedEquals(ISequenced <T> otherCollection)
 {
     return(StaticEquals((ISequenced <T>) this, otherCollection, itemequalityComparer));
 }
예제 #13
0
 /// <summary>
 /// Wrap a sequenced collection in a read-only wrapper
 /// </summary>
 /// <param name="sorted"></param>
 public GuardedSequenced(ISequenced <T> sorted) : base(sorted)
 {
     sequenced = sorted;
 }
예제 #14
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="that"></param>
 /// <returns></returns>
 public bool SequencedEquals(ISequenced <T> that)
 {
     return(sequenced.SequencedEquals(that));
 }
예제 #15
0
 public bool Equals(ISequenced <T> that)
 {
     return(false);
 }
예제 #16
0
 public abstract bool SequencedEquals(ISequenced <T> otherCollection);