Advertisement
Guest User

Untitled

a guest
Sep 24th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. #define end( result ) { fclose( output ); fclose( expected ); fclose(flog); return( result ); }
  7.  
  8.  
  9. enum name3{
  10. unlock = 0,
  11. lock = 1
  12. };
  13.  
  14. struct name2{
  15. name3 type;
  16. int index;
  17. };
  18.  
  19. struct name1{
  20. int cnt;
  21. name2 *steps;
  22. } seqs[ 2 ];
  23.  
  24. void readseq( FILE *f, int s ) {
  25. fscanf( f, " %d", &seqs[ s ].cnt );
  26. seqs[ s ].steps = new name2[seqs[s].cnt];//malloc( seqs[ s ].cnt * sizeof(name2) );
  27. for( int i = 0; i < seqs[ s ].cnt; ++ i ) {
  28. char type[4];
  29. fscanf( f, "%s %d", type, &seqs[ s ].steps[ i ].index );
  30. seqs[ s ].steps[ i ].index--;
  31. seqs[ s ].steps[ i ].type = ( type[2] == 'S' )?lock:unlock;
  32. }
  33. }
  34.  
  35. int main( int argc, char *argv[] ) {
  36. if( argc < 4 ) {
  37. fprintf( stderr, "check input output expected \n" );
  38. return 2;
  39. }
  40. FILE *output = fopen( argv[ 2 ], "rt" );
  41. FILE *expected = fopen( argv[ 3 ], "rt" );
  42. FILE* flog = fopen(argv[4],"w");
  43. int deadlock;
  44. fscanf( expected, "%d", &deadlock );
  45. if( deadlock ) {
  46. FILE *input = fopen( argv[ 1 ], "rt" );
  47. int run_cnt;
  48. fscanf( input, "%d", &run_cnt );
  49. char *runways = new char[run_cnt]; // malloc( run_cnt * sizeof *runways );
  50. memset( runways, 0, run_cnt * sizeof *runways );
  51. readseq( input, 0 );
  52. readseq( input, 1 );
  53. fclose( input );
  54. int pos[ 2 ] = { 0, 0 };
  55. char inp;
  56. while( ( inp = fgetc( output ) ) != EOF ) {
  57. int seqi;
  58. if( inp == '1' )
  59. seqi = 0;
  60. else if( inp == '2' )
  61. seqi = 1;
  62. else
  63. continue; /*Something else - like space, do not care */
  64. if( pos[ seqi ] >= seqs[ seqi ].cnt ) {
  65. fprintf( flog, "No more actions in the sequence\n" );
  66. end( 1 );
  67. }
  68. if( runways[ seqs[ seqi ].steps[ pos[ seqi ] ].index ] && seqs[ seqi ].steps[ pos[ seqi ] ].type ) {
  69. fprintf( flog, "That one is already locked (%d, %d)\n", pos[0]+1, pos[1]+1 );
  70. end( 1 );
  71. }
  72. runways[ seqs[ seqi ].steps[ pos[ seqi ] ].index ] = seqs[ seqi ].steps[ pos[ seqi ] ].type;
  73. pos[ seqi ] ++;
  74. }
  75. if( ( pos[ 0 ] == seqs[ 0 ].cnt ) || ( pos[ 1 ] == seqs[ 1 ].cnt ) ) {
  76. fprintf( flog, "Run out of sequence\n" );
  77. end( 1 );
  78. }
  79. if( ( seqs[ 0 ].steps[ pos[ 0 ] ].type ) && ( runways[ seqs[ 0 ].steps[ pos[ 0 ] ].index ] ) &&
  80. ( seqs[ 0 ].steps[ pos[ 0 ] ].type ) && ( runways[ seqs[ 0 ].steps[ pos[ 0 ] ].index ] ) ) {
  81. fprintf(flog, "OK");
  82. end( 0 );
  83. } else {
  84. fprintf( flog, "Not a deadlock\n" );
  85. end( 1 );
  86. }
  87. } else {
  88. char result[ 100 ];
  89. fgets( result, 100, output );
  90. if( strlen( result ) && ( result[ strlen( result ) - 1 ] == '\n' ) )
  91. result[ strlen( result ) - 1 ] = '\0';
  92. if( strcmp( "The performances will always finish.", result ) == 0 ) {
  93. fprintf(flog, "OK Impossible");
  94. end( 0 );
  95. } else {
  96. fprintf( flog, "False alarm\n" );
  97. end( 1 );
  98. }
  99. }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement