File tree Expand file tree Collapse file tree 11 files changed +172
-14
lines changed Expand file tree Collapse file tree 11 files changed +172
-14
lines changed Original file line number Diff line number Diff line change 1+ CORE
2+ test.class
3+ ^VERIFICATION SUCCESSFUL$
4+ --
5+ ^warning: ignoring
6+ --
7+ This test verifies that catches are executed in the correct order
8+ 
Original file line number Diff line number Diff line change 1+ class  A  extends  RuntimeException  {}
2+ class  B  extends  A  {}
3+ 
4+ // This test verifies that catches are executed in the correct order 
5+ public  class  test  {
6+   public  static  void  main  (String  args []) {
7+     int  i  = 0 ;
8+     try  {
9+       try  {
10+         throw  new  A ();
11+       }
12+       catch (A  exc ) {
13+         i ++;
14+         throw  new  B ();
15+       }
16+       finally 
17+       {
18+         // Make sure A threw into the catch 
19+         assert (i ==1 );
20+         i ++;
21+       }
22+     }
23+     catch (B  exc ) {
24+       // Make sure finally was executed 
25+       assert (i ==2 );
26+       i ++;
27+     }
28+     // Make sure B was rethrown by finally 
29+     assert (i ==3 );
30+   }
31+ }
Original file line number Diff line number Diff line change 1+ CORE
2+ test.class
3+ VERIFICATION SUCCESSFUL
4+ --
5+ ^warning: ignoring
6+ --
7+ Tests embedded try-catch-finally to ensure the catching order is correct
Original file line number Diff line number Diff line change 1+ import  org .cprover .CProver ;
2+ class  A  extends  RuntimeException  {}
3+ class  B  extends  A  {}
4+ 
5+ // This test verifies that catches are executed in the correct order 
6+ public  class  test  {
7+   public  static  void  main  (String  args []) {
8+     int  i  = 0 ;
9+     int  j  = 0 ;
10+     try  {
11+       try  {
12+         try  {
13+           if  (CProver .nondetBoolean ()) throw  new  A ();
14+           else  throw  new  B ();
15+         }
16+         catch (B  exc ) {
17+           i ++;
18+         }
19+         catch (A  exc ) {
20+           i ++;
21+           throw  new  B ();
22+         }
23+         finally 
24+         {
25+           // Make sure A threw into the catch 
26+           assert (i ==1 );
27+           i ++;
28+         }
29+         assert (i ==2 );
30+         // Account for the rethrow in finally 
31+         j ++;
32+       }
33+       catch (B  exc ) {
34+         // Make sure finally was executed 
35+         assert (i ==2 );
36+         i ++;
37+         throw  new  B ();
38+       }
39+       finally  
40+       {
41+         assert  ((i +j ) == 3 );
42+       }
43+       // Account for the rethrow in finally 
44+       j ++;
45+     }
46+     catch (B  exc )
47+     {
48+       i ++;
49+     }
50+     // Make sure B was rethrown by finally when A was thrown 
51+     // or if B was thrown there was no rethrow 
52+     assert (i +j  == 4 );
53+   }
54+ }
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments