コード例 #1
0
        public void ModMultExpTests()
        {
            long n        = 21;
            long x        = 5;
            long y        = 6;
            long expected = 3;

            var transform = NumberTheoryTransforms.ModMult(x, n).Pow(2);

            var input = y.ToBitsPad(5).Select(bit => bit ? Qubit.ClassicOne : Qubit.ClassicZero).ToArray();
            var res   = transform.Transform(new MultiQubit(input)).ToArray();

            // only one basis should have anything
            res.Where(r => r.Magnitude > 0).Single();

            long finalAnswer = -1;

            foreach (long i in LongExt.Range(0, res.LongLength))
            {
                if (res[i] == 1)
                {
                    finalAnswer = i;
                }
            }
            finalAnswer.Should().Be(expected);
        }
コード例 #2
0
        public void LongRange_OutOfRange()
        {
            IEnumerable <long> items = LongExt.Range(long.MaxValue - 1, 1);

            Assert.AreEqual(items.Last(), long.MaxValue - 1);
        }
コード例 #3
0
        public void LongRange_SeveralWithStep()
        {
            IEnumerable <long> items = LongExt.Range(0, 10, 10);

            CollectionAssert.AreEqual(items, new[] { 0, 10, 20, 30, 40, 50, 60, 70, 80, 90 });
        }
コード例 #4
0
        public void LongRange_Several()
        {
            IEnumerable <long> items = LongExt.Range(0, 10);

            CollectionAssert.AreEqual(items, new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
        }
コード例 #5
0
        public void LongRange_Single()
        {
            IEnumerable <long> items = LongExt.Range(0, 1);

            Assert.AreEqual(items.Single(), 0);
        }
コード例 #6
0
        public void LongRange_Empty()
        {
            IEnumerable <long> items = LongExt.Range(0, 0);

            CollectionAssert.IsEmpty(items);
        }