using System; using MbUnit.Framework; namespace Spiking35.Test.unit { [Flags] public enum Digits { Zero = 0x00, One = 0x01, Two = 0x02, Three = 0x03, Four = 0x04, Five = 0x05, Six = 0x06, Seven = 0x07, Eight = 0x08, Nine = 0x09 } internal interface INumber {} internal class Number : INumber, IEquatable< Number > { public Number( int numberToRepresent ) { _numberToRepresent = numberToRepresent; } public bool Equals( Number number ) { if ( number == null ) { return false; } return _numberToRepresent == number._numberToRepresent; } public override string ToString() { return _numberToRepresent.ToString( ); } public override bool Equals( object obj ) { if ( ReferenceEquals( this, obj ) ) { return true; } return Equals( obj as Number ); } public override int GetHashCode() { return _numberToRepresent; } private readonly int _numberToRepresent; } internal class NumberBuilder : INumberBuilder { public void Add( Digits digit ) { numberBeingBuilt += Convert.ToString( Convert.ToInt32( digit ) ); } public INumber Build() { return new Number( Convert.ToInt32( numberBeingBuilt ) ); } private string numberBeingBuilt; } internal interface INumberBuilder { void Add( Digits digit ); INumber Build(); } [TestFixture] public class NumberBuilderTest { private INumberBuilder CreateSUT() { return new NumberBuilder( ); } [Test] public void should_be_able_to_add_a_single_digit() { INumberBuilder builder = CreateSUT( ); builder.Add( Digits.One ); Assert.AreEqual( new Number( 1 ), builder.Build( ) ); } [Test] public void should_be_able_to_form_a_number_with_more_than_one_digit() { INumberBuilder builder = CreateSUT( ); builder.Add( Digits.One ); builder.Add( Digits.Nine ); Assert.AreEqual( new Number( 19 ), builder.Build( ) ); } //[Test] //public void Should_be_equal_to_2_digits() { // Digits digits = Digits.Six | Digits.One; // Assert.IsTrue( Digits.Six == ( digits & Digits.Six ) ); // Assert.IsTrue( Digits.One == ( digits & Digits.One ) ); //} } }