From 39cef6d6a4a9e3ae80b11a9ccc0f35325852777c Mon Sep 17 00:00:00 2001 From: cpeyser Date: Thu, 22 Mar 2018 10:22:28 -0700 Subject: Allow NestedSetCodec to share members across multiple deserializations. This avoids redundancy in memory when multiple NestedSets share a member PiperOrigin-RevId: 190085907 --- .../lib/collect/nestedset/NestedSetCodecTest.java | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/test/java/com/google/devtools/build/lib/collect') diff --git a/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTest.java b/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTest.java index 978d7a0bb5..74eea2176d 100644 --- a/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTest.java @@ -15,8 +15,12 @@ package com.google.devtools.build.lib.collect.nestedset; import static com.google.common.truth.Truth.assertThat; +import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.skyframe.serialization.AutoRegistry; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs; import com.google.devtools.build.lib.skyframe.serialization.SerializationConstants; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester; +import com.google.protobuf.ByteString; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -66,6 +70,27 @@ public class NestedSetCodecTest { .runTests(); } + @SuppressWarnings("unchecked") + @Test + public void testDeserializedNestedSetsShareChildren() throws Exception { + ObjectCodecs objectCodecs = + new ObjectCodecs( + AutoRegistry.get().getBuilder().setAllowDefaultCodec(true).build(), ImmutableMap.of()); + NestedSet originalChild = NestedSetBuilder.create(Order.STABLE_ORDER, "a", "b", "c"); + NestedSet originalA = + new NestedSetBuilder(Order.STABLE_ORDER).addTransitive(originalChild).build(); + NestedSet originalB = + new NestedSetBuilder(Order.STABLE_ORDER).addTransitive(originalChild).build(); + + ByteString serializedA = objectCodecs.serialize(originalA); + ByteString serializedB = objectCodecs.serialize(originalB); + + NestedSet deserializedA = (NestedSet) objectCodecs.deserialize(serializedA); + NestedSet deserializedB = (NestedSet) objectCodecs.deserialize(serializedB); + + assertThat(deserializedA.rawChildren()).isSameAs(deserializedB.rawChildren()); + } + private static void verifyDeserialization( NestedSet subject, NestedSet deserialized) { assertThat(subject.getOrder()).isEqualTo(deserialized.getOrder()); -- cgit v1.2.3