예제 #1
0
        public async Task CanTickAsync()
        {
            INet   net   = new Net();
            IToken token = new BlackToken();

            net.CreatePlace(out Place somePlace)
            .CreatePlace(out Place somePlaceElse);

            somePlace
            .AddToken(token, 2)
            ;

            net
            .CreateTransition(out Transition someTransition);

            someTransition
            .AddConsumer(somePlace, token, 2, "")
            .AddProducer(somePlaceElse, token, 3, "")
            ;
            var ct = new CancellationTokenSource().Token;

            //net.Tick();
            await net.TickAsync(ct);

            Assert.That(somePlaceElse.GetTokenCount(token), Is.EqualTo(3));
        }
예제 #2
0
        public void ArcCreationFailsOnNegativeQuantity(int n)
        {
            INet   net   = new Net();
            IToken token = new BlackToken();

            net.CreatePlace(out Place someplace);
            net.CreateTransition(out Transition someTransition);
            Assert.Throws <ArgumentException>(() => someTransition.AddProducer(someplace, token, -1));
            Assert.Throws <ArgumentException>(() => someTransition.AddConsumer(someplace, token, -2));
        }
예제 #3
0
        public void CanAddTokens()
        {
            INet   net   = new Net();
            IToken token = new BlackToken();

            net.CreatePlace(out Place someplace);
            someplace.AddToken(token, 2);
            Assert.That(someplace.GetTokenCount(token), Is.EqualTo(2));
            Assert.That(someplace[token], Is.Not.Null);
            Assert.That(someplace[token], Is.EqualTo(2));
            Assert.That(someplace.Count(pair => pair.Key == token && pair.Value == 2), Is.EqualTo(1));
        }
예제 #4
0
        public void CanAddProducers()
        {
            INet   net   = new Net();
            IToken token = new BlackToken();

            net.CreatePlace(out Place someplace);
            net.CreateTransition(out Transition someTransition);
            someTransition.AddProducer(someplace, token, 2);
            Assert.That(
                someTransition.Producers.Count(
                    arc =>
                    arc.Place == someplace &&
                    arc.Transition == someTransition &&
                    arc.Quantity == 2
                    ),
                Is.EqualTo(1)
                );
        }
예제 #5
0
        public void CanRemoveTransitionsSafely()
        {
            INet   net   = new Net();
            IToken token = new BlackToken();

            net.CreatePlace(out Place someplace)
            .CreatePlace(out Place someplaceElse)
            .CreateTransition(out Transition someTransition);

            someTransition
            .AddConsumer(someplace, token, 1)
            .AddProducer(someplaceElse, token, 2);

            var success = net.TryRemove(someTransition);

            Assert.That(success, Is.True);
            Assert.That(net.TransitionCount, Is.EqualTo(0));
            Assert.That(net.Contains(someTransition), Is.False);
            Assert.That(net.Transitions, !Does.Contain(someplace));
            Assert.That(net.GetTransitions(), Does.Not.Contain(someplace));
        }
예제 #6
0
        public void CanRemovePlacesSafely()
        {
            INet   net   = new Net();
            IToken token = new BlackToken();

            net.CreatePlace(out Place somePlace)
            .CreatePlace(out Place somePlaceElse)
            .CreateTransition(out Transition someTransition);

            someTransition
            .AddConsumer(somePlace, token, 1)
            .AddProducer(somePlaceElse, token, 2);

            Assert.That(net.PlaceCount, Is.EqualTo(2));
            Assert.That(net.Places, Does.Contain(somePlace));
            var success = net.TryRemove(somePlace);

            Assert.That(success, Is.True);
            Assert.That(somePlace, Is.Empty);

            // somePlace is empty/disposed now, so we check if there are any now invalid structures left over
            // where previously we would have found references to somePlace.

            Assert.That(net.Contains(somePlace), Is.False);
            Assert.That(net.PlaceCount, Is.EqualTo(1));
            Assert.That(net.Places, Does.Contain(somePlaceElse));
            Assert.That(net.GetPlaces().Count, Is.EqualTo(1));
            Assert.That(net.GetPlaces(), Does.Contain(somePlaceElse));
            Assert.That(
                net.Transitions
                .Any(
                    transition =>
                    transition.Producers.Any(arc => arc.Place == somePlace) ||
                    transition.Consumers.Any(arc => arc.Place == somePlace)
                    ),
                Is.False
                );
        }