private boolean testCycles(Biconnected bc) {
    Set<SimpleCycle> cycles = bc.getSeparatedCycles();
    Iterator<SimpleCycle> i = cycles.iterator();

    if (!i.hasNext()) return true;

    SimpleCycle mainCycle = i.next();
    List<Segment> segments = bc.getSegments(mainCycle);

    switch (segments.size()) {
      case 0:
        return true;

      case 1:
        Segment s = segments.get(0);
        if (s.isStringIn(mainCycle)) return true;
        else {
          System.err.println("TODO : find separated cycle");
          return false;
        }

      default:
        SimpleGraph comp = new CompatibilityGraph(mainCycle, segments);
        if (!this.tc.isTwoColorable(comp)) return false;
        else {
          for (Segment s2 : segments) if (!this.isPlanar(s2)) return false;
          return true;
        }
    }
  }
  /**
   * Planarity test with Auslander-Parter algorithm.
   *
   * @return True if planar
   */
  public boolean isPlanar(SimpleGraph g) {
    List<Biconnected> biconnecteds = Biconnected.createBiconnectedComponents(g);

    boolean planar = true;
    for (Biconnected bc : biconnecteds) {
      boolean biplan = this.testCycles(bc);
      planar = planar && biplan;
    }

    return planar;
  }