All files / src essence.ts

87.5% Statements 21/24
75% Branches 6/8
75% Functions 3/4
86.36% Lines 19/22

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67                          4x               6x       6x 6x   6x 14x 14x     14x 14x   14x 1x   13x   5x                               2x 2x 2x 2x 1x     1x    
/**
 * @file To get graph essencial information.
 * @file.zh-CN 获取图的基本信息
 * @module essence
 */
 
import Graph from './Graph';
 
/**
 * @description Check if the object is a graph.
 * @description.zh-CN 检查对象是否为图。
 */
export function isGraph(obj: any) {
  return obj instanceof Graph;
}
 
/**
 * @description Check if the graph is a simple graph.
 * @description.zh-CN 检查图是否为简单图。
 */
export function isSimpleGraph(graph: Graph<any, any, any, any>) {
  Iif (graph.isMultigraph()) {
    return false;
  }
 
  const edges = graph.edges();
  const edgeStack = new Map();
 
  for (let i = 0; i < edges.length; i++) {
    const edge = edges[i];
    Iif (edge.v === edge.w) {
      return false;
    }
    const [v, w] = [edge.v, edge.w].sort();
    const key = `${v}-${w}`;
 
    if (edgeStack.has(key)) {
      return false;
    }
    edgeStack.set(key, true);
  }
  return true
}
 
/**
 * @description Check if the graph is a null graph.
 * @description.zh-CN 检查图是否为空图。
 */
export function isNullGraph(graph: Graph) {
  return graph.nodes().length === 0;
}
 
/**
 * @description Check if the graph contains Self loops.
 * @description.zh-CN 检查图是否包含自环。
 */
export function hasSelfLoop(graph: Graph) {
  const edges = graph.edges();
  for (let i = 0; i < edges.length; i++) {
    const edge = edges[i];
    if (edge.v === edge.w) {
      return true;
    }
  }
  return false;
}