예제 #1
0
        public void AndSafe_works()
        {
            long[][] args = new[]
            {
                null,
                RndLarge(2),
                RndLarge(3)
            };
            for (var i = 0; i < 3; ++i)
            {
                for (var j = 0; j < 3; ++j)
                {
                    for (var k = 0; k < 3; ++k)
                    {
                        if (i * j * k != 1 && i * j * k != 8)
                        {
                            Assert.False(BitVectorHelpers.AndSafe(args[i], args[j], args[k]));
                        }
                    }
                }
            }

            var x  = RndLarge(3);
            var y  = RndLarge(3);
            var z  = _0(3);
            var ok = x.AndSafe(y, z);

            Assert.True(ok);
            for (var n = 0; n < 3; ++n)
            {
                z[n] = x[n] & y[n];
            }
        }
예제 #2
0
        public void NotSafe_works()
        {
            Assert.False(BitVectorHelpers.NotSafe(null, RndLarge(3)));
            Assert.False(BitVectorHelpers.NotSafe(RndLarge(3), null));
            Assert.False(BitVectorHelpers.NotSafe(RndLarge(2), RndLarge(3)));
            var vector = RndLarge(3);
            var result = vector.Select(x => x).ToArray();
            var ok     = result.NotSafe(result);

            Assert.True(ok);
            for (var n = 0; n < 3; ++n)
            {
                vector[n] = ~result[n];
            }
        }