// Path: mug-guava/src/main/java/com/google/mu/collect/Immutables.java
// public static <E> ImmutableList<E> list() {
//   return ImmutableList.of();
// }
// 
// Path: mug-guava/src/main/java/com/google/mu/collect/Immutables.java
// public static <K, V> ImmutableMap<K, V> map() {
//   return ImmutableMap.of();
// }
// 
// Path: mug-protobuf/src/main/java/com/google/mu/protobuf/util/MoreStructs.java
// public static Struct struct(String name, boolean value) {
//   return struct(name, valueOf(value));
// }
// 
// Path: mug-protobuf/src/main/java/com/google/mu/protobuf/util/MoreValues.java
// public static final Value FALSE = Value.newBuilder().setBoolValue(false).build();
// 
// Path: mug-protobuf/src/main/java/com/google/mu/protobuf/util/MoreValues.java
// public static final Value NULL =
//     Value.newBuilder().setNullValue(NullValue.NULL_VALUE).build();
// 
// Path: mug-protobuf/src/main/java/com/google/mu/protobuf/util/MoreValues.java
// public static final Value TRUE = Value.newBuilder().setBoolValue(true).build();
// 
// Path: mug-protobuf/src/main/java/com/google/mu/protobuf/util/MoreValues.java
// public static ListValue listValueOf(double... values) {
//   return stream(values).mapToObj(MoreValues::valueOf).collect(toListValue());
// }
// 
// Path: mug-protobuf/src/main/java/com/google/mu/protobuf/util/MoreValues.java
// public static Collector<Value, ?, ListValue> toListValue() {
//   return Collector.of(
//       ListValue::newBuilder,
//       ListValue.Builder::addValues,
//       (a, b) -> a.addAllValues(b.getValuesList()),
//       ListValue.Builder::build);
// }


import static com.google.common.truth.Truth.assertThat;
import static com.google.mu.collect.Immutables.list;
import static com.google.mu.collect.Immutables.map;
import static com.google.mu.protobuf.util.MoreStructs.struct;
import static com.google.mu.protobuf.util.MoreValues.FALSE;
import static com.google.mu.protobuf.util.MoreValues.NULL;
import static com.google.mu.protobuf.util.MoreValues.TRUE;
import static com.google.mu.protobuf.util.MoreValues.listValueOf;
import static com.google.mu.protobuf.util.MoreValues.toListValue;
import static org.junit.Assert.assertThrows;
import java.util.List;
import java.util.stream.Stream;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import com.google.common.testing.NullPointerTester;
import com.google.protobuf.ListValue;
import com.google.protobuf.Value;
import com.google.protobuf.util.Structs;
import com.google.protobuf.util.Values;
            ListValue.newBuilder()
                .addValues(Values.of(Structs.of("foo", Values.of(1))))
                .addValues(NULL)
                .addValues(Values.of(Structs.of("bar", Values.of(2))))
                .build());
  }

  @Test public void testListValueOf_nullStringArray() {
    assertThrows(NullPointerException.class, () -> listValueOf((String[]) null));
  }

  @Test public void testNullableValue_string() {
    assertThat(MoreValues.nullableValueOf((String) null)).isEqualTo(NULL);
    assertThat(MoreValues.nullableValueOf("abc")).isEqualTo(Values.of("abc"));
  }

  @Test public void testlist() {
    assertThat(MoreValues.asList(listValueOf(1, Long.MAX_VALUE, Long.MIN_VALUE)))
        .containsExactly(1, Long.MAX_VALUE, Long.MIN_VALUE)
        .inOrder();
  }

  @Test public void testlist_withNullElement() {
    assertThat(MoreValues.asList(ListValue.newBuilder().addValues(NULL)))
        .containsExactly((Object) null)
        .inOrder();
  }

  @Test public void testlist_fromBuilder_mutation() {
    ListValue.Builder builder = ListValue.newBuilder().addValues(Values.of("foo"));
// Path: mug-guava/src/main/java/com/google/mu/collect/Immutables.java
// public static <E> ImmutableList<E> list() {
//   return ImmutableList.of();
// }
// 
// Path: mug-guava/src/main/java/com/google/mu/collect/Immutables.java
// public static <K, V> ImmutableMap<K, V> map() {
//   return ImmutableMap.of();
// }
// 
// Path: mug-protobuf/src/main/java/com/google/mu/protobuf/util/MoreStructs.java
// public static Struct struct(String name, boolean value) {
//   return struct(name, valueOf(value));
// }
// 
// Path: mug-protobuf/src/main/java/com/google/mu/protobuf/util/MoreValues.java
// public static final Value FALSE = Value.newBuilder().setBoolValue(false).build();
// 
// Path: mug-protobuf/src/main/java/com/google/mu/protobuf/util/MoreValues.java
// public static final Value NULL =
//     Value.newBuilder().setNullValue(NullValue.NULL_VALUE).build();
// 
// Path: mug-protobuf/src/main/java/com/google/mu/protobuf/util/MoreValues.java
// public static final Value TRUE = Value.newBuilder().setBoolValue(true).build();
// 
// Path: mug-protobuf/src/main/java/com/google/mu/protobuf/util/MoreValues.java
// public static ListValue listValueOf(double... values) {
//   return stream(values).mapToObj(MoreValues::valueOf).collect(toListValue());
// }
// 
// Path: mug-protobuf/src/main/java/com/google/mu/protobuf/util/MoreValues.java
// public static Collector<Value, ?, ListValue> toListValue() {
//   return Collector.of(
//       ListValue::newBuilder,
//       ListValue.Builder::addValues,
//       (a, b) -> a.addAllValues(b.getValuesList()),
//       ListValue.Builder::build);
// }


// Path: mug-protobuf/src/test/java/com/google/mu/protobuf/util/MoreValuesTest.java
import static com.google.common.truth.Truth.assertThat;
import static com.google.mu.collect.Immutables.list;
import static com.google.mu.collect.Immutables.map;
import static com.google.mu.protobuf.util.MoreStructs.struct;
import static com.google.mu.protobuf.util.MoreValues.FALSE;
import static com.google.mu.protobuf.util.MoreValues.NULL;
import static com.google.mu.protobuf.util.MoreValues.TRUE;
import static com.google.mu.protobuf.util.MoreValues.listValueOf;
import static com.google.mu.protobuf.util.MoreValues.toListValue;
import static org.junit.Assert.assertThrows;
import java.util.List;
import java.util.stream.Stream;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import com.google.common.testing.NullPointerTester;
import com.google.protobuf.ListValue;
import com.google.protobuf.Value;
import com.google.protobuf.util.Structs;
import com.google.protobuf.util.Values;

            ListValue.newBuilder()
                .addValues(Values.of(Structs.of("foo", Values.of(1))))
                .addValues(NULL)
                .addValues(Values.of(Structs.of("bar", Values.of(2))))
                .build());
  }

  @Test public void testListValueOf_nullStringArray() {
    assertThrows(NullPointerException.class, () -> listValueOf((String[]) null));
  }

  @Test public void testNullableValue_string() {
    assertThat(MoreValues.nullableValueOf((String) null)).isEqualTo(NULL);
    assertThat(MoreValues.nullableValueOf("abc")).isEqualTo(Values.of("abc"));
  }

  @Test public void testlist() {
    assertThat(MoreValues.asList(listValueOf(1, Long.MAX_VALUE, Long.MIN_VALUE)))
        .containsExactly(1, Long.MAX_VALUE, Long.MIN_VALUE)
        .inOrder();
  }

  @Test public void testlist_withNullElement() {
    assertThat(MoreValues.asList(ListValue.newBuilder().addValues(NULL)))
        .containsExactly((Object) null)
        .inOrder();
  }

  @Test public void testlist_fromBuilder_mutation() {
    ListValue.Builder builder = ListValue.newBuilder().addValues(Values.of("foo"));
    List<Object> list = MoreValues.asList(builder);