// Test setting attributes with values that don't conform to their domain
 @Test(expected = ClassCastException.class)
 public void testAccessAttributesFailure3() throws GraphIOException {
   Schema s =
       GraphIO.loadSchemaFromFile(GenericGraphImplTest.SCHEMAFOLDER + "DefaultValueTestSchema.tg");
   Graph g = s.createGraph(ImplementationType.GENERIC);
   Vertex v = g.createVertex(g.getGraphClass().getVertexClass("TestVertex"));
   v.setAttribute("stringVertex", 42);
 }
  @Test
  public void testAccessAttributes() throws GraphIOException {

    Schema s =
        GraphIO.loadSchemaFromFile(GenericGraphImplTest.SCHEMAFOLDER + "DefaultValueTestSchema.tg");
    Graph g = s.createGraph(ImplementationType.GENERIC);
    Vertex v = g.createVertex(g.getGraphClass().getVertexClass("TestVertex"));

    // accessing default values
    assertEquals(true, v.getAttribute("boolVertex"));
    assertEquals(
        JGraLab.vector()
            .plus(JGraLab.vector().plus(true))
            .plus(JGraLab.vector().plus(false))
            .plus(JGraLab.vector().plus(true)),
        v.getAttribute("complexListVertex"));
    assertEquals(
        JGraLab.map()
            .plus(JGraLab.vector().plus(true), JGraLab.set().plus(true))
            .plus(JGraLab.vector().plus(false), JGraLab.set().plus(false)),
        v.getAttribute("complexMapVertex"));
    assertEquals(
        JGraLab.set().plus(JGraLab.set().plus(true)).plus(JGraLab.set().plus(false)),
        v.getAttribute("complexSetVertex"));
    assertEquals(1.1, v.getAttribute("doubleVertex"), 0.001);
    assertEquals("FIRST", v.getAttribute("enumVertex"));
    assertEquals(1, (int) v.getAttribute("intVertex"));
    assertEquals(JGraLab.vector().plus(true).plus(false).plus(true), v.getAttribute("listVertex"));
    assertEquals(1l, (long) v.getAttribute("longVertex"));
    assertEquals(
        JGraLab.map().plus(1, true).plus(2, false).plus(3, true), v.getAttribute("mapVertex"));
    assertEquals(
        RecordImpl.empty()
            .plus("boolRecord", true)
            .plus("doubleRecord", 1.1d)
            .plus("enumRecord", "FIRST")
            .plus("intRecord", 1)
            .plus("listRecord", JGraLab.vector().plus(true).plus(false).plus(true))
            .plus("longRecord", 1l)
            .plus("mapRecord", JGraLab.map().plus(1, true).plus(2, false).plus(3, true))
            .plus("setRecord", JGraLab.set().plus(true).plus(false))
            .plus("stringRecord", "test"),
        v.getAttribute("recordVertex"));
    assertEquals(JGraLab.set().plus(true).plus(false), v.getAttribute("setVertex"));
    assertEquals("test", v.getAttribute("stringVertex"));

    // changing values
    v.setAttribute("boolVertex", false);
    assertEquals(false, v.getAttribute("boolVertex"));
    v.setAttribute(
        "complexListVertex",
        JGraLab.vector().plus(JGraLab.vector().plus(false)).plus(JGraLab.vector().plus(false)));
    assertEquals(
        JGraLab.vector().plus(JGraLab.vector().plus(false)).plus(JGraLab.vector().plus(false)),
        v.getAttribute("complexListVertex"));
    v.setAttribute(
        "complexMapVertex",
        JGraLab.map()
            .plus(JGraLab.vector().plus(true).plus(false), JGraLab.set().plus(false))
            .plus(JGraLab.vector().plus(false).plus(true), JGraLab.set().plus(true)));
    assertEquals(
        JGraLab.map()
            .plus(JGraLab.vector().plus(true).plus(false), JGraLab.set().plus(false))
            .plus(JGraLab.vector().plus(false).plus(true), JGraLab.set().plus(true)),
        v.getAttribute("complexMapVertex"));
    v.setAttribute("complexSetVertex", JGraLab.set().plus(JGraLab.set().plus(false)));
    assertEquals(JGraLab.set().plus(JGraLab.set().plus(false)), v.getAttribute("complexSetVertex"));
    v.setAttribute("doubleVertex", 2.2d);
    assertEquals(2.2d, v.getAttribute("doubleVertex"), 0.001);
    v.setAttribute("enumVertex", "SECOND");
    assertEquals("SECOND", v.getAttribute("enumVertex"));
    v.setAttribute("intVertex", 42);
    assertEquals(42, (int) v.getAttribute("intVertex"));
    v.setAttribute("listVertex", JGraLab.vector().plus(false).plus(false).plus(true));
    assertEquals(JGraLab.vector().plus(false).plus(false).plus(true), v.getAttribute("listVertex"));
    v.setAttribute("longVertex", 987654321l);
    assertEquals(987654321l, (long) v.getAttribute("longVertex"));
    v.setAttribute("mapVertex", JGraLab.map().plus(42, true).plus(24, false));
    assertEquals(JGraLab.map().plus(42, true).plus(24, false), v.getAttribute("mapVertex"));
    v.setAttribute(
        "recordVertex",
        RecordImpl.empty()
            .plus("boolRecord", false)
            .plus("doubleRecord", 1.3d)
            .plus("enumRecord", "THIRD")
            .plus("intRecord", 42)
            .plus("listRecord", JGraLab.vector().plus(false).plus(true).plus(false))
            .plus("longRecord", 987654321l)
            .plus("mapRecord", JGraLab.map().plus(42, true).plus(24, false))
            .plus("setRecord", JGraLab.set().plus(false))
            .plus("stringRecord", "more test"));
    assertEquals(
        RecordImpl.empty()
            .plus("boolRecord", false)
            .plus("doubleRecord", 1.3d)
            .plus("enumRecord", "THIRD")
            .plus("intRecord", 42)
            .plus("listRecord", JGraLab.vector().plus(false).plus(true).plus(false))
            .plus("longRecord", 987654321l)
            .plus("mapRecord", JGraLab.map().plus(42, true).plus(24, false))
            .plus("setRecord", JGraLab.set().plus(false))
            .plus("stringRecord", "more test"),
        v.getAttribute("recordVertex"));
    v.setAttribute("setVertex", JGraLab.set().plus(true));
    assertEquals(JGraLab.set().plus(true), v.getAttribute("setVertex"));
    v.setAttribute("stringVertex", "some String");
    assertEquals("some String", v.getAttribute("stringVertex"));
  }