using System; using System.Collections.Generic; using GeoAPI.Coordinates; using NetTopologySuite.Coordinates; using NPack; namespace ManagedBufferedCoordinateTests { internal class SequenceGenerator { public static readonly Int32 BigMaxLimit = Int32.MaxValue - 2; private readonly Random _rnd = new MersenneTwister(); private readonly Int32 _maxRandomLimit; private readonly BufferedCoordinateFactory _coordFactory; private readonly BufferedCoordinateSequenceFactory _seqFactory; private ICoordinateSequence _sequence; private List _main; private List _prepend; private List _append; public BufferedCoordinateFactory CoordinateFactory { get { return _coordFactory; } } public BufferedCoordinateSequenceFactory SequenceFactory { get { return _seqFactory; } } public ICoordinateSequence Sequence { get { return _sequence; } } public List MainList { get { return _main; } } public List PrependList { get { return _prepend; } } public List AppendList { get { return _append; } } public SequenceGenerator() : this(BigMaxLimit, 0, 0, 0) { } public SequenceGenerator(Int32 mainCount) : this(BigMaxLimit, mainCount, 0, 0) { } public SequenceGenerator(Int32 max, Int32 mainCount) : this(max, mainCount, 0, 0) { } public SequenceGenerator(Int32 mainCount, Int32 prependCount, Int32 appendCount) : this(BigMaxLimit, mainCount, prependCount, appendCount) { } public SequenceGenerator(Int32 max, Int32 mainCount, Int32 prependCount, Int32 appendCount) { _maxRandomLimit = max; _coordFactory = new BufferedCoordinateFactory(); _seqFactory = new BufferedCoordinateSequenceFactory(CoordinateFactory); _main = new List(GenerateCoordinates(mainCount)); _prepend = new List(GenerateCoordinates(prependCount)); _append = new List(GenerateCoordinates(appendCount)); _sequence = SequenceFactory.Create(MainList); } public ICoordinateSequence NewEmptySequence() { return SequenceFactory.Create(); } public ICoordinateSequence NewSequence() { return NewSequence(true); } public ICoordinateSequence NewSequence(IEnumerable coords) { return NewSequence(coords, true); } public ICoordinateSequence NewSequence(Boolean allowRepeated) { IEnumerable coords = GenerateCoordinates(MainList.Count, _maxRandomLimit); return NewSequence(coords, allowRepeated); } public ICoordinateSequence NewSequence(IEnumerable coords, Boolean allowRepeated) { return SequenceFactory.Create(coords, allowRepeated); } public BufferedCoordinate NewCoordinate(Double x, Double y) { return CoordinateFactory.Create(x, y); } public BufferedCoordinate RandomCoordinate() { return RandomCoordinate(_maxRandomLimit); } public BufferedCoordinate RandomCoordinate(Int32 max) { Double x = _rnd.Next(1, max + 1); Double y = _rnd.Next(1, max + 1); return NewCoordinate(x, y); } public IEnumerable GenerateCoordinates(Int32 count) { return GenerateCoordinates(count, _maxRandomLimit); } public IEnumerable GenerateCoordinates(Int32 count, Int32 max) { while (count-- > 0) { yield return RandomCoordinate(max); } } } }