/**
   * Tests the constructor and toArray(..) methods of {@link CallConstructorEvent}.
   *
   * <p>Assert that a record instance event1 equals an instance event2 created by serializing event1
   * to an array event1Array and using event1Array to construct event2. This ignores a set
   * loggingTimestamp!
   */
  @Test
  public void testSerializeDeserializeEquals() {

    final CallConstructorEvent event1 =
        new CallConstructorEvent(
            TSTAMP,
            TRACE_ID,
            ORDER_INDEX,
            FQ_CALLER_OPERATION_SIGNATURE,
            FQ_CALLER_CLASSNAME,
            FQ_CALLEE_OPERATION_SIGNATURE,
            FQ_CALLEE_CLASSNAME);

    Assert.assertEquals("Unexpected timestamp", TSTAMP, event1.getTimestamp());
    Assert.assertEquals("Unexpected trace ID", TRACE_ID, event1.getTraceId());
    Assert.assertEquals("Unexpected order index", ORDER_INDEX, event1.getOrderIndex());
    Assert.assertEquals(
        "Unexpected caller operation name",
        FQ_CALLER_OPERATION_SIGNATURE,
        event1.getCallerOperationSignature());
    Assert.assertEquals(
        "Unexpected caller class name", FQ_CALLER_CLASSNAME, event1.getCallerClassSignature());
    Assert.assertEquals(
        "Unexpected callee operation name",
        FQ_CALLEE_OPERATION_SIGNATURE,
        event1.getCalleeOperationSignature());
    Assert.assertEquals(
        "Unexpected callee class name", FQ_CALLEE_CLASSNAME, event1.getCalleeClassSignature());

    final Object[] event1Array = event1.toArray();

    final CallConstructorEvent event2 = new CallConstructorEvent(event1Array);

    Assert.assertEquals(event1, event2);
    Assert.assertEquals(0, event1.compareTo(event2));
    Assert.assertTrue(UtilityClass.refersToSameOperationAs(event1, event2));
  }
  /** Tests the constructor and writeBytes(..) methods of {@link CallConstructorEvent}. */
  @Test
  public void testSerializeDeserializeBinaryEquals() {

    final CallConstructorEvent event1 =
        new CallConstructorEvent(
            TSTAMP,
            TRACE_ID,
            ORDER_INDEX,
            FQ_CALLER_OPERATION_SIGNATURE,
            FQ_CALLER_CLASSNAME,
            FQ_CALLEE_OPERATION_SIGNATURE,
            FQ_CALLEE_CLASSNAME);

    Assert.assertEquals("Unexpected timestamp", TSTAMP, event1.getTimestamp());
    Assert.assertEquals("Unexpected trace ID", TRACE_ID, event1.getTraceId());
    Assert.assertEquals("Unexpected order index", ORDER_INDEX, event1.getOrderIndex());
    Assert.assertEquals(
        "Unexpected caller operation name",
        FQ_CALLER_OPERATION_SIGNATURE,
        event1.getCallerOperationSignature());
    Assert.assertEquals(
        "Unexpected caller class name", FQ_CALLER_CLASSNAME, event1.getCallerClassSignature());
    Assert.assertEquals(
        "Unexpected callee operation name",
        FQ_CALLEE_OPERATION_SIGNATURE,
        event1.getCalleeOperationSignature());
    Assert.assertEquals(
        "Unexpected callee class name", FQ_CALLEE_CLASSNAME, event1.getCalleeClassSignature());

    final IRegistry<String> stringRegistry = new Registry<String>();
    final ByteBuffer buffer = ByteBuffer.allocate(event1.getSize());
    event1.writeBytes(buffer, stringRegistry);
    buffer.flip();

    final CallConstructorEvent event2 = new CallConstructorEvent(buffer, stringRegistry);

    Assert.assertEquals(event1, event2);
    Assert.assertEquals(0, event1.compareTo(event2));
    Assert.assertTrue(UtilityClass.refersToSameOperationAs(event1, event2));
  }