private static Map<Direction, Collection<RelationshipType>> temporaryTypeMap() { Map<Direction, Collection<RelationshipType>> map = new EnumMap<>( Direction.class ); for ( Direction direction : Direction.values() ) { map.put( direction, new ArrayList<>() ); } return map; }
@Override public StandardExpander remove( RelationshipType type ) { Map<Direction, Collection<RelationshipType>> tempMap = temporaryTypeMapFrom( typesMap ); for ( Direction direction : Direction.values() ) { tempMap.get( direction ).remove( type ); } return createNew( toTypeMap( tempMap ) ); }
private static Map<Direction, Collection<RelationshipType>> temporaryTypeMapFrom( Map<Direction, RelationshipType[]> typeMap ) { Map<Direction, Collection<RelationshipType>> map = new EnumMap<>( Direction.class ); for ( Direction direction : Direction.values() ) { ArrayList<RelationshipType> types = new ArrayList<>(); map.put( direction, types ); RelationshipType[] existing = typeMap.get( direction ); if ( existing != null ) { types.addAll( asList( existing ) ); } } return map; }
private void verifyRelationships( String message, Node root, boolean[] loop, Relationship... relationships ) { for ( Direction dir : Direction.values() ) { Set<Relationship> expected = new HashSet<>(); for ( int i = 0; i < relationships.length; i++ ) { if ( relationships[i] != null && (dir != Direction.INCOMING || loop[i]) ) { expected.add( relationships[i] ); } } for ( Relationship rel : root.getRelationships( dir ) ) { assertTrue( message + ": unexpected relationship: " + rel, expected.remove( rel ) ); } assertTrue( message + ": expected relationships not seen " + expected, expected.isEmpty() ); } } }
for ( int typeId = 0, relationshipId = 0; typeId < typeCount; typeId++ ) for ( Direction direction : Direction.values() )
private void assertDegrees( Node node ) { for ( RelationshipType type : node.getRelationshipTypes() ) { for ( Direction direction : Direction.values() ) { long degree = node.getDegree( type, direction ); long actualDegree = count( node.getRelationships( type, direction ) ); assertEquals( actualDegree, degree ); } } }
NodeRelationshipCache cache = new NodeRelationshipCache( NumberArrayFactory.HEAP, denseNodeThreshold ); cache.setNodeCount( numberOfNodes + 1 ); Direction[] directions = Direction.values(); for ( int i = 0; i < numberOfNodes; i++ )
public static Direction parseDirection(String direction) { if (null == direction) { return Direction.BOTH; } try { return Direction.valueOf(direction.toUpperCase()); } catch (Exception e) { throw new RuntimeException(format("Cannot convert value '%s' to Direction. Legal values are '%s'", direction, Arrays.toString(Direction.values()))); } }
@Test public void canAddLoopRelationship() { Node node = getGraphDb().createNode(); node.createRelationshipTo( node, TEST ); newTransaction(); for ( Direction dir : Direction.values() ) { int count = 0; for ( Relationship rel : node.getRelationships( dir ) ) { count++; assertEquals( "start node", node, rel.getStartNode() ); assertEquals( "end node", node, rel.getEndNode() ); assertEquals( "other node", node, rel.getOtherNode( node ) ); } assertEquals( dir.name() + " relationship count", 1, count ); } }
for ( Direction direction : Direction.values() )
private static Map<Direction, Collection<RelationshipType>> temporaryTypeMap() { Map<Direction, Collection<RelationshipType>> map = new EnumMap<>( Direction.class ); for ( Direction direction : Direction.values() ) { map.put( direction, new ArrayList<>() ); } return map; }
private static Map<Direction, Collection<RelationshipType>> temporaryTypeMapFrom( Map<Direction, RelationshipType[]> typeMap ) { Map<Direction, Collection<RelationshipType>> map = new EnumMap<>( Direction.class ); for ( Direction direction : Direction.values() ) { ArrayList<RelationshipType> types = new ArrayList<>(); map.put( direction, types ); RelationshipType[] existing = typeMap.get( direction ); if ( existing != null ) { types.addAll( asList( existing ) ); } } return map; }
@Override public StandardExpander remove( RelationshipType type ) { Map<Direction, Collection<RelationshipType>> tempMap = temporaryTypeMapFrom( typesMap ); for ( Direction direction : Direction.values() ) { tempMap.get( direction ).remove( type ); } return createNew( toTypeMap( tempMap ) ); }