[so] [Tema 1] Problema diff

Razvan Crainea razvan.crainea at gmail.com
Tue Mar 17 10:00:14 EET 2015


On Tue, Mar 17, 2015 at 12:49 AM Victor Ciurel via so <so at cursuri.cs.pub.ro>
wrote:

> On 03/17/2015 12:34 AM, Razvan Crainea wrote:
>
> On Mon, Mar 16, 2015 at 10:37 PM Victor Ciurel via so <
> so at cursuri.cs.pub.ro> wrote:
>
>
> De asemenea, imi poate
>> explica cineva comportamentul diff de mai sus, pentru ca eu inteleg ca
>> rulat cu -B, se vor ignora randurile libere.
>>
>
>  Dacă folosești opțiunea -B, când diff găsește o linie goală într-un
> fișier, verifică dacă în celălalt fișier este _cel puțin_ o linie goală.
> Concret, în cazul tău, diff găsește o linie goală între True și False în
> cel de-al doilea fișier, în schimb în primul fișier nu era niciuna. Deci
> testul returnează fals. Dacă erau două sau mai multe linii goale între True
> și False, diff returna succes.
>
>
> Am un contraexemplu pentru argumentul acesta:
>
> "True\n\nFalse\n\n" vs "True\nFalse\n\n"
>

> Comparand cu diff, aceste apar ca fiind identice, desi exista o linie
> libera intre True si False in primul caz, dar nu si in al doilea.
>

Într-adevăr, diff se comportă ciudat în aceste cazuri. Dacă reiei primul
exemplu pe care l-ai dat, o să observi că:

diff "True\nFalse\n\n" vs. "True\n\nFalse\n" -> diferite
diff "True\n\nFalse\n" vs. "True\nFalse\n\n" -> identice

Deci dacă le dai fișerele în altă ordine, obții rezultate diferite. Nu mi-e
clar de ce are acest comportament și nici nu am găsit nicăieri documentat.
Ar merita întrebată echipa de maintaineri de ce se comportă așa. Din
punctul meu de vedere este un bug.


> As vrea sa mai inteleg cum anume au fost generat fisierul de referinta
> pentru urmatoarele bucati de input (test20.in):
>
> find brady
> find into _test/outputs/test20.out.1
> find jamie
>
> Ce au ca output la stdout (test20.ref):
>
> "True\n\nFalse\n"
>
> Nu inteleg din ce motiv ar aparea o linie libera intre True si False.
> Pentru fiecare comanda ce afiseaza in fisier, ar trebui sa apara o linie
> libera si la stdout? Sau dupa fiecare comanda rulata vom afisa o linie
> goala?
>
> Implementarea de referință lasă după fiecare True și False câte o linie
liberă. De asta output-ul apare așa. Ideal ar fi fost ca astfel de cazuri
să fie eliminate de diff, dar din păcate nu face mereu ce vrem noi :(.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20150317/4c96a8da/attachment.html>


More information about the so mailing list