1/* 2 * Copyright (c) 2010 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LLVM_LICENSE_HEADER@ 5 */ 6 7// -*- mode:C; c-basic-offset:4; tab-width:4; intent-tabs-mode:nil; -*- 8// TEST_CONFIG 9 10#import <stdio.h> 11#import <stdlib.h> 12#import <string.h> 13#import "test.h" 14 15typedef struct { 16 unsigned long ps[30]; 17 int qs[30]; 18} BobTheStruct; 19 20int main () { 21 __block BobTheStruct fiddly; 22 BobTheStruct copy; 23 24 void (^incrementFiddly)() = ^{ 25 int i; 26 for(i=0; i<30; i++) { 27 fiddly.ps[i]++; 28 fiddly.qs[i]++; 29 } 30 }; 31 32 memset(&fiddly, 0xA5, sizeof(fiddly)); 33 memset(©, 0x2A, sizeof(copy)); 34 35 int i; 36 for(i=0; i<30; i++) { 37 fiddly.ps[i] = i * i * i; 38 fiddly.qs[i] = -i * i * i; 39 } 40 41 copy = fiddly; 42 incrementFiddly(); 43 44 if ( © == &fiddly ) { 45 fail("struct wasn't copied"); 46 } 47 for(i=0; i<30; i++) { 48 //printf("[%d]: fiddly.ps: %lu, copy.ps: %lu, fiddly.qs: %d, copy.qs: %d\n", i, fiddly.ps[i], copy.ps[i], fiddly.qs[i], copy.qs[i]); 49 if ( (fiddly.ps[i] != copy.ps[i] + 1) || (fiddly.qs[i] != copy.qs[i] + 1) ) { 50 fail("struct contents were not incremented"); 51 } 52 } 53 54 succeed(__FILE__); 55} 56