)]}'
{
  "commit": "aec9fc9a84414dba54a9c698a68ed28a93276113",
  "tree": "2b007520f597e916ae4969f423302c00219670f5",
  "parents": [
    "1d16068fedc82c0e144e676bf5fb157dd831edfc"
  ],
  "author": {
    "name": "Filip Niksic",
    "email": "fniksic@google.com",
    "time": "Wed Jan 15 13:28:54 2025 -0800"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Wed Jan 15 13:30:33 2025 -0800"
  },
  "message": "Fix non-determinism in `UniqueElementsContainerOf` and `UniqueElementsVectorOf`.\n\nThese domains are typically used with sequence containers like `std::vector`,\nwhere the ordering of elements is important. However, by basing the domains on\n`absl::flat_hash_set`, the ordering gets lost, leading to non-determinism. This\ncan lead to unexpected behavior, especially in combination with combinators like\n`FlatMap`.\n\nThe fix exploits the fact that `AssociativeContainerOfImpl\u003cabsl::flat_hash_set\u003e`\nuses `std::list` -- a sequence container -- as a corpus type, so it already\npreserves the ordering of elements. Furthermore, it automatically dedups\nelements while doing `Init` and `Mutate`. The only problematic part are the\nfunctions `FromValue` and `GetValue` in `UniqueElementsContainerImpl`, which\nconvert the values via an intermediate set and can thus lose the ordering.\nThe fix is to convert the values directly, element by element.\n\nI also improved validation, which now makes sure that the corpus value indeed\nhas unique elements.\n\nPiperOrigin-RevId: 715922985\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "041ac42e2c278fc92091e8bd9e6369aa1afda0f4",
      "old_mode": 33188,
      "old_path": "domain_tests/BUILD",
      "new_id": "6c8431899d2d38a6caa7e9f7abf0c053ff4ccc62",
      "new_mode": 33188,
      "new_path": "domain_tests/BUILD"
    },
    {
      "type": "modify",
      "old_id": "109536929fca87a056b18ff8ebdbb0e93d7b2615",
      "old_mode": 33188,
      "old_path": "domain_tests/CMakeLists.txt",
      "new_id": "c7d97b1cde5647a743199332a9109a2e89bcff6d",
      "new_mode": 33188,
      "new_path": "domain_tests/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "53a9324c18054a2a3f416014e1dcc2a6f190ae4a",
      "old_mode": 33188,
      "old_path": "domain_tests/container_combinators_test.cc",
      "new_id": "9416cae5262f7f92d0bb651a2c0f7454ff74e487",
      "new_mode": 33188,
      "new_path": "domain_tests/container_combinators_test.cc"
    },
    {
      "type": "modify",
      "old_id": "db30b333a466f549f5f558ed053053f9eab0dff4",
      "old_mode": 33188,
      "old_path": "fuzztest/internal/domains/unique_elements_container_of_impl.h",
      "new_id": "370a6915bef4b4ebbdde43be99fb4e5ab99e7752",
      "new_mode": 33188,
      "new_path": "fuzztest/internal/domains/unique_elements_container_of_impl.h"
    }
  ]
}
