Tests 12 -15
Here's the code as it currently stands:
Public Function i2r(i As Integer) As String
Application.Volatile
i2r = ""
If i = 4 Then
i2r = "IV"
ElseIf i = 9 Then
i2r = "IX"
ElseIf i >= 10 Then
i2r = "X"
i = i - 10
ElseIf i >= 5 Then
i2r = "V"
i = i - 5
End If
While i <= 3 And i > 0
i2r = i2r + "I"
i = i - 1
Wend
End Function
I look to see if I can refactor anything. I can’t see anything. Hmmm ...
I add in the 12 = XII test case. It works straight away. As does the 13 = XIII.
I add in the 14 = XIV test case. Now the easiest way to make this test work is to put in an if i = 14 and I do this. But when I go to refactor I realise that it’s really just 10 + 4, so I move the if i =4 out of the string of if’s and move it after the 5 and between the 3 , 2 and 1 code. It should just trickle through. My tests still all run after making the change.
Public Function i2r(i As Integer) As String
Application.Volatile
i2r = ""
If i = 9 Then
i2r = "IX"
ElseIf i >= 10 Then
i2r = "X"
i = i - 10
ElseIf i >= 5 Then
i2r = "V"
i = i - 5
End If
If i = 4 Then
i2r = i2r + "IV"
End If
While i <= 3 And i > 0
i2r = i2r + "I"
i = i - 1
Wend
End Function
I look for ways to refactoring but I (with my limited coding ability) can’t see any that I can do with confidence.
I add the 15 = XV test case. I’m starting to see a pattern here and I change the code easily.
Public Function i2r(i As Integer) As String
Application.Volatile
i2r = ""
If i = 9 Then
i2r = "IX"
ElseIf i >= 10 Then
i2r = "X"
i = i - 10
End If
If i >= 5 Then
i2r = "V"
i = i - 5
End If
If i = 4 Then
i2r = i2r + "IV"
End If
While i <= 3 And i > 0
i2r = i2r + "I"
i = i - 1
Wend
End Function