package com.thealgorithms.stacks; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; public class LargestRectangleTest { @Test void testLargestRectangleHistogramWithTypicalCases() { // Typical case with mixed heights int[] heights = {2, 1, 5, 6, 2, 3}; String expected = "10"; String result = LargestRectangle.largestRectangleHistogram(heights); assertEquals(expected, result); // Another typical case with increasing heights heights = new int[] {2, 4}; expected = "4"; result = LargestRectangle.largestRectangleHistogram(heights); assertEquals(expected, result); // Case with multiple bars of the same height heights = new int[] {4, 4, 4, 4}; expected = "16"; result = LargestRectangle.largestRectangleHistogram(heights); assertEquals(expected, result); } @Test void testLargestRectangleHistogramWithEdgeCases() { // Edge case with an empty array int[] heights = {}; String expected = "0"; String result = LargestRectangle.largestRectangleHistogram(heights); assertEquals(expected, result); // Edge case with a single bar heights = new int[] {5}; expected = "5"; result = LargestRectangle.largestRectangleHistogram(heights); assertEquals(expected, result); // Edge case with all bars of height 0 heights = new int[] {0, 0, 0}; expected = "0"; result = LargestRectangle.largestRectangleHistogram(heights); assertEquals(expected, result); } @Test void testLargestRectangleHistogramWithLargeInput() { // Large input case int[] heights = new int[10000]; for (int i = 0; i < heights.length; i++) { heights[i] = 1; } String expected = "10000"; String result = LargestRectangle.largestRectangleHistogram(heights); assertEquals(expected, result); } @Test void testLargestRectangleHistogramWithComplexCases() { // Complex case with a mix of heights int[] heights = {6, 2, 5, 4, 5, 1, 6}; String expected = "12"; String result = LargestRectangle.largestRectangleHistogram(heights); assertEquals(expected, result); // Case with a peak in the middle heights = new int[] {2, 1, 5, 6, 2, 3, 1}; expected = "10"; result = LargestRectangle.largestRectangleHistogram(heights); assertEquals(expected, result); } }