### Question:
Monitor { @Override public String toString() { return "Monitor "+description+": "+value; } Monitor( String description, T initialValue );  Monitor( String description ); String getDescription(); @Override String toString(); T get(); synchronized T set( T newValue ); T waitUntilEqAndSet( T desiredValue, T newValue ); synchronized T waitUntilEqAndSet( T desiredValue, int maxDelay,
		T newValue ); void waitUntilEq( T desiredValue ); synchronized void waitUntilEq( T desiredValue, int maxDelay ); T waitUntilNotEqAndSet( T undesiredValue, T newValue ); synchronized T waitUntilNotEqAndSet( T undesiredValue, int maxDelay,
		T newValue ); T waitUntilNotEq( T undesiredValue ); synchronized T waitUntilNotEq( T undesiredValue, int maxDelay );  }### Answer:
@Test public void mToString() throws Exception { assertEquals( "Monitor null: null", new Monitor<Object>( null, null ).toString() ); assertEquals( "Monitor null: true", new Monitor<Object>( null, true ).toString() ); assertEquals( "Monitor null: 1", new Monitor<Object>( null, 1 ).toString() ); assertEquals( "Monitor null: abc", new Monitor<Object>( null, "abc" ).toString() ); assertEquals( "Monitor null: 3.14159", new Monitor<Object>( null, 3.14159 ).toString() ); assertEquals( "Monitor a: null", new Monitor<Object>( "a", null ).toString() ); assertEquals( "Monitor b: true", new Monitor<Object>( "b", true ).toString() ); assertEquals( "Monitor c: 1", new Monitor<Object>( "c", 1 ).toString() ); assertEquals( "Monitor d: abc", new Monitor<Object>( "d", "abc" ).toString() ); assertEquals( "Monitor e: 3.14159", new Monitor<Object>( "e", 3.14159 ).toString() ); }