about summary refs log tree commit diff
path: root/third_party/nix/src/tests/derivations_test.cc
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2020-08-06T02·01+0100
committertazjin <mail@tazj.in>2020-08-06T02·20+0000
commit91bd7ce73ab7eacaf995090014f67391624531c1 (patch)
tree92b860538a77417e67bc84f085610e9b6f361f06 /third_party/nix/src/tests/derivations_test.cc
parenta41c3dedb18201aa689206079e203f41c9bef389 (diff)
refactor(tvix): Use absl::btree_map for DerivationOutputs r/1610
This container implementation is much faster than std::map. We have
stuck to an ordered container because it's unclear whether the
accesses of this field (of which there are *many*) are actually
ordering dependent.

Also includes an Arbitrary implementation for absl::btree_map (for any
K, V that are also Arbitrary).

Change-Id: I04f58ca0ce32b9ae1759313b01508b0e44bae793
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1683
Reviewed-by: glittershark <grfn@gws.fyi>
Tested-by: BuildkiteCI
Diffstat (limited to 'third_party/nix/src/tests/derivations_test.cc')
-rw-r--r--third_party/nix/src/tests/derivations_test.cc11
1 files changed, 11 insertions, 0 deletions
diff --git a/third_party/nix/src/tests/derivations_test.cc b/third_party/nix/src/tests/derivations_test.cc
index 1e2719adda..63e2c3070e 100644
--- a/third_party/nix/src/tests/derivations_test.cc
+++ b/third_party/nix/src/tests/derivations_test.cc
@@ -22,6 +22,17 @@ namespace rc {
 using nix::Derivation;
 using nix::DerivationOutput;
 
+template <class K, class V>
+struct Arbitrary<absl::btree_map<K, V>> {
+  static Gen<absl::btree_map<K, V>> arbitrary() {
+    return gen::map(gen::arbitrary<std::map<K, V>>(), [](std::map<K, V> map) {
+      absl::btree_map<K, V> out_map;
+      out_map.insert(map.begin(), map.end());
+      return out_map;
+    });
+  }
+};
+
 template <>
 struct Arbitrary<nix::Base> {
   static Gen<nix::Base> arbitrary() {