示例#1
0
        public void ThreadSafeLong_Add()
        {
            var tsdouble = new ThreadSafeLong(3L);

            tsdouble.Add(2L);
            tsdouble.Add(5L);
            Assert.Equal(10L, tsdouble.Value);
        }
        public void CanAddValue(long initial, long added, long expected)
        {
            var tslong = new ThreadSafeLong(initial);

            tslong.Add(added);
            Assert.Equal(expected, tslong.Value);
        }
        public void CanSetValue(long value)
        {
            var tslong = new ThreadSafeLong(0);

            tslong.Add(value);
            Assert.Equal(value, tslong.Value);
        }
        public async Task AddMultiThreads(int threads, int observations)
        {
            var tslong   = new ThreadSafeLong(0);
            var testData = new IEnumerable <long> [threads];
            var sum      = 0L;

            for (var i = 0; i < threads; i++)
            {
                var data = GenerateTestData(observations);
                sum        += data.sum;
                testData[i] = data.items;
            }

            await Task.WhenAll(testData.Select(async d =>
            {
                foreach (long item in d)
                {
                    await Task.Yield();
                    tslong.Add(item);
                }
            }).ToArray());

            Assert.Equal(sum, tslong.Value);
        }