blob: 68cf1739bb110bb19f5288eee083c16777817b78 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package gdk
import org.junit.jupiter.api.Test
final class WorkingWithArraysTest {
@Test
void testArrayLiterals() {
// tag::array_literals[]
Number[] nums = [5, 6, 7, 8]
assert nums[1] == 6
assert nums.getAt(2) == 7 // alternative syntax
assert nums[-1] == 8 // negative indices
assert nums instanceof Number[]
int[] primes = [2, 3, 5, 7] // primitives
assert primes instanceof int[]
def odds = [1, 3, 5] as int[] // alt syntax 1
assert odds instanceof int[]
def evens = new int[]{2, 4, 6} // alt syntax 2
assert evens instanceof int[]
// empty array examples
Number[] emptyNums = []
assert emptyNums instanceof Number[] && emptyNums.size() == 0
var emptyObjects = new Object[0] // alternative syntax 1
assert emptyObjects instanceof Object[] && emptyObjects.size() == 0
def emptyStrings = new String[]{} // alternative syntax 2
assert emptyStrings instanceof String[] && emptyStrings.size() == 0
// multi-dimension examples
int[][] manyInts = [ [1,2], [3,4] ]
assert manyInts instanceof int[][] && manyInts.size() == 2
assert manyInts[0].size() == 2 && manyInts[1].size() == 2
def manyStrings = new String[][] { {'one','two'}, {'three','four'}, }
assert manyStrings instanceof String[][] && manyStrings.size() == 2
assert manyStrings[0].size() == 2 && manyStrings[1].size() == 2
assert manyStrings[0][0] == 'one'
assert manyStrings[-1][-1] == 'four'
// end::array_literals[]
}
@Test
void testArrayIteration() {
// tag::array_each[]
String[] vowels = ['a', 'e', 'i', 'o', 'u']
var result = ''
vowels.each {
result += it
}
assert result == 'aeiou'
result = ''
vowels.eachWithIndex { v, i ->
result += v * i // index starts from 0
}
assert result == 'eiiooouuuu'
result = ''
int[] nums = [0, 1, 2]
nums.eachWithIndex { value, index ->
result += value.doubleValue()
}
assert result == '0.01.02.0'
// end::array_each[]
}
@Test
void testListCollect() {
// tag::array_gdk[]
int[] nums = [1, 2, 3]
def doubled = nums.collect { it * 2 }
assert doubled == [2, 4, 6] && doubled instanceof List
def tripled = nums*.multiply(3)
assert tripled == [3, 6, 9] && doubled instanceof List
assert nums.any{ it > 2 }
assert nums.every{ it < 4 }
assert nums.average() == 2
assert nums.min() == 1
assert nums.max() == 3
assert nums.sum() == 6
assert nums.indices == [0, 1, 2]
assert nums.swap(0, 2) == [3, 2, 1] as int[]
// end::array_gdk[]
}
}