I’m embarrassed, and not just a little. I mean a lot.

I made a blogpost about the yield keyword and the fibonacci sequence and did not even check if I got the correct results. I just checked if the code ran.

I was wrong and I was stupid. I would never do this in production. My main application has over 9k tests before I let it go in production.

But for my blogposts I sometimes go to quickly.

It looks ok, hit Publish.

And then this happens.

Great explanation of the Yield keyword. However, there is a logic error in the Fibs function of your “less pretty” code. Here is the output …1,1,2,4,8,16,32, etc… It should be … 1,1,2,3,5,8,13,etc… to be a true Fibonacci series. I tried including my fix for that but had trouble attaching the code so I gave up.

Does this make me a Fibonazi? 😉

I am ashamed. I really am. And I say sorry to my readers. I should do better.

So I’ll make up for it.

Here are my tests.

```vbnet Imports Nunit.FrameWork

Namespace DefaultNamespace Public Class TestFibonaci <Test> Public sub IfFirstNumberIs1 Dim fibonacci = New Fibonacci().Result Assert.AreEqual(1, fibonacci(0)) End Sub

    &lt;Test&gt;
    Public Sub IfSecondNumberIs1()
        Dim fibonacci = New Fibonacci().Result
        Assert.AreEqual(1, fibonacci(1))
    End Sub

    &lt;Test&gt;
    Public Sub IfThirdNumberIs2()
        Dim fibonacci = New Fibonacci().Result
        Assert.AreEqual(2, fibonacci(2))
    End Sub

    &lt;Test&gt;
    Public Sub IfFourthNumberIs3()
        Dim fibonacci = New Fibonacci().Result
        Assert.AreEqual(3, fibonacci(3))
    End Sub

    &lt;Test&gt;
    Public Sub IfFifthNumberIs5()
        Dim fibonacci = New Fibonacci().Result
        Assert.AreEqual(5, fibonacci(4))
    End Sub

    &lt;Test&gt;
    Public Sub IfSixthNumberIs8()
        Dim fibonacci = New Fibonacci().Result
        Assert.AreEqual(8, fibonacci(5))
    End Sub

    &lt;Test&gt;
    Public Sub IfSeventhNumberIs13()
        Dim fibonacci = New Fibonacci().Result
        Assert.AreEqual(13, fibonacci(6))
    End Sub
End Class

End Namespace``` And here is the class with the code I published.

vbnet Namespace DefaultNamespace Public Class Fibonacci Public Iterator Function Result() As IEnumerable(Of Integer) Dim previous As Integer Dim current As Integer Yield 1 Yield 1 previous = 1 current = 1 While current &lt; Integer.MaxValue - previous current += previous previous = current Yield current End While End Function End Class End NameSpace And this is what ncrunch tells me I should have seen before posting that piece of crap.

Oh man, that is so wrong. Let’s fix it.

vbnet Namespace DefaultNamespace Public Class Fibonacci Public Iterator Function Result() As IEnumerable(Of Integer) Dim previous As Integer Dim current As Integer Yield 1 Yield 1 previous = 1 current = 1 While current &lt; Integer.MaxValue - previous Dim tempprevious = current current += previous previous = tempprevious Yield current End While End Function End Class End NameSpace And now I can be reasonably sure that it works as it should.

And now I can easily play with it and see that the shorter version gives me the same correct results.

```vbnet Namespace DefaultNamespace Public Class Fibonacci Public Iterator Function Result() As IEnumerable(Of Integer) Yield 1 Yield 1

        For Each n In Me.Result.Zip(Me.Result.Skip(1), Function(x, y) x + y)
            Yield n
        Next
    End Function
End Class

End NameSpace``` Lesson learned.

And once again, SORRY.