### Question:
MaskSubgraph extends AbstractGraph<V, E> implements Serializable { @Override public GraphType getType() { return baseType.asUnmodifiable(); } MaskSubgraph(Graph<V, E> base, Predicate<V> vertexMask, Predicate<E> edgeMask); @Override E addEdge(V sourceVertex, V targetVertex); @Override boolean addEdge(V sourceVertex, V targetVertex, E edge); @Override boolean addVertex(V v); @Override boolean containsEdge(E e); @Override boolean containsVertex(V v); @Override Set<E> edgeSet(); @Override Set<E> edgesOf(V vertex); @Override int degreeOf(V vertex); @Override Set<E> incomingEdgesOf(V vertex); @Override int inDegreeOf(V vertex); @Override Set<E> outgoingEdgesOf(V vertex); @Override int outDegreeOf(V vertex); @Override Set<E> getAllEdges(V sourceVertex, V targetVertex); @Override E getEdge(V sourceVertex, V targetVertex); @Override EdgeFactory<V, E> getEdgeFactory(); @Override V getEdgeSource(E edge); @Override V getEdgeTarget(E edge); @Override GraphType getType(); @Override double getEdgeWeight(E edge); @Override void setEdgeWeight(E edge, double weight); @Override boolean removeAllEdges(Collection<? extends E> edges); @Override Set<E> removeAllEdges(V sourceVertex, V targetVertex); @Override boolean removeAllVertices(Collection<? extends V> vertices); @Override boolean removeEdge(E e); @Override E removeEdge(V sourceVertex, V targetVertex); @Override boolean removeVertex(V v); @Override Set<V> vertexSet();  }### Answer:
@Test public void testUnmodifiable() { Graph<Integer, DefaultEdge> g = new Pseudograph<>(DefaultEdge.class); assertFalse(new MaskSubgraph<>(g, v -> v.equals(5), e -> false).getType().isModifiable()); }