Coverage fejtörő
A VS coverage-e ezt mutatja, hogy ez a sor csak részben van lefedve:
return (GetSourceItem(step) - this[step - 1]) * e + this[step - 1];
Nincs benne && vagy ||, akkor triviális lenne. Én már tudom a választ. :)
Update: alul, kommentben ott a megoldás.
May 12th, 2010 at 6:42 am
NullReference vagy IndexOutOfBound exception?
May 12th, 2010 at 7:51 am
Nem.
May 12th, 2010 at 8:49 am
GetSourceItem belsejét nem járja be teljesen?
pl
private int GetSourceItem(int step)
{
if (1 == 1)
return 4;
….
return 6;
}
May 12th, 2010 at 8:50 am
Ha nem, akkor csak az indexer-t tudom elképzelni még. this[step - 1]
May 12th, 2010 at 8:53 am
Ha a GetSourceItem belsejét nem járná be, az ott látszana, nem a hívó soron.
Nem az indexerrel van baj.
Hint: nem teljesen ennyi a kód, mert a compiler generál hozzá, ami nem látszik, de a coverage nyilván látja.
May 12th, 2010 at 12:20 pm
e==0?
May 12th, 2010 at 3:42 pm
Nem, ha osztás lenne e-vel, akkor esetleg, de nem.
May 12th, 2010 at 5:17 pm
A “this[step - 1]“-t kiemeli változóba (bár ez Debug módban érdekes lenne), hogy optimalizáljon?
May 12th, 2010 at 5:19 pm
Nem. :) Éjszaka megírom.
May 12th, 2010 at 9:38 pm
Nos, a megoldás az, hogy a számításban nullable típusokat használok, és ezek miatt a compilernek külön kódot kell írni az operátorokhoz, hogy lekezelje, ha valamelyik operandusz null.
Ha a fenti kódban minden értéknek lekérem a tényleges értékét, a .Value-val, akkor már teljes a lefedettség.
Most futottam pl. ebbe bele:
if (slow.HasValue && fast.HasValue)
{
return fast - slow;
}
Ebben is a return kifejezése csak részben lefedett, de így már teljesen:
if (slow.HasValue && fast.HasValue)
{
return fast.Value - slow.Value;
}
Érdekes, nem?
May 13th, 2010 at 12:41 pm
Érdekes tényleg, de azért legközelebb egy kicsit több kódot mutass a fejtörőből, mert honnan tudtuk volna, hogy nullable-ök? :)
May 13th, 2010 at 1:27 pm
YellowCat: először én se realizáltam :)
De igazad van, így túl nehéz volt.