From bf2bcfa85bbed0b45c0356257b9503d2b719d59b Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Thu, 16 Mar 2017 02:33:50 +0100 Subject: [PATCH] Implemented PinnedBuffer.CreateClean() + format DrawText.cs --- .../Common/Memory/PinnedBuffer{T}.cs | 12 ++ .../Common/PinnedBufferTests.cs | 18 ++ .../ImageSharp.Tests/Drawing/Text/DrawText.cs | 185 ++++++++++-------- 3 files changed, 137 insertions(+), 78 deletions(-) diff --git a/src/ImageSharp/Common/Memory/PinnedBuffer{T}.cs b/src/ImageSharp/Common/Memory/PinnedBuffer{T}.cs index 2d3d44dda..d002e08fb 100644 --- a/src/ImageSharp/Common/Memory/PinnedBuffer{T}.cs +++ b/src/ImageSharp/Common/Memory/PinnedBuffer{T}.cs @@ -109,6 +109,18 @@ namespace ImageSharp return buffer.Slice(); } + /// + /// Creates a clean instance of initializing it's elements with 'default(T)'. + /// + /// The desired count of elements. (Minimum size for ) + /// The instance + public static PinnedBuffer CreateClean(int count) + { + PinnedBuffer buffer = new PinnedBuffer(count); + buffer.Clear(); + return buffer; + } + /// /// Gets a to the beginning of the raw data of the buffer. /// diff --git a/tests/ImageSharp.Tests/Common/PinnedBufferTests.cs b/tests/ImageSharp.Tests/Common/PinnedBufferTests.cs index 26b529f6a..d47bd5b94 100644 --- a/tests/ImageSharp.Tests/Common/PinnedBufferTests.cs +++ b/tests/ImageSharp.Tests/Common/PinnedBufferTests.cs @@ -3,6 +3,7 @@ using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; + using System.Threading.Tasks; using Xunit; @@ -62,6 +63,23 @@ } } + [Fact] + public void CreateClean() + { + Parallel.For(0, 100, + i => + { + using (PinnedBuffer buffer = PinnedBuffer.CreateClean(42)) + { + for (int j = 0; j < buffer.Count; j++) + { + Assert.Equal(0, buffer.Array[j]); + buffer.Array[j] = 666; + } + } + }); + } + [Fact] public void Dispose() { diff --git a/tests/ImageSharp.Tests/Drawing/Text/DrawText.cs b/tests/ImageSharp.Tests/Drawing/Text/DrawText.cs index 2a2cb8a07..68db4d9a2 100644 --- a/tests/ImageSharp.Tests/Drawing/Text/DrawText.cs +++ b/tests/ImageSharp.Tests/Drawing/Text/DrawText.cs @@ -1,96 +1,107 @@ - +// +// Copyright (c) James Jackson-South and contributors. +// Licensed under the Apache License, Version 2.0. +// + namespace ImageSharp.Tests.Drawing.Text { using System; - using System.IO; - using ImageSharp; - using ImageSharp.Drawing.Brushes; - using Processing; - using System.Collections.Generic; - using Xunit; - using ImageSharp.Drawing; using System.Numerics; - using SixLabors.Shapes; - using ImageSharp.Drawing.Processors; + + using ImageSharp.Drawing; + using ImageSharp.Drawing.Brushes; using ImageSharp.Drawing.Pens; + using ImageSharp.Drawing.Processors; + using ImageSharp.Tests.Drawing.Paths; + using SixLabors.Fonts; - using Paths; + using SixLabors.Shapes; + + using Xunit; public class DrawText : IDisposable { Color color = Color.HotPink; + SolidBrush brush = Brushes.Solid(Color.HotPink); - IPath path = new SixLabors.Shapes.Path(new LinearLineSegment(new Vector2[] { - new Vector2(10,10), - new Vector2(20,10), - new Vector2(20,10), - new Vector2(30,10), - })); + + IPath path = new SixLabors.Shapes.Path( + new LinearLineSegment( + new Vector2[] { new Vector2(10, 10), new Vector2(20, 10), new Vector2(20, 10), new Vector2(30, 10), })); + private ProcessorWatchingImage img; + private readonly FontCollection FontCollection; + private readonly Font Font; public DrawText() { this.FontCollection = new FontCollection(); - this.Font = FontCollection.Install(TestFontUtilities.GetPath("SixLaborsSampleAB.woff")); + this.Font = this.FontCollection.Install(TestFontUtilities.GetPath("SixLaborsSampleAB.woff")); this.img = new ProcessorWatchingImage(10, 10); } public void Dispose() { - img.Dispose(); + this.img.Dispose(); } [Fact] public void FillsForEachACharachterWhenBrushSetAndNotPen() { - img.DrawText("123", this.Font, Brushes.Solid(Color.Red), null, Vector2.Zero, new TextGraphicsOptions(true)); + this.img.DrawText( + "123", + this.Font, + Brushes.Solid(Color.Red), + null, + Vector2.Zero, + new TextGraphicsOptions(true)); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(3, img.ProcessorApplications.Count); // 3 fills where applied - Assert.IsType>(img.ProcessorApplications[0].processor); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(3, this.img.ProcessorApplications.Count); // 3 fills where applied + Assert.IsType>(this.img.ProcessorApplications[0].processor); } [Fact] public void FillsForEachACharachterWhenBrushSetAndNotPenDefaultOptions() { - img.DrawText("123", this.Font, Brushes.Solid(Color.Red), null, Vector2.Zero); + this.img.DrawText("123", this.Font, Brushes.Solid(Color.Red), null, Vector2.Zero); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(3, img.ProcessorApplications.Count); // 3 fills where applied - Assert.IsType>(img.ProcessorApplications[0].processor); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(3, this.img.ProcessorApplications.Count); // 3 fills where applied + Assert.IsType>(this.img.ProcessorApplications[0].processor); } - [Fact] public void FillsForEachACharachterWhenBrushSet() { - img.DrawText("123", this.Font, Brushes.Solid(Color.Red), Vector2.Zero, new TextGraphicsOptions(true)); + this.img.DrawText("123", this.Font, Brushes.Solid(Color.Red), Vector2.Zero, new TextGraphicsOptions(true)); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(3, img.ProcessorApplications.Count); // 3 fills where applied - Assert.IsType>(img.ProcessorApplications[0].processor); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(3, this.img.ProcessorApplications.Count); // 3 fills where applied + Assert.IsType>(this.img.ProcessorApplications[0].processor); } [Fact] public void FillsForEachACharachterWhenBrushSetDefaultOptions() { - img.DrawText("123", this.Font, Brushes.Solid(Color.Red), Vector2.Zero); + this.img.DrawText("123", this.Font, Brushes.Solid(Color.Red), Vector2.Zero); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(3, img.ProcessorApplications.Count); // 3 fills where applied - Assert.IsType>(img.ProcessorApplications[0].processor); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(3, this.img.ProcessorApplications.Count); // 3 fills where applied + Assert.IsType>(this.img.ProcessorApplications[0].processor); } [Fact] public void FillsForEachACharachterWhenColorSet() { - img.DrawText("123", this.Font, Color.Red, Vector2.Zero, new TextGraphicsOptions(true)); + this.img.DrawText("123", this.Font, Color.Red, Vector2.Zero, new TextGraphicsOptions(true)); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(3, img.ProcessorApplications.Count); - FillRegionProcessor processor = Assert.IsType>(img.ProcessorApplications[0].processor); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(3, this.img.ProcessorApplications.Count); + FillRegionProcessor processor = + Assert.IsType>(this.img.ProcessorApplications[0].processor); SolidBrush brush = Assert.IsType>(processor.Brush); Assert.Equal(Color.Red, brush.Color); @@ -99,12 +110,13 @@ namespace ImageSharp.Tests.Drawing.Text [Fact] public void FillsForEachACharachterWhenColorSetDefaultOptions() { - img.DrawText("123", this.Font, Color.Red, Vector2.Zero); + this.img.DrawText("123", this.Font, Color.Red, Vector2.Zero); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(3, img.ProcessorApplications.Count); - Assert.IsType>(img.ProcessorApplications[0].processor); - FillRegionProcessor processor = Assert.IsType>(img.ProcessorApplications[0].processor); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(3, this.img.ProcessorApplications.Count); + Assert.IsType>(this.img.ProcessorApplications[0].processor); + FillRegionProcessor processor = + Assert.IsType>(this.img.ProcessorApplications[0].processor); SolidBrush brush = Assert.IsType>(processor.Brush); Assert.Equal(Color.Red, brush.Color); @@ -113,82 +125,99 @@ namespace ImageSharp.Tests.Drawing.Text [Fact] public void DrawForEachACharachterWhenPenSetAndNotBrush() { - img.DrawText("123", this.Font, null, Pens.Dash(Color.Red, 1), Vector2.Zero, new TextGraphicsOptions(true)); + this.img.DrawText( + "123", + this.Font, + null, + Pens.Dash(Color.Red, 1), + Vector2.Zero, + new TextGraphicsOptions(true)); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(3, img.ProcessorApplications.Count); // 3 fills where applied - Assert.IsType>(img.ProcessorApplications[0].processor); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(3, this.img.ProcessorApplications.Count); // 3 fills where applied + Assert.IsType>(this.img.ProcessorApplications[0].processor); } [Fact] public void DrawForEachACharachterWhenPenSetAndNotBrushDefaultOptions() { - img.DrawText("123", this.Font, null, Pens.Dash(Color.Red, 1), Vector2.Zero); + this.img.DrawText("123", this.Font, null, Pens.Dash(Color.Red, 1), Vector2.Zero); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(3, img.ProcessorApplications.Count); // 3 fills where applied - Assert.IsType>(img.ProcessorApplications[0].processor); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(3, this.img.ProcessorApplications.Count); // 3 fills where applied + Assert.IsType>(this.img.ProcessorApplications[0].processor); } - [Fact] public void DrawForEachACharachterWhenPenSet() { - img.DrawText("123", this.Font, Pens.Dash(Color.Red, 1), Vector2.Zero, new TextGraphicsOptions(true)); + this.img.DrawText("123", this.Font, Pens.Dash(Color.Red, 1), Vector2.Zero, new TextGraphicsOptions(true)); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(3, img.ProcessorApplications.Count); // 3 fills where applied - Assert.IsType>(img.ProcessorApplications[0].processor); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(3, this.img.ProcessorApplications.Count); // 3 fills where applied + Assert.IsType>(this.img.ProcessorApplications[0].processor); } [Fact] public void DrawForEachACharachterWhenPenSetDefaultOptions() { - img.DrawText("123", this.Font, Pens.Dash(Color.Red, 1), Vector2.Zero); + this.img.DrawText("123", this.Font, Pens.Dash(Color.Red, 1), Vector2.Zero); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(3, img.ProcessorApplications.Count); // 3 fills where applied - Assert.IsType>(img.ProcessorApplications[0].processor); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(3, this.img.ProcessorApplications.Count); // 3 fills where applied + Assert.IsType>(this.img.ProcessorApplications[0].processor); } [Fact] public void DrawForEachACharachterWhenPenSetAndFillFroEachWhenBrushSet() { - img.DrawText("123", this.Font, Brushes.Solid(Color.Red), Pens.Dash(Color.Red, 1), Vector2.Zero, new TextGraphicsOptions(true)); + this.img.DrawText( + "123", + this.Font, + Brushes.Solid(Color.Red), + Pens.Dash(Color.Red, 1), + Vector2.Zero, + new TextGraphicsOptions(true)); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(6, img.ProcessorApplications.Count); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(6, this.img.ProcessorApplications.Count); } [Fact] public void DrawForEachACharachterWhenPenSetAndFillFroEachWhenBrushSetDefaultOptions() { - img.DrawText("123", this.Font, Brushes.Solid(Color.Red), Pens.Dash(Color.Red, 1), Vector2.Zero); + this.img.DrawText("123", this.Font, Brushes.Solid(Color.Red), Pens.Dash(Color.Red, 1), Vector2.Zero); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(6, img.ProcessorApplications.Count); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(6, this.img.ProcessorApplications.Count); } [Fact] public void BrushAppliesBeforPen() { - img.DrawText("1", this.Font, Brushes.Solid(Color.Red), Pens.Dash(Color.Red, 1), Vector2.Zero, new TextGraphicsOptions(true)); + this.img.DrawText( + "1", + this.Font, + Brushes.Solid(Color.Red), + Pens.Dash(Color.Red, 1), + Vector2.Zero, + new TextGraphicsOptions(true)); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(2, img.ProcessorApplications.Count); - Assert.IsType>(img.ProcessorApplications[0].processor); - Assert.IsType>(img.ProcessorApplications[1].processor); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(2, this.img.ProcessorApplications.Count); + Assert.IsType>(this.img.ProcessorApplications[0].processor); + Assert.IsType>(this.img.ProcessorApplications[1].processor); } [Fact] public void BrushAppliesBeforPenDefaultOptions() { - img.DrawText("1", this.Font, Brushes.Solid(Color.Red), Pens.Dash(Color.Red, 1), Vector2.Zero); + this.img.DrawText("1", this.Font, Brushes.Solid(Color.Red), Pens.Dash(Color.Red, 1), Vector2.Zero); - Assert.NotEmpty(img.ProcessorApplications); - Assert.Equal(2, img.ProcessorApplications.Count); - Assert.IsType>(img.ProcessorApplications[0].processor); - Assert.IsType>(img.ProcessorApplications[1].processor); + Assert.NotEmpty(this.img.ProcessorApplications); + Assert.Equal(2, this.img.ProcessorApplications.Count); + Assert.IsType>(this.img.ProcessorApplications[0].processor); + Assert.IsType>(this.img.ProcessorApplications[1].processor); } } }