- Timestamp:
- Dec 6, 2017, 11:49:36 AM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 16a63a78
- Parents:
- a85e44c (diff), 971d9f2 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- src/tests
- Files:
-
- 6 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
src/tests/concurrent/examples/.expect/datingService.txt
ra85e44c r16988e8 1 Girl:17 is dating Boy at 2 with ccode 17 2 Boy:2 is dating Girl 17 with ccode 17 3 Boy:14 is dating Girl 5 with ccode 5 4 Girl:5 is dating Boy at 14 with ccode 5 5 Boy:9 is dating Girl 10 with ccode 10 6 Girl:10 is dating Boy at 9 with ccode 10 7 Boy:1 is dating Girl 18 with ccode 18 8 Girl:18 is dating Boy at 1 with ccode 18 9 Boy:16 is dating Girl 3 with ccode 3 10 Girl:3 is dating Boy at 16 with ccode 3 11 Boy:5 is dating Girl 14 with ccode 14 12 Girl:14 is dating Boy at 5 with ccode 14 13 Boy:15 is dating Girl 4 with ccode 4 14 Girl:4 is dating Boy at 15 with ccode 4 15 Girl:0 is dating Boy at 19 with ccode 0 16 Boy:19 is dating Girl 0 with ccode 0 17 Girl:9 is dating Boy at 10 with ccode 9 18 Boy:10 is dating Girl 9 with ccode 9 19 Girl:11 is dating Boy at 8 with ccode 11 20 Boy:8 is dating Girl 11 with ccode 11 21 Boy:12 is dating Girl 7 with ccode 7 22 Girl:7 is dating Boy at 12 with ccode 7 23 Boy:11 is dating Girl 8 with ccode 8 24 Girl:8 is dating Boy at 11 with ccode 8 25 Girl:16 is dating Boy at 3 with ccode 16 26 Boy:3 is dating Girl 16 with ccode 16 27 Girl:15 is dating Boy at 4 with ccode 15 28 Boy:4 is dating Girl 15 with ccode 15 29 Girl:19 is dating Boy at 0 with ccode 19 30 Boy:0 is dating Girl 19 with ccode 19 31 Girl:2 is dating Boy at 17 with ccode 2 32 Boy:17 is dating Girl 2 with ccode 2 33 Boy:13 is dating Girl 6 with ccode 6 34 Girl:6 is dating Boy at 13 with ccode 6 35 Boy:7 is dating Girl 12 with ccode 12 36 Girl:12 is dating Boy at 7 with ccode 12 37 Girl:13 is dating Boy at 6 with ccode 13 38 Boy:6 is dating Girl 13 with ccode 13 39 Girl:1 is dating Boy at 18 with ccode 1 40 Boy:18 is dating Girl 1 with ccode 1 -
src/tests/concurrent/examples/boundedBuffer.c
ra85e44c r16988e8 8 8 // Created On : Mon Oct 30 12:45:13 2017 9 9 // Last Modified By : Peter A. Buhr 10 // Last Modified On : Mon Oct 30 23:02:46201711 // Update Count : 910 // Last Modified On : Tue Dec 5 23:01:51 2017 11 // Update Count : 10 12 12 // 13 13 … … 30 30 int query( Buffer & buffer ) { return buffer.count; } 31 31 32 void insert( Buffer & mutex buffer, int elem ) {33 if ( buffer.count == 20 ) wait( buffer.empty );34 buffer.elements[buffer.back] = elem;35 b uffer.back = ( buffer.back + 1 ) % 20;36 buffer.count += 1;37 signal( buffer.full );32 void insert( Buffer & mutex buffer, int elem ) with( buffer ) { 33 if ( count == 20 ) wait( empty ); 34 elements[back] = elem; 35 back = ( back + 1 ) % 20; 36 count += 1; 37 signal( full ); 38 38 } 39 int remove( Buffer & mutex buffer ) {40 if ( buffer.count == 0 ) wait( buffer.full );41 int elem = buffer.elements[buffer.front];42 buffer.front = ( buffer.front + 1 ) % 20;43 buffer.count -= 1;44 signal( buffer.empty );39 int remove( Buffer & mutex buffer ) with( buffer ) { 40 if ( count == 0 ) wait( full ); 41 int elem = elements[front]; 42 front = ( front + 1 ) % 20; 43 count -= 1; 44 signal( empty ); 45 45 return elem; 46 46 } -
src/tests/concurrent/examples/datingService.c
ra85e44c r16988e8 9 9 // Created On : Mon Oct 30 12:56:20 2017 10 10 // Last Modified By : Peter A. Buhr 11 // Last Modified On : Mon Oct 30 23:02:11201712 // Update Count : 1 511 // Last Modified On : Tue Dec 5 23:06:40 2017 12 // Update Count : 18 13 13 // 14 14 … … 26 26 }; // DatingService 27 27 28 unsigned int girl( DatingService & mutex ds, unsigned int PhoneNo, unsigned int ccode ) {29 if ( is_empty( ds.Boys[ccode] ) ) {30 wait( ds.Girls[ccode] );31 ds.GirlPhoneNo = PhoneNo;28 unsigned int girl( DatingService & mutex ds, unsigned int PhoneNo, unsigned int ccode ) with( ds ) { 29 if ( is_empty( Boys[ccode] ) ) { 30 wait( Girls[ccode] ); 31 GirlPhoneNo = PhoneNo; 32 32 } else { 33 ds.GirlPhoneNo = PhoneNo;34 signal_block( ds.Boys[ccode] );33 GirlPhoneNo = PhoneNo; 34 signal_block( Boys[ccode] ); 35 35 } // if 36 return ds.BoyPhoneNo;36 return BoyPhoneNo; 37 37 } // DatingService girl 38 38 39 unsigned int boy( DatingService & mutex ds, unsigned int PhoneNo, unsigned int ccode ) {40 if ( is_empty( ds.Girls[ccode] ) ) {41 wait( ds.Boys[ccode] );42 ds.BoyPhoneNo = PhoneNo;39 unsigned int boy( DatingService & mutex ds, unsigned int PhoneNo, unsigned int ccode ) with( ds ) { 40 if ( is_empty( Girls[ccode] ) ) { 41 wait( Boys[ccode] ); 42 BoyPhoneNo = PhoneNo; 43 43 } else { 44 ds.BoyPhoneNo = PhoneNo;45 signal_block( ds.Girls[ccode] );44 BoyPhoneNo = PhoneNo; 45 signal_block( Girls[ccode] ); 46 46 } // if 47 return ds.GirlPhoneNo;47 return GirlPhoneNo; 48 48 } // DatingService boy 49 49 … … 59 59 yield( random( 100 ) ); // don't all start at the same time 60 60 unsigned int partner = girl( g.TheExchange, g.id, g.ccode ); 61 //sout | "Girl:" | g.id | "is dating Boy at" | partner | "with ccode" | g.ccode | endl;61 sout | "Girl:" | g.id | "is dating Boy at" | partner | "with ccode" | g.ccode | endl; 62 62 girlck[g.id] = partner; 63 63 } // Girl main … … 77 77 yield( random( 100 ) ); // don't all start at the same time 78 78 unsigned int partner = boy( b.TheExchange, b.id, b.ccode ); 79 //sout | " Boy:" | b.id | "is dating Girl" | partner | "with ccode" | b.ccode | endl;79 sout | " Boy:" | b.id | "is dating Girl" | partner | "with ccode" | b.ccode | endl; 80 80 boyck[b.id] = partner; 81 81 } // Boy main … … 92 92 Boy *boys[NoOfPairs]; 93 93 94 random_seed( getpid());94 random_seed( /*getpid()*/ 103 ); 95 95 96 96 for ( unsigned int i = 0; i < NoOfPairs; i += 1 ) { -
src/tests/concurrent/examples/matrixSum.c
ra85e44c r16988e8 11 11 // Created On : Mon Oct 9 08:29:28 2017 12 12 // Last Modified By : Peter A. Buhr 13 // Last Modified On : Sun Oct 29 21:08:48201714 // Update Count : 213 // Last Modified On : Tue Dec 5 22:56:46 2017 14 // Update Count : 4 15 15 // 16 16 … … 29 29 } 30 30 31 void main( Adder & adder ) {32 * adder.subtotal = 0;33 for ( int c = 0; c < adder.cols; c += 1 ) {34 * adder.subtotal += adder.row[c];31 void main( Adder & adder ) with( adder ) { 32 *subtotal = 0; 33 for ( int c = 0; c < cols; c += 1 ) { 34 *subtotal += row[c]; 35 35 } // for 36 36 } -
src/tests/coroutine/fibonacci.c
ra85e44c r16988e8 10 10 // Created On : Thu Jun 8 07:29:37 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Sep 17 21:38:15201713 // Update Count : 712 // Last Modified On : Tue Dec 5 22:27:54 2017 13 // Update Count : 14 14 14 // 15 15 … … 17 17 #include <coroutine> 18 18 19 coroutine Fibonacci { 20 int fn; // used for communication 21 }; 19 coroutine Fibonacci { int fn; }; // used for communication 22 20 23 void ?{}( Fibonacci & this ) { 24 this.fn = 0; 25 } 21 void ?{}( Fibonacci & fib ) with( fib ) { fn = 0; } 26 22 27 void main( Fibonacci & this) {23 void main( Fibonacci & fib ) with( fib ) { 28 24 int fn1, fn2; // retained between resumes 29 this.fn = 0; // case 0 30 fn 1 = this.fn;25 26 fn = 0; fn1 = fn; // 1st case 31 27 suspend(); // restart last resume 32 28 33 this.fn = 1; // case 1 34 fn2 = fn1; fn1 = this.fn; 29 fn = 1; fn2 = fn1; fn1 = fn; // 2nd case 35 30 suspend(); // restart last resume 36 31 37 for ( ;; ) { // general case 38 this.fn = fn1 + fn2; 39 fn2 = fn1; fn1 = this.fn; 32 for ( ;; ) { 33 fn = fn1 + fn2; fn2 = fn1; fn1 = fn; // general case 40 34 suspend(); // restart last resume 41 35 } // for 42 36 } 43 37 44 int next( Fibonacci & this) {45 resume( this); // restart last suspend46 return this.fn;38 int next( Fibonacci & fib ) with( fib ) { 39 resume( fib ); // restart last suspend 40 return fn; 47 41 } 48 42 -
src/tests/coroutine/fmtLines.c
ra85e44c r16988e8 10 10 // Created On : Sun Sep 17 21:56:15 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Oct 1 11:57:19201713 // Update Count : 3 412 // Last Modified On : Tue Dec 5 21:56:35 2017 13 // Update Count : 38 14 14 // 15 15 … … 26 26 } 27 27 28 void ^?{}( Format & fmt ) {29 if ( fmt.g != 0 || fmt.b != 0 ) sout | endl;28 void ^?{}( Format & fmt ) with( fmt ) { 29 if ( g != 0 || b != 0 ) sout | endl; 30 30 } 31 31 32 void main( Format & fmt ) {32 void main( Format & fmt ) with( fmt ) { 33 33 for ( ;; ) { // for as many characters 34 for ( fmt.g = 0; fmt.g < 5; fmt.g += 1 ) {// groups of 5 blocks35 for ( fmt.b = 0; fmt.b < 4; fmt.b += 1 ) {// blocks of 4 characters34 for ( g = 0; g < 5; g += 1 ) { // groups of 5 blocks 35 for ( b = 0; b < 4; b += 1 ) { // blocks of 4 characters 36 36 for ( ;; ) { // for newline characters 37 37 suspend(); 38 if ( fmt.ch != '\n' ) break;// ignore newline38 if ( ch != '\n' ) break; // ignore newline 39 39 } // for 40 sout | fmt.ch;// print character40 sout | ch; // print character 41 41 } // for 42 42 sout | " "; // print block separator -
src/tests/coroutine/prodcons.c
ra85e44c r16988e8 10 10 // Created On : Mon Sep 18 12:23:39 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Oct 30 23:06:05 201713 // Update Count : 4 212 // Last Modified On : Tue Dec 5 22:40:55 2017 13 // Update Count : 46 14 14 // 15 15 … … 24 24 25 25 coroutine Prod { 26 Cons * c;26 Cons * c; 27 27 int N, money, receipt; 28 28 }; 29 void main( Prod & prod ) {// starter ::main29 void main( Prod & prod ) with( prod ) { // starter ::main 30 30 // 1st resume starts here 31 for ( int i = 0; i < prod.N; i += 1 ) {31 for ( int i = 0; i < N; i += 1 ) { 32 32 int p1 = random( 100 ); 33 33 int p2 = random( 100 ); 34 34 sout | p1 | " " | p2 | endl; 35 int status = delivery( * prod.c, p1, p2 );36 sout | " $" | prod.money | endl;35 int status = delivery( *c, p1, p2 ); 36 sout | " $" | money | endl; 37 37 sout | status | endl; 38 prod.receipt += 1;38 receipt += 1; 39 39 } 40 stop( * prod.c );40 stop( *c ); 41 41 sout | "prod stops" | endl; 42 42 } … … 64 64 } 65 65 void ^?{}( Cons & cons ) {} 66 void main( Cons & cons ) {// starter prod66 void main( Cons & cons ) with( cons ) { // starter prod 67 67 // 1st resume starts here 68 68 int money = 1, receipt; 69 for ( ; ! cons.done; ) {70 sout | cons.p1 | " " | cons.p2 | endl;69 for ( ; ! done; ) { 70 sout | p1 | " " | p2 | endl; 71 71 sout | " $" | money | endl; 72 cons.status += 1;73 receipt = payment( * cons.p, money );72 status += 1; 73 receipt = payment( *p, money ); 74 74 sout | " #" | receipt | endl; 75 75 money += 1;
Note: See TracChangeset
for help on using the changeset viewer.