| toString() |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| addMaterials(List) |  | 0% |  | 0% | 3 | 3 | 5 | 5 | 1 | 1 |
| addComponents(List) |  | 0% |  | 0% | 3 | 3 | 5 | 5 | 1 | 1 |
| lambda$removeMaterial$0(Material, MaterialComponent) |  | 0% |  | 0% | 3 | 3 | 2 | 2 | 1 | 1 |
| validate() |   | 61% |   | 50% | 4 | 5 | 2 | 5 | 0 | 1 |
| removeMaterial(Material) |  | 0% |  | 0% | 2 | 2 | 3 | 3 | 1 | 1 |
| reset() |  | 0% | | n/a | 1 | 1 | 4 | 4 | 1 | 1 |
| getTotalDiscountedPrice() |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| addBundle(MaterialBundle) |  | 0% |  | 0% | 2 | 2 | 3 | 3 | 1 | 1 |
| hasComponents() |  | 0% |  | 0% | 2 | 2 | 1 | 1 | 1 | 1 |
| removeComponent(MaterialComponent) |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| getTotalPrice() |  | 0% | | n/a | 1 | 1 | 3 | 3 | 1 | 1 |
| setBundleDiscountPercent(double) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| getComponents() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| getTotalSavings() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| clearComponents() |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| getBundleDiscountPercent() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| setSmallDiscount() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| setMediumDiscount() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| setLargeDiscount() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| getComponentCount() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| getBundleName() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| getBundleDiscount() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| build() |  | 100% |  | 100% | 0 | 2 | 0 | 6 | 0 | 1 |
| addMaterial(Material) |  | 100% |   | 50% | 1 | 2 | 0 | 3 | 0 | 1 |
| MaterialBundleBuilder() |  | 100% | | n/a | 0 | 1 | 0 | 3 | 0 | 1 |
| setBundleDiscount(double) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| addComponent(MaterialComponent) |  | 100% |   | 50% | 1 | 2 | 0 | 3 | 0 | 1 |
| setBundleName(String) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |