ps-parser 1.0.1

The Powershell Parser
Documentation
# ========================================
# PowerShell Parser Stress Test
# Testing edge cases, error conditions, and complex scenarios
# ========================================

# Test 1: Edge Cases with Numbers
$zero = 0
$negative = -123
$large_int = 999999999
$small_float = 0.000001
$scientific = 1.23e-4

# Test 2: Edge Cases with Strings
$empty_string = ""
$single_char = "a"
$with_quotes = "He said ""Hello"""
$with_backslash = "Path\to\file"
$unicode = "Café"

# Test 3: Division by Zero (should trigger error)
$div_by_zero = 10 / 0
$div_zero_status = $?

# Test 4: Type Conversion Errors
$invalid_int = [int]"not_a_number"
$invalid_conversion_status = $?

$valid_after_error = [int]"123"
$valid_status = $?

# Test 5: Deeply Nested Expressions
$nested = ((((1 + 2) * 3) + 4) * 5) + 6

# Test 6: Mixed Type Operations
$mixed1 = 5 + "10"    # Should convert string to number
$mixed2 = "Hello" + 123  # Should convert number to string
$mixed3 = $true + 1      # Should work
$mixed4 = $null + 5      # Should work

# Test 7: Array Access Edge Cases
$arr = @(1, 2, 3)
$valid_index = $arr[0]
$last_index = $arr[2]
# $invalid_index = $arr[10]  # Would be out of bounds

# Test 8: Complex Boolean Logic
$complex_bool = (($true -and $false) -or ($true -xor $false)) -and (-not $false)

# Test 9: String with Special Characters
$special_chars = "!@#$%^&*()_+-={}[]|;:,.<>?"
$newlines = "Line1`nLine2`nLine3"
$tabs = "Col1`tCol2`tCol3"

# Test 10: Large Arrays
$large_array = 1..1000
$array_operation = $large_array[999]

# Test 11: Chained Operations
$chained = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10

# Test 12: Precedence Testing
$precedence1 = 2 + 3 * 4      # Should be 14, not 20
$precedence2 = (2 + 3) * 4    # Should be 20
$precedence3 = 2 * 3 + 4      # Should be 10
$precedence4 = 2 * (3 + 4)    # Should be 14

# Test 13: Error Recovery in Sequences
$seq1 = 1 + 1; $seq_error = 2 + "bad"; $seq2 = 3 + 3; $recovery_status = $?

# Test 14: Comparison Edge Cases
$str_num_eq = "5" -eq 5       # String vs Number comparison
$case_sensitive = "Hello" -ceq "hello"
$case_insensitive = "Hello" -ieq "hello"

# Test 15: Null Comparisons
$null_eq_null = $null -eq $null
$null_eq_zero = $null -eq 0
$null_eq_empty = $null -eq ""
$null_eq_false = $null -eq $false

# Test 16: Boolean Conversions
$bool_from_int = [bool]0      # Should be false
$bool_from_int2 = [bool]1     # Should be true
$bool_from_int3 = [bool]-1    # Should be true
$bool_from_string = [bool]""  # Should be false
$bool_from_string2 = [bool]"hello"  # Should be true

# Test 17: Arithmetic with Different Types
$int_float = 5 + 3.14
$float_int = 3.14 + 5
$bool_arithmetic = $true + $false + $true  # Should be 2

# Test 18: String Repetition Edge Cases
$repeat_zero = "test" * 0     # Should be empty
$repeat_one = "test" * 1      # Should be "test"
$repeat_negative = "test" * -1  # Should handle gracefully

# Test 19: Modulo with Different Types
$mod_float = 7.5 % 2.5
$mod_negative = -7 % 3
$mod_by_negative = 7 % -3

# Test 20: Bitwise with Edge Cases
$bitwise_zero = 0 -band 5
$bitwise_negative = -1 -band 5
$shift_large = 1 -shl 31

# Test 21: Multiple Assignment Operators
$multi = 10
$multi += 5    # Should be 15
$multi -= 3    # Should be 12  
$multi *= 2    # Should be 24
$multi /= 4    # Should be 6
$multi %= 4    # Should be 2

# Test 22: Complex String Operations
$str_complex = ("Hello" + " " + "World") * 2
$str_compare = ("Hello" -eq "Hello") -and ("World" -ne "world")

# Test 23: Environment Variable Edge Cases
$env_exists = $env:programfiles
$env_maybe_not_exists = $env:NONEXISTENT_VAR_12345
$env_empty = $env:EMPTY_VAR

# Test 24: Range Edge Cases
$range_same = 5..5           # Single element range
$range_reverse = 10..1       # Reverse range
$range_negative = -5..-1     # Negative range

# Test 25: Function Edge Cases
function Test-Empty() {
    # Empty function
}

function Test-OneParam($p) {
    return $p * 2
}

function Test-MultiParam($a, $b, $c) {
    return $a + $b + $c
}

$empty_result = Test-Empty
$one_param_result = Test-OneParam 5
$multi_param_result = Test-MultiParam 1 2 3

# Test 26: Nested Function Calls
function Inner($x) { return $x + 1 }
function Outer($y) { return Inner($y * 2) }
$nested_func_result = Outer 5
$nested_func_result

# Test 27: Variable Scoping in Blocks
$global_var = "global"
if ($true) {
    $block_var = "block"
    $scope_test = $global_var + $block_var
}
$scope_test
# Test 28: Switch with Edge Cases
$switch_var = $null
switch ($switch_var) {
    $null { $switch_null_result = "matched null" }
    "" { $switch_empty_result = "matched empty" }
    0 { $switch_zero_result = "matched zero" }
    default { $switch_default_result = "default case" }
}
$switch_null_result

# Test 29: Loop Edge Cases
for ($i = 10; $i -gt 10; $i--) {
    $never_executed = "should not run"
}

$countdown = 3
while ($countdown -le 0) {
    $while_never = "should not run"
}

foreach ($item in @()) {
    $foreach_empty = "should not run"
}

# Test 30: Error Cascade Testing
$cascade1 = 1 + 1           # Good
$cascade_error = 2 + "bad"  # Error
$cascade2 = 3 + 3           # Good after error
$cascade3 = $?              # Should reflect last operation status

# Test 31: Memory/Performance Test
$perf_array = 1..10000
$perf_sum = 0
for ($i = 0; $i -lt $perf_array.Length; $i++) {
    $perf_sum += $perf_array[$i]
}

# Test 32: Complex Conditional Logic
$complex_if = if (($true -and $false) -or ($true -xor $false)) { "complex true" } else { "complex false" }
$complex_if
# Test 33: String Escape Sequences
$escaped = "Quote: `" Newline: `n Tab: `t Backslash: ``"

# Test 34: Final Status Check
$final_good_operation = 100 + 200
$final_status = $?