Resumé

Fibonacci Linq e UnitTests

Cristian Merighi () 0,00

Un pretesto per associare un minimo di matematica ad alcune nuove caratteristiche del .Net Framework 3.5 e di Visual Studio 2008 Pro.
Questo articolo è da considerarsi obsoleto. Alcune funzionalità potrebbero non essere più disponibili e non è possibile aggiungere commenti.

Ho sempre amato la matematica, mi sono innamorato della programmazione.
Adesso mi diverto a metterle insieme!

Tra le nuove caratteristiche della versione 3.5 del .Net Framework, troverete - namespace System.Linq - i cosiddetti extension methods, il cui scopo è quello di "pluggare" nuovi metodi ad oggetti già esistenti all'interno del framework (struct o classi che siano)...

Mmh... penso di essermi fatto prendere la mano, forse ne ho scritti troppi: extenders per numeri, stringhe, oggetti web...
Uno dei più - probabilmente - inutili è quello che ho chiamato GetFibonacci(): funzione overloaded... ^_^; ...che ritorna l'n-esimo (dove n è l'intero "esteso" in oggetto) di una data Successione di Fibonacci.
Vedi codice sotto:

/// <summary>

/// Gets the n-th (zero-based) number of Fibonacci sequence (0, 1, 1, 2, 3, 5, 8...).

/// </summary>

/// <param name="number">The index of the Fibonacci sequence element.</param>

/// <returns>N-th integer of the sequence.</returns>

public static int GetFibonacci(this int number)

{

    return number.GetFibonacci(0, 1);

}

 

/// <summary>

/// Gets the n-th (zero-based) number of a Fibonacci sequence based on particular seeds.

/// </summary>

/// <param name="number">The index of the Fibonacci sequence element.</param>

/// <param name="seed">Integer at the 0th position in the sequence</param>

/// <param name="seed">Integer at the 1st position in the sequence</param>

/// <returns>N-th integer of the sequence.</returns>

public static int GetFibonacci(this int number, int seed0, int seed1)

{

    if (number == 0) return seed0;

    if (number == 1) return seed1;

    return (number - 1).GetFibonacci(seed0, seed1) + (number - 2).GetFibonacci(seed0, seed1);

}

 

La parte divertente dove sta? Penso nella maniera in cui ho testato il funzionamento di tali metodi e nel codice utilizzato per scrivere la TestUnit:
una precisa proprietà di qualsiasi successione di Fibonacci è che la somma di 11 elementi consecutivi (chiamiamoli sottosuccessione S) è uguale ad 11 volte il settimo elemento di S.
Maniera piuttosto elegante di testare, no?

Tasto destro e "create unit tests"...

test results

...scriviamo il codice necessario...

/// <summary>

///A test for GetFibonacci

///</summary>

[TestMethod()]

public void GetFibonacciTest()

{

    int n = 0;

    for (int j = 0; j < 10; j++)

    {

        n += j.GetFibonacci(3, 4);

    }

    int expected = (6).GetFibonacci(3, 4);

    Assert.AreEqual(11 * expected, n);

...Il test di matematica è passato! ;)

test results

Take care. Bye.

feedback
 

Syndicate

Autore

Cristian Merighi facebook twitter google+ youtube

Ultimi articoli

Top rated

Archivio

Dove sono?

Autore

Cristian Merighi facebook twitter google+ youtube

Le mie letture

Feeds