Test suite for LCDConverter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
namespace CodingKata | |
{ | |
class LCDConverter | |
{ | |
public string ConvertToLCD (int number) | |
{ | |
if ( number < 0 ) throw new ArgumentOutOfRangeException("Only positive numbers please"); | |
var result = ""; | |
int i = 0; | |
foreach ( var c in number.ToString() ) | |
{ | |
string lcdDigit = ""; | |
int n = (int) char.GetNumericValue(c); | |
switch ( n ) | |
{ | |
#region switch assign to lcdDigit | |
case 0: lcdDigit = | |
" _ \n"+ | |
"| |\n"+ | |
"|_|\n"; | |
break; | |
case 1: lcdDigit = | |
" \n"+ | |
" |\n"+ | |
" |\n"; | |
break; | |
case 2: lcdDigit = | |
" _ \n"+ | |
" _|\n"+ | |
"|_ \n"; | |
break; | |
case 3: lcdDigit = | |
" _ \n"+ | |
" _|\n"+ | |
" _|\n"; | |
break; | |
case 4: lcdDigit = | |
" \n"+ | |
"|_|\n"+ | |
" |\n"; | |
break; | |
case 5: lcdDigit = | |
" _ \n"+ | |
"|_ \n"+ | |
" _|\n"; | |
break; | |
case 6: lcdDigit = | |
" _ \n"+ | |
"|_ \n"+ | |
"|_|\n"; | |
break; | |
case 7: lcdDigit = | |
" _ \n"+ | |
" |\n"+ | |
" |\n"; | |
break; | |
case 8: lcdDigit = | |
" _ \n"+ | |
"|_|\n"+ | |
"|_|\n"; | |
break; | |
case 9: lcdDigit = | |
" _ \n"+ | |
"|_|\n"+ | |
" _|\n"; | |
break; | |
#endregion | |
} | |
result = i == 0 ? lcdDigit : result | |
.Insert( 9 * i+2 , lcdDigit.Substring (8,3)) | |
.Insert( 6 * i+1 , lcdDigit.Substring (4,3)) | |
.Insert( 3 * i , lcdDigit.Substring (0,3)) ; | |
i++; | |
} | |
return result; | |
} | |
public static void Main() | |
{ | |
Console.WriteLine ( new LCDConverter().ConvertToLCD(1234567890) ); | |
Console.WriteLine ( new LCDConverter().ConvertToLCD(-1) ); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using NUnit.Framework; | |
namespace CodingKata | |
{ | |
[TestFixture()] | |
public class LCDConverterTest | |
{ | |
private LCDConverter main; | |
[TestFixtureSetUpAttribute] | |
public void SetUp() | |
{ | |
main = new LCDConverter(); | |
} | |
[Test()] | |
public void TestOne() | |
{ | |
// Original test: | |
// Assert.AreEqual( numeros[1], main.ConvertToLCD( 1 ) ); | |
// later refactored to: | |
testNumberInArray ( 1 ); | |
// after the second test "TestSeven" | |
} | |
[Test()] | |
public void TestSeven() | |
{ | |
// Second test. | |
// Refactor to extract method "testNumberInArray" | |
testNumberInArray ( 7 ); | |
} | |
private void testNumberInArray( int n ) | |
{ | |
Assert.AreEqual( numeros[n], main.ConvertToLCD( n ) ); | |
} | |
[Test()] | |
public void Test0To9 () | |
{ | |
// Third test, everything was easy up to this point | |
// because a simple switch did the trick | |
for ( var i = 0 ; i < numeros.Length; i++ ) | |
{ | |
testNumberInArray ( i ); | |
} | |
} | |
[Test()] | |
public void TestGreaterThan9() | |
{ | |
Assert.AreEqual( | |
" _ \n"+ | |
" || |\n" + | |
" ||_|\n", | |
main.ConvertToLCD(10) | |
); | |
Assert.AreEqual( | |
" _ \n"+ | |
"|_| _|\n"+ | |
" ||_ \n", | |
main.ConvertToLCD( 42 ) | |
); | |
} | |
[Test()] | |
public void TestGreaterThan99() | |
{ | |
Assert.AreEqual( | |
" _ _ \n"+ | |
" || || |\n"+ | |
" ||_||_|\n", | |
main.ConvertToLCD(100) | |
); | |
} | |
[Test()] | |
public void TestDadaaaaa() | |
{ | |
Assert.AreEqual( | |
" _ _ _ _ _ _ _ _ \n"+ | |
" | _| _||_||_ |_ ||_||_|| |\n"+ | |
" ||_ _| | _||_| ||_| _||_|\n", | |
main.ConvertToLCD(1234567890) | |
); | |
} | |
[Test()] | |
public void TestNegative() | |
{ | |
try | |
{ | |
main.ConvertToLCD( -1 ); | |
Assert.Fail("Should've failed with negative"); | |
} | |
catch( System.ArgumentOutOfRangeException ){} | |
catch | |
{ | |
Assert.Fail("Shouldn't have thrown anything else"); | |
} | |
} | |
// using verbatim string didn't look as I expected | |
string [] numeros = new string [] { | |
@" _ | |
| | | |
|_| | |
", | |
@" | |
| | |
| | |
", | |
@" _ | |
_| | |
|_ | |
", | |
@" _ | |
_| | |
_| | |
", | |
@" | |
|_| | |
| | |
", | |
@" _ | |
|_ | |
_| | |
", | |
@" _ | |
|_ | |
|_| | |
", | |
@" _ | |
| | |
| | |
", | |
@" _ | |
|_| | |
|_| | |
", | |
@" _ | |
|_| | |
_| | |
" | |
}; | |
} | |
} |
je! :) si... corregido.
Si.. esta padré Go , verdad? Más aún, esa versión fue una transliteración de la de C# pero hice una pregunta en SO y me hicieron una revisión que es mucho más eficiente
Ahí la dejo:
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Solo un comentario: el mensaje de la excepción en la validación inicial dice "solo > 0", cuando 0 es un argumento válido =)
Me llama la atención lo compacta y "tersa" que resulta la versión en Go. Necesito ponerme a estudiar, ya que hay algunos detalles sintácticos que todavía no me entran en la cabeza.
Muy buena solución... Y con pruebas además!!