dimanche 27 septembre 2015

FsCheck in C#: generate a list of two dimension arrays with the same shape

Let's say I'm writing some code for video analysis. Here is a simplified version of a Video class:

public class Video
{
    public readonly int Width;
    public readonly int Height;
    public readonly List<int[,]> Frames;

    public Video(int width, int height, IEnumerable<int[,]> frames)
    {
        Width = width;
        Height = height;
        Frames = new List<int[,]>();
        foreach (var frame in frames)
        {
            if (frame.GetLength(0) != height || frame.GetLength(1) != width)
            {
                throw new ArgumentException("Incorrect frames dimensions");
            }
            Frames.Add(frame);
        }
    }
}

How do I make and Arbitrary<Video> and register it? How do I make a shirnker for that Arbitrary?

Tried this, couldn't understand how apply works:

    public static Arbitrary<Video> Videos()
    {
        var videoGen = Arb.Generate<PositiveInt>()
            .SelectMany(w => Arb.Generate<PositiveInt>(), (w, h) => new {w, h})
            .Apply( /* what is Gen<Func<a,b>> */);

        return videoGen.ToArbitrary();
    }

Tried this, but couldn't plug the generator for list in here:

    public static Arbitrary<Video> Videos()
    {
        var videoGen = Arb.Generate<PositiveInt>()
            .SelectMany(w => Arb.Generate<PositiveInt>(), (w, h) => new Video(w, h, /* how to plug generator here? */));

        return videoGen.ToArbitrary();
    }

Aucun commentaire:

Enregistrer un commentaire