|  | @@ -2052,4 +2052,55 @@
 | 
	
		
			
				|  |  |    XCTAssertEqual([msg1 hash], [msg1Prime hash]);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +- (void)testCopyingMapFileds {
 | 
	
		
			
				|  |  | +  TestMessageOfMaps *msg = [TestMessageOfMaps message];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  msg.strToStr[@"foo"] = @"bar";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  [msg.strToInt setInt32:1 forKey:@"mumble"];
 | 
	
		
			
				|  |  | +  [msg.intToStr setObject:@"wee" forKey:42];
 | 
	
		
			
				|  |  | +  [msg.intToInt setInt32:123 forKey:321];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  [msg.strToBool setBool:YES forKey:@"one"];
 | 
	
		
			
				|  |  | +  [msg.boolToStr setObject:@"something" forKey:YES];
 | 
	
		
			
				|  |  | +  [msg.boolToBool setBool:YES forKey:NO];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  [msg.intToBool setBool:YES forKey:13];
 | 
	
		
			
				|  |  | +  [msg.boolToInt setInt32:111 forKey:NO];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  TestAllTypes *subMsg1 = [TestAllTypes message];
 | 
	
		
			
				|  |  | +  subMsg1.optionalInt32 = 1;
 | 
	
		
			
				|  |  | +  TestAllTypes *subMsg2 = [TestAllTypes message];
 | 
	
		
			
				|  |  | +  subMsg1.optionalInt32 = 2;
 | 
	
		
			
				|  |  | +  TestAllTypes *subMsg3 = [TestAllTypes message];
 | 
	
		
			
				|  |  | +  subMsg1.optionalInt32 = 3;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  msg.strToMsg[@"baz"] = subMsg1;
 | 
	
		
			
				|  |  | +  [msg.intToMsg setObject:subMsg2 forKey:222];
 | 
	
		
			
				|  |  | +  [msg.boolToMsg setObject:subMsg3 forKey:YES];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  TestMessageOfMaps *msg2 = [[msg copy] autorelease];
 | 
	
		
			
				|  |  | +  XCTAssertNotNil(msg2);
 | 
	
		
			
				|  |  | +  XCTAssertEqualObjects(msg2, msg);
 | 
	
		
			
				|  |  | +  XCTAssertTrue(msg2 != msg);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertTrue(msg.strToStr != msg2.strToStr);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertTrue(msg.intToStr != msg2.intToStr);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertTrue(msg.intToInt != msg2.intToInt);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertTrue(msg.strToBool != msg2.strToBool);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertTrue(msg.boolToStr != msg2.boolToStr);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertTrue(msg.boolToBool != msg2.boolToBool);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertTrue(msg.intToBool != msg2.intToBool);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertTrue(msg.boolToInt != msg2.boolToInt);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertTrue(msg.strToMsg != msg2.strToMsg);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertTrue(msg.intToMsg != msg2.intToMsg);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertTrue(msg.boolToMsg != msg2.boolToMsg);  // ptr compare
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  XCTAssertTrue(msg.strToMsg[@"baz"] != msg2.strToMsg[@"baz"]);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertEqualObjects(msg.strToMsg[@"baz"], msg2.strToMsg[@"baz"]);
 | 
	
		
			
				|  |  | +  XCTAssertTrue([msg.intToMsg objectForKey:222] != [msg2.intToMsg objectForKey:222]);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertEqualObjects([msg.intToMsg objectForKey:222], [msg2.intToMsg objectForKey:222]);
 | 
	
		
			
				|  |  | +  XCTAssertTrue([msg.boolToMsg objectForKey:YES] != [msg2.boolToMsg objectForKey:YES]);  // ptr compare
 | 
	
		
			
				|  |  | +  XCTAssertEqualObjects([msg.boolToMsg objectForKey:YES], [msg2.boolToMsg objectForKey:YES]);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  @end
 |