Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Homework7 #7

Merged
merged 21 commits into from
Jun 1, 2024
Merged

Homework7 #7

merged 21 commits into from
Jun 1, 2024

Conversation

kazbekovruslan
Copy link
Owner

No description provided.

Comment on lines 63 to 66
System.Threading.Interlocked.CompareExchange(&value, Some(Error ex), None)
|> ignore

raise ex

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

нужно точно так же паттерн-матчить, а не игнорировать результат с выбросом исключения, поскольку может произойти ситуация, когда успешный поток записал значение, а неуспешный не успел записать эксепшен -- получим два разных результата

Comment on lines 54 to 55
let object = obj ()
let supplier () = object

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

supplier возвращает ссылку на один и тот же объект, а должен на разные


let mutable counter = 0

let lazyConstructors =

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

нужен ещё один тест, который внутри Supplier будет вызывать Interlocked.Increment &counter, чтобы проверить, что supplier у lock-реализации в многопоточной среде вызывается 1 раз

ну и с эксепшенами в многопоточной среде

return html
with ex ->
printfn "Failed to download %s: %s" url ex.Message
return ""
Copy link

@DedSec256 DedSec256 May 31, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

можно было вернуть None/Result

link, Some/None length

open FsUnit
open NUnit.Framework

[<Test>]
Copy link

@DedSec256 DedSec256 May 31, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

нужны тесты, которые проверят, что в случае исключения при загрузке одной из страниц, для другой спешно выполнится подсчет размера

  let mock = Mock<HttClient>()

  mock.Setup(fun client -> client.GetStringAsync("hwproj.ru"))
      .ReturnsAsync("<html>нормальная ссылка / битая ссылка</html>");
          

downloadPages "hwproj.ru" mock.Object
 

https://github.com/devlooped/moq

@kazbekovruslan kazbekovruslan merged commit e453be6 into main Jun 1, 2024
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants