Changeset 55e17d2 in rtems-central


Ignore:
Timestamp:
Jul 27, 2020, 12:54:13 PM (2 weeks ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
7617fcb
Parents:
244b277
git-author:
Sebastian Huber <sebastian.huber@…> (07/27/20 12:54:13)
git-committer:
Sebastian Huber <sebastian.huber@…> (07/27/20 13:29:32)
Message:

validation: Add ability to skip action transitions

Files:
1 added
9 edited

Legend:

Unmodified
Added
Removed
  • rtemsspec/tests/spec-validation/action2.yml

    r244b277 r55e17d2  
    6767    text: |
    6868      Pre B Y.
     69  - name: Z
     70    test-code: |
     71      /* Pre B Z */
     72    text: |
     73      Pre B Z.
    6974  test-epilogue: |
    7075    /* Pre B epilogue. */
     
    7277    /* Pre B prologue. */
    7378requirement-type: functional
     79skip-reasons:
     80  SkipReason: |
     81    Skip it due to some reason.
    7482test-action: |
    7583  /* Action */
     
    149157    B:
    150158    - Y
     159- enabled-by: true
     160  post-conditions:
     161    A: X
     162    B: X
     163  pre-conditions:
     164    A:
     165    - X
     166    B:
     167    - Z
     168- enabled-by: true
     169  post-conditions: SkipReason
     170  pre-conditions:
     171    A:
     172    - Y
     173    B:
     174    - Z
    151175rationale: null
    152176references: []
  • rtemsspec/tests/spec-validation/directive.yml

    r244b277 r55e17d2  
    153153  test-prologue: null
    154154requirement-type: functional
     155skip-reasons: {}
    155156test-action: |
    156157  ctx->status = rtems_task_ident( ctx->name, ctx->node, ctx->id );
  • rtemsspec/tests/test_validation.py

    r244b277 r55e17d2  
    636636
    637637static const struct {
     638  uint8_t Skip : 1;
    638639  uint8_t Pre_Name_NA : 1;
    639640  uint8_t Pre_Node_NA : 1;
     
    641642} ClassicTaskIdentification_TransitionInfo[] = {
    642643  {
    643     0, 0, 0
    644   }, {
    645     0, 0, 0
    646   }, {
    647     0, 0, 0
    648   }, {
    649     0, 0, 0
    650   }, {
    651     0, 0, 0
    652   }, {
    653     0, 0, 0
    654   }, {
    655     0, 0, 0
    656   }, {
    657     0, 0, 0
    658   }, {
    659     0, 0, 0
    660   }, {
    661     0, 0, 0
    662   }, {
    663     0, 0, 0
    664   }, {
    665     0, 0, 0
    666   }, {
    667     0, 0, 0
    668   }, {
    669     0, 0, 0
    670   }, {
    671     0, 0, 0
    672   }, {
    673     0, 0, 0
    674   }, {
    675     0, 0, 0
    676   }, {
    677     0, 0, 0
    678   }, {
    679     0, 0, 0
    680   }, {
    681     0, 0, 0
    682   }, {
    683     0, 0, 0
    684   }, {
    685     0, 0, 0
    686   }, {
    687     0, 0, 0
    688   }, {
    689     0, 0, 0
    690   }, {
    691     0, 0, 0
    692   }, {
    693     0, 0, 0
    694   }, {
    695     0, 0, 0
     644    0, 0, 0, 0
     645  }, {
     646    0, 0, 0, 0
     647  }, {
     648    0, 0, 0, 0
     649  }, {
     650    0, 0, 0, 0
     651  }, {
     652    0, 0, 0, 0
     653  }, {
     654    0, 0, 0, 0
     655  }, {
     656    0, 0, 0, 0
     657  }, {
     658    0, 0, 0, 0
     659  }, {
     660    0, 0, 0, 0
     661  }, {
     662    0, 0, 0, 0
     663  }, {
     664    0, 0, 0, 0
     665  }, {
     666    0, 0, 0, 0
     667  }, {
     668    0, 0, 0, 0
     669  }, {
     670    0, 0, 0, 0
     671  }, {
     672    0, 0, 0, 0
     673  }, {
     674    0, 0, 0, 0
     675  }, {
     676    0, 0, 0, 0
     677  }, {
     678    0, 0, 0, 0
     679  }, {
     680    0, 0, 0, 0
     681  }, {
     682    0, 0, 0, 0
     683  }, {
     684    0, 0, 0, 0
     685  }, {
     686    0, 0, 0, 0
     687  }, {
     688    0, 0, 0, 0
     689  }, {
     690    0, 0, 0, 0
     691  }, {
     692    0, 0, 0, 0
     693  }, {
     694    0, 0, 0, 0
     695  }, {
     696    0, 0, 0, 0
    696697  }, {
    697698#if defined(RTEMS_MULTIPROCESSING)
    698     0, 0, 0
     699    0, 0, 0, 0
    699700#else
    700     0, 0, 0
     701    0, 0, 0, 0
    701702#endif
    702703  }, {
    703     0, 0, 0
    704   }, {
    705     0, 0, 0
    706   }, {
    707     0, 0, 0
    708   }, {
    709     0, 0, 0
    710   }, {
    711     0, 0, 0
     704    0, 0, 0, 0
     705  }, {
     706    0, 0, 0, 0
     707  }, {
     708    0, 0, 0, 0
     709  }, {
     710    0, 0, 0, 0
     711  }, {
     712    0, 0, 0, 0
    712713  }, {
    713714#if defined(RTEMS_MULTIPROCESSING)
    714     0, 0, 0
     715    0, 0, 0, 0
    715716#else
    716     0, 0, 0
     717    0, 0, 0, 0
    717718#endif
    718719  }, {
    719     0, 0, 0
    720   }, {
    721     0, 0, 0
     720    0, 0, 0, 0
     721  }, {
     722    0, 0, 0, 0
    722723  }
    723724};
     
    773774          ctx->pcs[ 2 ] = ClassicTaskIdentification_Pre_Id_NA;
    774775          index += ( ClassicTaskIdentification_Pre_Id_NA - 1 );
     776        }
     777
     778        if ( ClassicTaskIdentification_TransitionInfo[ index ].Skip ) {
     779          ++index;
     780          continue;
    775781        }
    776782
     
    10501056  Action2_Pre_B_X,
    10511057  Action2_Pre_B_Y,
     1058  Action2_Pre_B_Z,
    10521059  Action2_Pre_B_NA
    10531060} Action2_Pre_B;
     
    11941201static const char * const Action2_PreDesc_B[] = {
    11951202  "X",
    1196   "Y"
     1203  "Y",
     1204  "Z"
    11971205};
    11981206
     
    12391247    case Action2_Pre_B_Y: {
    12401248      /* Pre B Y */
     1249      break;
     1250    }
     1251
     1252    case Action2_Pre_B_Z: {
     1253      /* Pre B Z */
    12411254      break;
    12421255    }
     
    13591372  }, {
    13601373    Action2_Post_A_X,
     1374    Action2_Post_B_X
     1375  }, {
     1376    Action2_Post_A_X,
    13611377    Action2_Post_B_Y
    13621378  }, {
    13631379    Action2_Post_A_Y,
    13641380    Action2_Post_B_X
     1381  }, {
     1382    Action2_Post_A_Y,
     1383    Action2_Post_B_Y
    13651384  }
    13661385};
    13671386
    13681387static const struct {
     1388  uint8_t Skip : 1;
    13691389  uint8_t Pre_A_NA : 1;
    13701390  uint8_t Pre_B_NA : 1;
    13711391} Action2_TransitionInfo[] = {
    13721392  {
    1373     0, 0
    1374   }, {
    1375     1, 0
    1376   }, {
    1377     0, 0
    1378   }, {
    1379     1, 0
     1393    0, 0, 0
     1394  }, {
     1395    0, 1, 0
     1396  }, {
     1397    0, 0, 0
     1398  }, {
     1399    0, 0, 0
     1400  }, {
     1401    0, 1, 0
     1402  }, {
     1403    1, 0, 0
    13801404  }
    13811405};
     
    14151439        ctx->pcs[ 1 ] = Action2_Pre_B_NA;
    14161440        index += ( Action2_Pre_B_NA - 1 );
     1441      }
     1442
     1443      if ( Action2_TransitionInfo[ index ].Skip ) {
     1444        ++index;
     1445        continue;
    14171446      }
    14181447
  • rtemsspec/validation.py

    r244b277 r55e17d2  
    399399                          ]  # type: _TransitionMap
    400400        for transition in self["transition-map"]:
    401             post = tuple(self._post_state_to_index[index][
    402                 transition["post-conditions"][self._post_index_to_name[index]]]
    403                          for index in range(self._post_condition_count))
    404             self._add_transitions(0, 0, transition, transition_map, [], post)
     401            if isinstance(transition["post-conditions"], dict):
     402                info = ["0"]
     403                post_cond = tuple(
     404                    self._post_state_to_index[index][
     405                        transition["post-conditions"][
     406                            self._post_index_to_name[index]]]
     407                    for index in range(self._post_condition_count))
     408            else:
     409                info = ["1"]
     410                post_cond = tuple(
     411                    len(self._post_state_to_index[index]) - 1
     412                    for index in range(self._post_condition_count))
     413            self._add_transitions(0, 0, transition, transition_map, info,
     414                                  post_cond)
    405415        return transition_map
    406416
     
    449459                info_elements.append("\n".join(info_enumerators))
    450460        content.append(["\n  }, {\n".join(map_elements), "  }", "};"])
    451         pre_bits = 2**max(math.ceil(math.log2(self._pre_condition_count)), 3)
     461        pre_bits = 2**max(math.ceil(math.log2(self._pre_condition_count + 1)),
     462                          3)
    452463        content.add("static const struct {")
    453464        with content.indent():
     465            content.append(f"uint{pre_bits}_t Skip : 1;")
    454466            for condition in self["pre-conditions"]:
    455467                content.append(
     
    459471
    460472    def _add_action(self, content: CContent) -> None:
     473        with content.condition(f"{self.ident}_TransitionInfo[ index ].Skip"):
     474            content.append(["++index;", "continue;"])
    461475        content.add_blank_line()
    462476        for index, enum in enumerate(self._pre_index_to_enum):
  • spec/req/rtems/ident-local.yml

    r244b277 r55e17d2  
    8484  test-prologue: null
    8585requirement-type: functional
     86skip-reasons: {}
    8687test-action: |
    8788  ctx->status = ( *ctx->action )( ctx->name, ctx->id );
  • spec/req/rtems/ident.yml

    r244b277 r55e17d2  
    137137  test-prologue: null
    138138requirement-type: functional
     139skip-reasons: {}
    139140test-action: |
    140141  ctx->status = ( *ctx->action )( ctx->name, ctx->node, ctx->id );
  • spec/req/rtems/tasks/ident.yml

    r244b277 r55e17d2  
    4444  test-prologue: null
    4545requirement-type: functional
     46skip-reasons: {}
    4647test-action: |
    4748  if ( ctx->id != NULL ) {
  • spec/spec/requirement-action-transition-post.yml

    r244b277 r55e17d2  
    2323      value-spec-type: requirement-action-name
    2424    mandatory-attributes: all
     25  str:
     26    assert:
     27      and:
     28      - re: ^[A-Z][a-zA-Z0-9]+$
     29      - not:
     30          eq: NA
     31    description: |
     32      It shall be the name of a skip reason.  If a skip reason is given instead
     33      of a listing of post-condition states, then this transition is skipped
     34      and no test code runs for this transition.
    2535spec-name: Action Requirement Transition Post-Conditions
    2636spec-type: requirement-action-transition-post
  • spec/spec/requirement-action.yml

    r244b277 r55e17d2  
    8282    test-prologue: null
    8383  requirement-type: functional
     84  skip-reasons: {}
    8485  test-action: |
    8586    /* Call the function of the action */
     
    138139        description: null
    139140        spec-type: requirement-action-condition-list
     141      skip-reasons:
     142        description: null
     143        spec-type: requirement-action-skip-reasons
    140144      test-action:
    141145        description: |
Note: See TracChangeset for help on using the changeset viewer.