Skip to content

Commit b9d6ccb

Browse files
committed
Add tests
1 parent de0886b commit b9d6ccb

File tree

4 files changed

+816
-7
lines changed

4 files changed

+816
-7
lines changed

src/main/java/com/example/Main.java

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
package com.example;
2+
3+
import java.math.BigDecimal;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
import java.util.Map;
7+
8+
/**
9+
* Analyzer class that provides advanced warehouse operations.
10+
* Students must implement these methods for the advanced tests to pass.
11+
*/
12+
class WarehouseAnalyzer {
13+
private final Warehouse warehouse;
14+
15+
public WarehouseAnalyzer(Warehouse warehouse) {
16+
this.warehouse = warehouse;
17+
}
18+
19+
// Search and Filter Methods
20+
public List<Product> findProductsInPriceRange(BigDecimal minPrice, BigDecimal maxPrice) {
21+
// TODO: Implement - should include boundaries (min <= price <= max)
22+
throw new UnsupportedOperationException("Not implemented");
23+
}
24+
25+
public List<Perishable> findProductsExpiringWithinDays(int days) {
26+
// TODO: Implement - find products expiring within N days (not already expired)
27+
throw new UnsupportedOperationException("Not implemented");
28+
}
29+
30+
public List<Product> searchProductsByName(String searchTerm) {
31+
// TODO: Implement - case-insensitive partial match
32+
throw new UnsupportedOperationException("Not implemented");
33+
}
34+
35+
public List<Product> findProductsAbovePrice(BigDecimal price) {
36+
// TODO: Implement
37+
throw new UnsupportedOperationException("Not implemented");
38+
}
39+
40+
// Analytics Methods
41+
public Map<Category, BigDecimal> calculateWeightedAveragePriceByCategory() {
42+
// TODO: Implement - weighted average based on product weight
43+
// For FoodProducts: (sum of price * weight) / (sum of weights)
44+
// For other products: simple average
45+
throw new UnsupportedOperationException("Not implemented");
46+
}
47+
48+
public List<Product> findPriceOutliers(double standardDeviations) {
49+
// TODO: Implement - find products whose price is more than N standard deviations from mean
50+
throw new UnsupportedOperationException("Not implemented");
51+
}
52+
53+
public List<ShippingGroup> optimizeShippingGroups(BigDecimal maxWeightPerGroup) {
54+
// TODO: Implement - group products to minimize shipping costs
55+
// Use bin packing algorithm or similar optimization
56+
throw new UnsupportedOperationException("Not implemented");
57+
}
58+
59+
// Business Rules Methods
60+
public Map<Product, BigDecimal> calculateExpirationBasedDiscounts() {
61+
// TODO: Implement discount rules:
62+
// - Expires today: 50% discount
63+
// - Expires tomorrow: 30% discount
64+
// - Expires within 3 days: 15% discount
65+
// - Otherwise: no discount
66+
throw new UnsupportedOperationException("Not implemented");
67+
}
68+
69+
public InventoryValidation validateInventoryConstraints() {
70+
// TODO: Implement validation of business rules
71+
throw new UnsupportedOperationException("Not implemented");
72+
}
73+
74+
public InventoryStatistics getInventoryStatistics() {
75+
// TODO: Implement comprehensive statistics calculation
76+
throw new UnsupportedOperationException("Not implemented");
77+
}
78+
}
79+
80+
/**
81+
* Represents a group of products for shipping
82+
*/
83+
class ShippingGroup {
84+
private final List<Shippable> products;
85+
private final Double totalWeight;
86+
private final BigDecimal totalShippingCost;
87+
88+
public ShippingGroup(List<Shippable> products) {
89+
this.products = new ArrayList<>(products);
90+
this.totalWeight = products.stream()
91+
.map(Shippable::weight)
92+
.reduce(0.0, Double::sum);
93+
this.totalShippingCost = products.stream()
94+
.map(Shippable::calculateShippingCost)
95+
.reduce(BigDecimal.ZERO, BigDecimal::add);
96+
}
97+
98+
public List<Shippable> getProducts() { return new ArrayList<>(products); }
99+
public Double getTotalWeight() { return totalWeight; }
100+
public BigDecimal getTotalShippingCost() { return totalShippingCost; }
101+
}
102+
103+
/**
104+
* Validation result for inventory constraints
105+
*/
106+
class InventoryValidation {
107+
private final double highValuePercentage;
108+
private final int categoryDiversity;
109+
private final boolean highValueWarning;
110+
private final boolean minimumDiversity;
111+
112+
public InventoryValidation(double highValuePercentage, int categoryDiversity) {
113+
this.highValuePercentage = highValuePercentage;
114+
this.categoryDiversity = categoryDiversity;
115+
this.highValueWarning = highValuePercentage > 70.0;
116+
this.minimumDiversity = categoryDiversity >= 2;
117+
}
118+
119+
public double getHighValuePercentage() { return highValuePercentage; }
120+
public int getCategoryDiversity() { return categoryDiversity; }
121+
public boolean isHighValueWarning() { return highValueWarning; }
122+
public boolean hasMinimumDiversity() { return minimumDiversity; }
123+
}
124+
125+
/**
126+
* Comprehensive inventory statistics
127+
*/
128+
class InventoryStatistics {
129+
private final int totalProducts;
130+
private final BigDecimal totalValue;
131+
private final BigDecimal averagePrice;
132+
private final int expiredCount;
133+
private final int categoryCount;
134+
private final Product mostExpensiveProduct;
135+
private final Product cheapestProduct;
136+
137+
public InventoryStatistics(int totalProducts, BigDecimal totalValue, BigDecimal averagePrice,
138+
int expiredCount, int categoryCount,
139+
Product mostExpensiveProduct, Product cheapestProduct) {
140+
this.totalProducts = totalProducts;
141+
this.totalValue = totalValue;
142+
this.averagePrice = averagePrice;
143+
this.expiredCount = expiredCount;
144+
this.categoryCount = categoryCount;
145+
this.mostExpensiveProduct = mostExpensiveProduct;
146+
this.cheapestProduct = cheapestProduct;
147+
}
148+
149+
public int getTotalProducts() { return totalProducts; }
150+
public BigDecimal getTotalValue() { return totalValue; }
151+
public BigDecimal getAveragePrice() { return averagePrice; }
152+
public int getExpiredCount() { return expiredCount; }
153+
public int getCategoryCount() { return categoryCount; }
154+
public Product getMostExpensiveProduct() { return mostExpensiveProduct; }
155+
public Product getCheapestProduct() { return cheapestProduct; }
156+
}

0 commit comments

Comments
 (0)