From 37cfe708038e979af784164b19dc31f74c7efe3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Gr=C3=BCnwald?= Date: Thu, 25 Sep 2014 21:46:21 +0200 Subject: [PATCH 1/2] Fixed arithmetic operations and added tests for them --- src/ByteSize.Tests/ArithmeticMethods.cs | 128 +++++++++++++++++++++++ src/ByteSize.Tests/ByteSize.Tests.csproj | 1 + src/ByteSize/ByteSize.cs | 14 +-- 3 files changed, 136 insertions(+), 7 deletions(-) create mode 100644 src/ByteSize.Tests/ArithmeticMethods.cs diff --git a/src/ByteSize.Tests/ArithmeticMethods.cs b/src/ByteSize.Tests/ArithmeticMethods.cs new file mode 100644 index 0000000..d596182 --- /dev/null +++ b/src/ByteSize.Tests/ArithmeticMethods.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xunit; + +namespace ByteSize.Tests +{ + public class ArithmeticMethods + { + [Fact] + public void AddMethod() + { + var size1 = ByteSize.FromBytes(1); + var result = size1.Add(size1); + + Assert.Equal(2, result.Bytes); + Assert.Equal(16, result.Bits); + } + + [Fact] + public void AddBitsMethod() + { + var size = ByteSize.FromBytes(1).AddBits(8); + + Assert.Equal(2, size.Bytes); + Assert.Equal(16, size.Bits); + } + + [Fact] + public void AddBytesMethod() + { + var size = ByteSize.FromBytes(1).AddBytes(1); + + Assert.Equal(2, size.Bytes); + Assert.Equal(16, size.Bits); + } + + [Fact] + public void AddKiloBytesMethod() + { + var size = ByteSize.FromKiloBytes(2).AddKiloBytes(2); + + Assert.Equal(4 * 1024 * 8, size.Bits); + Assert.Equal(4 * 1024, size.Bytes); + Assert.Equal(4, size.KiloBytes); + } + + [Fact] + public void AddMegaBytesMethod() + { + var size = ByteSize.FromMegaBytes(2).AddMegaBytes(2); + + Assert.Equal(4 * 1024 * 1024 * 8, size.Bits); + Assert.Equal(4 * 1024 * 1024, size.Bytes); + Assert.Equal(4 * 1024, size.KiloBytes); + Assert.Equal(4, size.MegaBytes); + } + + [Fact] + public void AddGigaBytesMethod() + { + var size = ByteSize.FromGigaBytes(2).AddGigaBytes(2); + + Assert.Equal(4d * 1024 * 1024 * 1024 * 8, size.Bits); + Assert.Equal(4d * 1024 * 1024 * 1024, size.Bytes); + Assert.Equal(4d * 1024 * 1024, size.KiloBytes); + Assert.Equal(4d * 1024, size.MegaBytes); + Assert.Equal(4d, size.GigaBytes); + } + + [Fact] + public void AddTeraBytesMethod() + { + var size = ByteSize.FromTeraBytes(2).AddTeraBytes(2); + + Assert.Equal(4d * 1024 * 1024 * 1024 * 1024 * 8, size.Bits); + Assert.Equal(4d * 1024 * 1024 * 1024 * 1024, size.Bytes); + Assert.Equal(4d * 1024 * 1024 * 1024, size.KiloBytes); + Assert.Equal(4d * 1024 * 1024, size.MegaBytes); + Assert.Equal(4d * 1024, size.GigaBytes); + Assert.Equal(4d, size.TeraBytes); + } + + [Fact] + public void SubtractMethod() + { + var size = ByteSize.FromBytes(4).Subtract(ByteSize.FromBytes(2)); + + Assert.Equal(16, size.Bits); + Assert.Equal(2, size.Bytes); + } + + + [Fact] + public void IncrementOperator() + { + var size = ByteSize.FromBytes(2); + size++; + + Assert.Equal(24, size.Bits); + Assert.Equal(3, size.Bytes); + } + + + [Fact] + public void MinusOperator() + { + var size = ByteSize.FromBytes(2); + + size = -size; + + Assert.Equal(-16, size.Bits); + Assert.Equal(-2, size.Bytes); + } + + [Fact] + public void DecrementOperator() + { + var size = ByteSize.FromBytes(2); + size--; + + Assert.Equal(8, size.Bits); + Assert.Equal(1, size.Bytes); + } + } +} diff --git a/src/ByteSize.Tests/ByteSize.Tests.csproj b/src/ByteSize.Tests/ByteSize.Tests.csproj index 24066fb..eee4d14 100644 --- a/src/ByteSize.Tests/ByteSize.Tests.csproj +++ b/src/ByteSize.Tests/ByteSize.Tests.csproj @@ -42,6 +42,7 @@ + diff --git a/src/ByteSize/ByteSize.cs b/src/ByteSize/ByteSize.cs index fa1e893..9c4b762 100644 --- a/src/ByteSize/ByteSize.cs +++ b/src/ByteSize/ByteSize.cs @@ -189,12 +189,12 @@ public int CompareTo(ByteSize other) public ByteSize Add(ByteSize bs) { - return new ByteSize(this.Bits + bs.Bits); + return new ByteSize(this.Bytes + bs.Bytes); } public ByteSize AddBits(long value) { - return new ByteSize(this.Bits + value); + return this + FromBits(value); } public ByteSize AddBytes(double value) @@ -224,27 +224,27 @@ public ByteSize AddTeraBytes(double value) public ByteSize Subtract(ByteSize bs) { - return new ByteSize(this.Bits - bs.Bits); + return new ByteSize(this.Bytes - bs.Bytes); } public static ByteSize operator +(ByteSize b1, ByteSize b2) { - return new ByteSize(b1.Bits + b2.Bits); + return new ByteSize(b1.Bytes + b2.Bytes); } public static ByteSize operator ++(ByteSize b) { - return new ByteSize(b.Bits++); + return new ByteSize(b.Bytes + 1); } public static ByteSize operator -(ByteSize b) { - return new ByteSize(-b.Bits); + return new ByteSize(-b.Bytes); } public static ByteSize operator --(ByteSize b) { - return new ByteSize(b.Bits--); + return new ByteSize(b.Bytes - 1); } public static bool operator ==(ByteSize b1, ByteSize b2) From d9e9a8cb1cb771e0ae98e7269824bb16854252be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Gr=C3=BCnwald?= Date: Thu, 25 Sep 2014 23:28:06 +0200 Subject: [PATCH 2/2] Culture is no explicitly specified in implementation of ToString() so ToStringMethod tests work with non-english systems, too --- src/ByteSize/ByteSize.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ByteSize/ByteSize.cs b/src/ByteSize/ByteSize.cs index 9c4b762..b163a72 100644 --- a/src/ByteSize/ByteSize.cs +++ b/src/ByteSize/ByteSize.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; namespace ByteSize { @@ -128,7 +129,7 @@ public static ByteSize FromTeraBytes(double value) /// public override string ToString() { - return string.Format("{0} {1}", this.LargestWholeNumberValue, this.LargestWholeNumberSymbol); + return string.Format(CultureInfo.InvariantCulture, "{0} {1}", this.LargestWholeNumberValue, this.LargestWholeNumberSymbol); } public string ToString(string format) @@ -137,7 +138,7 @@ public string ToString(string format) format = "#.## " + format; Func has = s => format.IndexOf(s, StringComparison.CurrentCultureIgnoreCase) != -1; - Func output = n => n.ToString(format); + Func output = n => n.ToString(format, CultureInfo.InvariantCulture); if (has("TB")) return output(this.TeraBytes); @@ -155,7 +156,7 @@ public string ToString(string format) if (format.IndexOf(ByteSize.BitSymbol) != -1) return output(this.Bits); - return string.Format("{0} {1}", this.LargestWholeNumberValue.ToString(format), this.LargestWholeNumberSymbol); + return string.Format("{0} {1}", this.LargestWholeNumberValue.ToString(format, CultureInfo.InvariantCulture), this.LargestWholeNumberSymbol); } public override bool Equals(object value) @@ -311,7 +312,7 @@ public static bool TryParse(string s, out ByteSize result) // Get the numeric part double number; - if (!double.TryParse(numberPart, out number)) + if (!double.TryParse(numberPart, NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.InvariantInfo, out number)) return false; // Get the magnitude part