MegaBites-AI/Windows-powershell
0372
1# Copyright (c) Microsoft Corporation.2# Licensed under the MIT License.3Describe "Range Operator" -Tags CI {4 Context "Range integer operations" {5 It "Range operator generates arrays of integers" {6 $Range = 5..87 $Range.count | Should -Be 48 $Range[0] | Should -BeOfType int9 $Range[1] | Should -BeOfType int10 $Range[2] | Should -BeOfType int11 $Range[3] | Should -BeOfType int12 13 $Range[0] | Should -Be 514 $Range[1] | Should -Be 615 $Range[2] | Should -Be 716 $Range[3] | Should -Be 817 }18 19 It "Range operator accepts negative integer values" {20 $Range = -8..-521 $Range.count | Should -Be 422 $Range[0] | Should -Be -823 $Range[1] | Should -Be -724 $Range[2] | Should -Be -625 $Range[3] | Should -Be -526 }27 28 It "Range operator support single-item sequences" {29 $Range = 0..030 $Range.count | Should -Be 131 $Range[0] | Should -BeOfType int32 $Range[0] | Should -Be 033 }34 35 It "Range operator works in descending order" {36 $Range = 4..337 $Range.count | Should -Be 238 $Range[0] | Should -Be 439 $Range[1] | Should -Be 340 }41 42 It "Range operator works for sequences of both negative and positive numbers" {43 $Range = -2..244 $Range.count | Should -Be 545 $Range[0] | Should -Be -246 $Range[1] | Should -Be -147 $Range[2] | Should -Be 048 $Range[3] | Should -Be 149 $Range[4] | Should -Be 250 }51 52 It "Range operator enumerator works" {53 $Range = -2..2 | ForEach-Object { $_ }54 $Range.count | Should -Be 555 $Range[0] | Should -Be -256 $Range[1] | Should -Be -157 $Range[2] | Should -Be 058 $Range[3] | Should -Be 159 $Range[4] | Should -Be 260 }61 62 It "Range operator works with variables" {63 $var1 = -164 $var2 = 165 $Range = $var1..$var266 $Range.count | Should -Be 367 $Range[0] | Should -Be -168 $Range[1] | Should -Be 069 $Range[2] | Should -Be 170 71 $Range = [int]$var2..[int]$var172 $Range.count | Should -Be 373 $Range[0] | Should -Be 174 $Range[1] | Should -Be 075 $Range[2] | Should -Be -176 77 $Range = $var1..$var2 | ForEach-Object { $_ }78 $Range.count | Should -Be 379 $Range[0] | Should -Be -180 $Range[1] | Should -Be 081 $Range[2] | Should -Be 182 83 $Range = [int]$var2..[int]$var1 | ForEach-Object { $_ }84 $Range.count | Should -Be 385 $Range[0] | Should -Be 186 $Range[1] | Should -Be 087 $Range[2] | Should -Be -188 }89 }90 91 Context "Character expansion" {92 It "Range operator generates an array of [char] from single-character operands" {93 $CharRange = 'A'..'E'94 $CharRange.count | Should -Be 595 $CharRange[0] | Should -BeOfType char96 $CharRange[1] | Should -BeOfType char97 $CharRange[2] | Should -BeOfType char98 $CharRange[3] | Should -BeOfType char99 $CharRange[4] | Should -BeOfType char100 }101 102 It "Range operator enumerator generates an array of [string] from single-character operands" {103 $CharRange = 'A'..'E' | ForEach-Object { $_ }104 $CharRange.count | Should -Be 5105 $CharRange[0] | Should -BeOfType char106 $CharRange[1] | Should -BeOfType char107 $CharRange[2] | Should -BeOfType char108 $CharRange[3] | Should -BeOfType char109 $CharRange[4] | Should -BeOfType char110 }111 112 It "Range operator works in ascending and descending order" {113 $CharRange = 'a'..'c'114 $CharRange.count | Should -Be 3115 $CharRange[0] | Should -BeExactly ([char]'a')116 $CharRange[1] | Should -BeExactly ([char]'b')117 $CharRange[2] | Should -BeExactly ([char]'c')118 119 $CharRange = 'C'..'A'120 $CharRange.count | Should -Be 3121 $CharRange[0] | Should -BeExactly ([char]'C')122 $CharRange[1] | Should -BeExactly ([char]'B')123 $CharRange[2] | Should -BeExactly ([char]'A')124 }125 126 It "Range operator works in ascending and descending order with [char] cast" {127 $CharRange = [char]'a'..[char]'c'128 $CharRange.count | Should -Be 3129 $CharRange[0] | Should -BeExactly ([char]'a')130 $CharRange[1] | Should -BeExactly ([char]'b')131 $CharRange[2] | Should -BeExactly ([char]'c')132 133 $CharRange = [char]"a".."c"134 $CharRange.count | Should -Be 3135 $CharRange[0] | Should -BeExactly ([char]'a')136 $CharRange[1] | Should -BeExactly ([char]'b')137 $CharRange[2] | Should -BeExactly ([char]'c')138 139 $CharRange = "a"..[char]"c"140 $CharRange.count | Should -Be 3141 $CharRange[0] | Should -BeExactly ([char]'a')142 $CharRange[1] | Should -BeExactly ([char]'b')143 $CharRange[2] | Should -BeExactly ([char]'c')144 145 # The same works in reverse order.146 $CharRange = [char]'C'..[char]'A'147 $CharRange.count | Should -Be 3148 $CharRange[0] | Should -BeExactly ([char]'C')149 $CharRange[1] | Should -BeExactly ([char]'B')150 $CharRange[2] | Should -BeExactly ([char]'A')151 152 $CharRange = [char]"C".."A"153 $CharRange.count | Should -Be 3154 $CharRange[0] | Should -BeExactly ([char]'C')155 $CharRange[1] | Should -BeExactly ([char]'B')156 $CharRange[2] | Should -BeExactly ([char]'A')157 158 $CharRange = "C"..[char]"A"159 $CharRange.count | Should -Be 3160 $CharRange[0] | Should -BeExactly ([char]'C')161 $CharRange[1] | Should -BeExactly ([char]'B')162 $CharRange[2] | Should -BeExactly ([char]'A')163 }164 165 It "Range operator enumerator works in ascending and descending order" {166 $CharRange = 'a'..'c' | ForEach-Object { $_ }167 $CharRange.count | Should -Be 3168 $CharRange[0] | Should -BeExactly "a"169 $CharRange[1] | Should -BeExactly "b"170 $CharRange[2] | Should -BeExactly "c"171 172 $CharRange = 'C'..'A' | ForEach-Object { $_ }173 $CharRange.count | Should -Be 3174 $CharRange[0] | Should -BeExactly "C"175 $CharRange[1] | Should -BeExactly "B"176 $CharRange[2] | Should -BeExactly "A"177 }178 179 It "Range operator enumerator works in ascending and descending order with [char] cast" {180 $CharRange = [char]'a'..[char]'c' | ForEach-Object { $_ }181 $CharRange.count | Should -Be 3182 $CharRange[0] | Should -BeExactly "a"183 $CharRange[1] | Should -BeExactly "b"184 $CharRange[2] | Should -BeExactly "c"185 186 $CharRange = [char]'C'..[char]'A' | ForEach-Object { $_ }187 $CharRange.count | Should -Be 3188 $CharRange[0] | Should -BeExactly "C"189 $CharRange[1] | Should -BeExactly "B"190 $CharRange[2] | Should -BeExactly "A"191 }192 193 It "Range operator works with variables" {194 $var1 = 'a'195 $var2 = 'c'196 $CharRange = $var1..$var2197 $CharRange.count | Should -Be 3198 $CharRange[0] | Should -BeExactly "a"199 $CharRange[1] | Should -BeExactly "b"200 $CharRange[2] | Should -BeExactly "c"201 202 $CharRange = [char]$var2..[char]$var1203 $CharRange.count | Should -Be 3204 $CharRange[0] | Should -BeExactly "c"205 $CharRange[1] | Should -BeExactly "b"206 $CharRange[2] | Should -BeExactly "a"207 208 $CharRange = $var1..$var2 | ForEach-Object { $_ }209 $CharRange.count | Should -Be 3210 $CharRange[0] | Should -BeExactly "a"211 $CharRange[1] | Should -BeExactly "b"212 $CharRange[2] | Should -BeExactly "c"213 214 $CharRange = [char]$var2..[char]$var1 | ForEach-Object { $_ }215 $CharRange.count | Should -Be 3216 $CharRange[0] | Should -BeExactly "c"217 $CharRange[1] | Should -BeExactly "b"218 $CharRange[2] | Should -BeExactly "a"219 }220 221 It "Range operator works with 16-bit unicode characters" {222 $UnicodeRange = "`u{0110}".."`u{0114}"223 $UnicodeRange.count | Should -Be 5224 $UnicodeRange[0] | Should -Be "`u{0110}"[0]225 $UnicodeRange[1] | Should -Be "`u{0111}"[0]226 $UnicodeRange[2] | Should -Be "`u{0112}"[0]227 $UnicodeRange[3] | Should -Be "`u{0113}"[0]228 $UnicodeRange[4] | Should -Be "`u{0114}"[0]229 $UnicodeRange.Where({$_ -is [char]}).count | Should -Be 5230 }231 232 It "Range operator with special ranges" {233 $SpecRange = "0".."9"234 $SpecRange.count | Should -Be 10235 $SpecRange.Where({$_ -is [int]}).count | Should -Be 10236 237 $SpecRange = '0'..'9'238 $SpecRange.count | Should -Be 10239 $SpecRange.Where({$_ -is [int]}).count | Should -Be 10240 241 $SpecRange = [char]'0'..[char]'9'242 $SpecRange.count | Should -Be 10243 $SpecRange.Where({$_ -is [char]}).count | Should -Be 10244 }245 }246 247 Context "Range operator operand types" {248 It "Range operator works on [decimal]" {249 $Range = 1.1d..3.9d250 $Range.count | Should -Be 4251 $Range[0] | Should -Be 1252 $Range[1] | Should -Be 2253 $Range[2] | Should -Be 3254 $Range[3] | Should -Be 4255 $Range.Where({$_ -is [int]}).count | Should -Be 4256 }257 }258}259 