Giter Site home page Giter Site logo

williaml33moore / bathtub Goto Github PK

View Code? Open in Web Editor NEW

This project forked from everactive/bathtub

2.0 2.0 0.0 7.63 MB

BDD Gherkin implementation in native SystemVerilog, based on UVM.

Home Page: https://bathtubBDD.dev

License: MIT License

Fortran 0.10% SystemVerilog 99.90%
asic asic-design asic-verification bdd bdd-framework bdd-specs design-verification fpga rtl rtl-design soc-design soc-verification systemverilog uvm uvm-verification verilog verilog-hdl

bathtub's People

Contributors

carlospsikick avatar everactivegit avatar williaml33moore avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

bathtub's Issues

Hide private files in docs from Jekyll

In the pages branch, the docs directory contains some files that should not be published to the web page.
Exclude them.

  • Gemfile
  • Gemfile.lock
  • README.md

Refactor Gherkin parser into its own class which implements the Visitor interface

Parser

Refactor Gherkin parser into its own class which implements the Visitor interface.Big change.

[] In progress

  • Implement tasks:
  • parse_feature_file(string filename)
  • parse_feature_string(string feature)
  • parse_feature_lines(ref string lines[])
  • parse_feature_line_stream(mbox stream)
  • parse_step_string(string step)
  • parse_step_lines(ref string lines[])
  • parse_step_line_stream(mbox stream)

Demote Fatal Errors

Don't have Bathtub throw fatal errors when steps don't exist. Instead throw normal errors, keep running. This is useful for interactive runs that might just require editing the feature file and rerunning.

Change Monos Category references to Tag

Theme has a bug where the Category features should really be Tags. The screenshots in the original jekyll-theme-monos repo show that the navbar section used to be called "Tags."

The problem is that a post can only have one category, and an array of n categories is supposed to be treated as a hierarchy with depth n.

The fix is to rename everything "category," including file names, to "tag."

Gherkin Interfaces

Create interface classes for all Gherkin classes. Replace aggregates with uvm_pool objects. Supply accessors for their elements.Decided not to use uvm_pool. Native queues are fine.

[] To-do

Design an effective Home page

Ideas:

  • Put a heading above blog posts
  • A few useful bullets
  • Focus on target viewers
  • Direct to next steps, call to action
  • "Getting started" link
  • "Docs" link

Gherkin Immutablility

Make Gherkin objects immutable.Each has a new() constructor which constructs an empty element.But each also has a create_new() constructor with a complete set of arguments which are sufficient to create a new fully populated object with deep copies of all the arguments.

Accessors in the interfaces are getters only, no setters.

All members are protected.Gherkin parser uses new() to construct an empty element sufficient to call accept() on. All it's used for is visitor pattern double dispatch, then it's discarded. Parser collects element sub-elements recursively, then finally calls create_new().

Consider having getters for aggregates that return uvm_queue and dynamic arrays.e.g. function uvm_queue#(step) get_steps_as_queue() and function void get_steps_as_array(ref step[]);A wrinkle is that visit tasks don't return values. We can simulate returning values by supplying a uvm_queue for every function and use it as a stack. Each visitor function will push its return object onto its stack and the calling function can retrieve it. A bit Byzantine but it should work. We appear to be stretching the Visitor pattern to its limit. Got this to work with the return value stack but ultimately resolved this issue by changing parser so that it no longer implements Visitor pattern.

[] To-do

Visitor Functions

Gherkin visitor methods are currently tasks. Consider adding a parallel set of visitor functions.

  • task visit()
  • task accept()
  • function void fn_visit() or visit_fn()
  • function void fn_accept() or accept_fn()

Gherkin printer could probably use the functions.

[] Considering

Reorganize directory structure

  1. In bathtub repo main branch, commit logo from the pages branch so it's available in the main branch for the README.
  2. In bathtub main branch, rename unit test directory to test.
  3. In bathtub main branch, add scripts directory for future use.
  4. Merge main branch changes into pages.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.