Skip to content

Shrinking is Insanely Slow for write_read #596

Open

Description

@BebeSparkelSparkel

Just one test took ~25 minutes due to shrinking. https://github.com/haskell/text/actions/runs/9201285542/job/25309228763?pr=590#step:6:1224

Should noShrinking be added?

Activity

  1. Bodigrim commented on May 23, 2024

    @Bodigrim
    Contributor

    I imagine at the very least we don't want to shrink first three arguments of

      propTest :: TextEncoding -> Gen IO.BufferMode -> IO.NewlineMode -> c -> Property
  2. BebeSparkelSparkel commented on May 25, 2024

    @BebeSparkelSparkel
    ContributorAuthor

    The encoding is not shrunk. I have wrapped the other two with NoShrink but without much improvement. See #597

  3. Bodigrim commented on May 25, 2024

    @Bodigrim
    Contributor
          input-output
            t_write_read
              UTF-8
                NoBuffering:                                      OK (0.80s)
                  +++ OK, passed 100 tests; 39 discarded.
                LineBuffering:                                    OK (0.10s)
                  +++ OK, passed 100 tests; 27 discarded.
                BlockBuffering:                                   FAIL (1448.46s)
                  *** Failed! (after 72 tests and 2007 shrinks):
                  Exception:
                    Assertion failed
                    CallStack (from HasCallStack):
                      assert, called at src/Data/Text/IO.hs:249:35 in text-2.1.1-inplace:Data.Text.IO
                  NewlineMode {inputNL = LF, outputNL = LF}
                  ["aaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaa","aaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","a","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaa","aa","aaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaa","aa","","aaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
                  BlockBuffering (Just 4)
                  Use --quickcheck-replay=934323 to reproduce.
                  Use -p '/t_write_read.UTF-8.BlockBuffering/' to rerun this test only.
    

    2007 shrinks is a high number, but on the other hand why did they take 1448 seconds? That's 0.7 seconds per test, which sounds a lot, given that the test data does not seem to be that huge.

  4. BebeSparkelSparkel commented on May 25, 2024

    @BebeSparkelSparkel
    ContributorAuthor

    I think many more tests are run than 2007. If you look at numShrinkTries, so I think 2007 represents numShrinks but the number of tries is not shown.

  5. BebeSparkelSparkel commented on May 25, 2024

    @BebeSparkelSparkel
    ContributorAuthor

    I imagine there are so many shrinks tried because there are many variables to shrink

    • length of list
    • length of each text
    • every character

    I think if the character variable is removed this would perform much better. Either, do not modify the characters or set them all to 'a'.

  6. Bodigrim commented on May 25, 2024

    @Bodigrim
    Contributor

    Dunno, maybe lumping NoShrink is the simplest solution. I'm not too keen to have a custom wrapper with instance Arbitrary here...

  7. BebeSparkelSparkel commented on May 26, 2024

    @BebeSparkelSparkel
    ContributorAuthor

    I just added NoShrink to quickcheck and it has been pulled nick8325/quickcheck#408. We could up the version of quickcheck and use it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions