Първо се извинявам, но ще се забавя още. Поради натовареност/промени в плановете ми навярно ще публикувам крайните тестове, примерното решение и крайните точки от това домашното не по рано от Неделя.
Това от части се дължи на това че искам да напиша още няколко теста и да проверя че покрай промени в тестовете или тестове които не са напълно коректни някой от предалите не получава по-малко точки.
@Никола Юруков:
Условието с изключение на реда за това че очакваме че ще върнете io.Reader независимо от свалянето, не е било променяно. Това обаче не е промяна във замисъла на задачата, а е следствие на това че задачата беше намалена като сложност в последните дни преди да я постнем и покрай някоя от редакциите сме го пропуснали.
Ако това е единственото нещо което не изпълнявате навярно evans няма да ви вземе точка - тъй като има само един тест (за сега поне) в който се ползва и съм склонен да върна точката на хората които са предали преди нова година(теста и промяната са добавени на 31 сутринта).
Промените по тестовете с изключение на няколко са в повече оправяне на проблеми които евентуално вие(и аз) бихте имали когато не ви минат. Изключенията са:
- добавянето на теста покрай изпуснатата част от условието
- поправянето на теста покрай това че имплементирах как се правят и отговарят range заявки по спомен вместо да прочета rfc-то - тук са два къмита в рамките на 10 минути
- връщането на
Content-Length
header вместо нищо в случая че се взима празен файл в един от тестовете - което отново е според rfc-то и ако не ви работи теста всъщност имплементирате грешно условието.
Отново за хората предали преди въпросните промени а и за хората предали след тях, съм склонен да променя тестовете по такъв начин че да минават и при тях. Това е главно защото необходимите промени в решенията, за да минат промените в тестовете, са минимални и приемам че просто не са гледали форума/github репото след като в началото са си взели тестовете.
Това всъщност е и основната причина да искам да видя решенията по внимателно.
Примера за разминаване между условието и тестовете не е валиден. Иначе част от тестовете (навярно всичките) могат да бъдат написани по добре.
Примера ти не е валиден, защото Read може да блокира докато има какво да се прочете. Това както навярно се досещаш е начина по който работи, когато четеш от файловата система или мрежата(и навярно всичко друго). Примерно четейки от http.Response.Body е възможно към момента, в който викнеш Read още нищо освен header-ите на заявката да не са изпратени. При което Read може да блокира до получаването на някакво количество байтове вместо да върне 0, nil
, така и прави в реалната имплементация, но не е задължително. Но дори решение да връща 0, nil
докато няма нито грешка нито какво да върне, това навярно пак ще мине всички тестове - възможно е поради зацикляне да не успеете да се вместите във времето за теста и принципно не съм тествал, но не виждам причина да не минава.