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.