<?php
/**
* Função que testa se o array é sequencial.
*
* @param array Array a ser testado
* @return bool True se $array for sequencial, False caso contrário
*/
function is_sequential
( array $array ) { }
/**
* Função que testa se o array é associativo.
*
* @param array Array a ser testado
* @return bool True se $array for associativo, False caso contrário
*/
function is_associative
( array $array ) { return ! is_sequential( $array ) ;
}
/**
* Lista de testes que a função deve ser submetida.
*
* Cada item da lista deve ser um array com três índices.
* O primeiro, "array", com o array a ser testado pela função.
* O segundo, "is_sequential", um valor booleano esperado como retorno da função is_sequential.
* O terceiro, "is_associative", um valor booleano esperado como retorno da função is_associative.
*/
// Teste 1: Array com índices numéricos sequenciais
$tests [ ] = [
"array" => [ "a" , "b" , "c" , "d" , "e" ] ,
"is_sequential" => true ,
"is_associative" => false
] ;
// Teste 2: Array associativo
$tests [ ] = [
"array" => [ "name" => "foo" , "lastname" => "bar" ] ,
"is_sequential" => false ,
"is_associative" => true
] ;
// Teste 3: Array com chave do tipo string contendo inteiro válido
$tests [ ] = [
"array" => [ "0" => "foo" , "1" => "bar" ] ,
"is_sequential" => true ,
"is_associative" => false
] ;
// Teste 4: Array com índices do tipo float
$tests [ ] = [
"array" => [ 0.5 => "foo" , - 3.5 => "bar" ] ,
"is_sequential" => true ,
"is_associative" => false
] ;
// Teste 5: Array com índices do tipo booleanos
$tests [ ] = [
"array" => [ true => "foo" , false => "bar" ] ,
"is_sequential" => true ,
"is_associative" => false
] ;
// Teste 6: Array com índice nulo
$tests [ ] = [
"array" => [ null => "foo" ] ,
"is_sequential" => false ,
"is_associative" => true
] ;
// Teste 7: Array misto
$tests [ ] = [
"array" => [ "foo" , "baz" => "bar" ] ,
"is_sequential" => true ,
"is_associative" => true
] ;
// Teste 8: Array de índices numéricos desordenados
$tests [ ] = [
"array" => [ 1 => "foo" , 0 => "bar" ] ,
"is_sequential" => true ,
"is_associative" => false
] ;
// Teste 9: Array de índices numéricos ordenados não sequenciais
$tests [ ] = [
"array" => [ 0 => "foo" , 1 => "bar" , 6 => "baz" ] ,
"is_sequential" => true ,
"is_associative" => false
] ;
/**
* Executa os testes.
*/
foreach ( $tests as $i => $test ) {
if ( $test [ "is_sequential" ] !== is_sequential( $test [ "array" ] ) ) {
echo sprintf ( "is_sequential: Algo errado não está certo! Teste %d falhou.\n " , $i + 1 ) ; }
if ( $test [ "is_associative" ] !== is_associative( $test [ "array" ] ) ) {
echo sprintf ( "is_associative: Algo errado não está certo! Teste %d falhou.\n " , $i + 1 ) ; }
}
PD9waHAKCi8qKgogKiBGdW7Dp8OjbyBxdWUgdGVzdGEgc2UgbyBhcnJheSDDqSBzZXF1ZW5jaWFsLgogKiAKICogQHBhcmFtIGFycmF5IEFycmF5IGEgc2VyIHRlc3RhZG8KICogQHJldHVybiBib29sIFRydWUgc2UgJGFycmF5IGZvciBzZXF1ZW5jaWFsLCBGYWxzZSBjYXNvIGNvbnRyw6FyaW8KICovCgpmdW5jdGlvbiBpc19zZXF1ZW50aWFsIChhcnJheSAkYXJyYXkpIHsKICAgIHJldHVybiBhcnJheV9rZXlzKCRhcnJheSkgPT09IHJhbmdlKDAsIGNvdW50KCRhcnJheSkgLSAxKTsKfQoKLyoqCiAqIEZ1bsOnw6NvIHF1ZSB0ZXN0YSBzZSBvIGFycmF5IMOpIGFzc29jaWF0aXZvLgogKiAKICogQHBhcmFtIGFycmF5IEFycmF5IGEgc2VyIHRlc3RhZG8KICogQHJldHVybiBib29sIFRydWUgc2UgJGFycmF5IGZvciBhc3NvY2lhdGl2bywgRmFsc2UgY2FzbyBjb250csOhcmlvCiAqLwoKZnVuY3Rpb24gaXNfYXNzb2NpYXRpdmUgKGFycmF5ICRhcnJheSkgewogICAgcmV0dXJuICFpc19zZXF1ZW50aWFsKCRhcnJheSk7Cn0KCi8qKgogKiBMaXN0YSBkZSB0ZXN0ZXMgcXVlIGEgZnVuw6fDo28gZGV2ZSBzZXIgc3VibWV0aWRhLgogKiAKICogQ2FkYSBpdGVtIGRhIGxpc3RhIGRldmUgc2VyIHVtIGFycmF5IGNvbSB0csOqcyDDrW5kaWNlcy4KICogTyBwcmltZWlybywgImFycmF5IiwgY29tIG8gYXJyYXkgYSBzZXIgdGVzdGFkbyBwZWxhIGZ1bsOnw6NvLgogKiBPIHNlZ3VuZG8sICJpc19zZXF1ZW50aWFsIiwgdW0gdmFsb3IgYm9vbGVhbm8gZXNwZXJhZG8gY29tbyByZXRvcm5vIGRhIGZ1bsOnw6NvIGlzX3NlcXVlbnRpYWwuCiAqIE8gdGVyY2Vpcm8sICJpc19hc3NvY2lhdGl2ZSIsIHVtIHZhbG9yIGJvb2xlYW5vIGVzcGVyYWRvIGNvbW8gcmV0b3JubyBkYSBmdW7Dp8OjbyBpc19hc3NvY2lhdGl2ZS4KICovCgokdGVzdHMgPSBhcnJheSgpOwoKLy8gVGVzdGUgMTogQXJyYXkgY29tIMOtbmRpY2VzIG51bcOpcmljb3Mgc2VxdWVuY2lhaXMKCiR0ZXN0c1tdID0gWwogICAgImFycmF5IiA9PiBbImEiLCAiYiIsICJjIiwgImQiLCAiZSJdLCAKICAgICJpc19zZXF1ZW50aWFsIiA9PiB0cnVlLAogICAgImlzX2Fzc29jaWF0aXZlIiA9PiBmYWxzZQpdOwoKLy8gVGVzdGUgMjogQXJyYXkgYXNzb2NpYXRpdm8KCiR0ZXN0c1tdID0gWwogICAgImFycmF5IiA9PiBbIm5hbWUiID0+ICJmb28iLCAibGFzdG5hbWUiID0+ICJiYXIiXSwgCiAgICAiaXNfc2VxdWVudGlhbCIgPT4gZmFsc2UsCiAgICAiaXNfYXNzb2NpYXRpdmUiID0+IHRydWUKXTsKCi8vIFRlc3RlIDM6IEFycmF5IGNvbSBjaGF2ZSBkbyB0aXBvIHN0cmluZyBjb250ZW5kbyBpbnRlaXJvIHbDoWxpZG8KCiR0ZXN0c1tdID0gWwogICAgImFycmF5IiA9PiBbIjAiID0+ICJmb28iLCAiMSIgPT4gImJhciJdLCAKICAgICJpc19zZXF1ZW50aWFsIiA9PiB0cnVlLAogICAgImlzX2Fzc29jaWF0aXZlIiA9PiBmYWxzZQpdOwoKLy8gVGVzdGUgNDogQXJyYXkgY29tIMOtbmRpY2VzIGRvIHRpcG8gZmxvYXQKCiR0ZXN0c1tdID0gWwogICAgImFycmF5IiA9PiBbMC41ID0+ICJmb28iLCAtMy41ID0+ICJiYXIiXSwgCiAgICAiaXNfc2VxdWVudGlhbCIgPT4gdHJ1ZSwKICAgICJpc19hc3NvY2lhdGl2ZSIgPT4gZmFsc2UKXTsKCi8vIFRlc3RlIDU6IEFycmF5IGNvbSDDrW5kaWNlcyBkbyB0aXBvIGJvb2xlYW5vcwoKJHRlc3RzW10gPSBbCiAgICAiYXJyYXkiID0+IFt0cnVlID0+ICJmb28iLCBmYWxzZSA9PiAiYmFyIl0sIAogICAgImlzX3NlcXVlbnRpYWwiID0+IHRydWUsCiAgICAiaXNfYXNzb2NpYXRpdmUiID0+IGZhbHNlCl07CgovLyBUZXN0ZSA2OiBBcnJheSBjb20gw61uZGljZSBudWxvCgokdGVzdHNbXSA9IFsKICAgICJhcnJheSIgPT4gW251bGwgPT4gImZvbyJdLCAKICAgICJpc19zZXF1ZW50aWFsIiA9PiBmYWxzZSwKICAgICJpc19hc3NvY2lhdGl2ZSIgPT4gdHJ1ZQpdOwoKLy8gVGVzdGUgNzogQXJyYXkgbWlzdG8KCiR0ZXN0c1tdID0gWwogICAgImFycmF5IiA9PiBbImZvbyIsICJiYXoiID0+ICJiYXIiXSwgCiAgICAiaXNfc2VxdWVudGlhbCIgPT4gdHJ1ZSwKICAgICJpc19hc3NvY2lhdGl2ZSIgPT4gdHJ1ZQpdOwoKLy8gVGVzdGUgODogQXJyYXkgZGUgw61uZGljZXMgbnVtw6lyaWNvcyBkZXNvcmRlbmFkb3MKCiR0ZXN0c1tdID0gWwogICAgImFycmF5IiA9PiBbMSA9PiAiZm9vIiwgMCA9PiAiYmFyIl0sIAogICAgImlzX3NlcXVlbnRpYWwiID0+IHRydWUsCiAgICAiaXNfYXNzb2NpYXRpdmUiID0+IGZhbHNlCl07CgovLyBUZXN0ZSA5OiBBcnJheSBkZSDDrW5kaWNlcyBudW3DqXJpY29zIG9yZGVuYWRvcyBuw6NvIHNlcXVlbmNpYWlzCgokdGVzdHNbXSA9IFsKICAgICJhcnJheSIgPT4gWzAgPT4gImZvbyIsIDEgPT4gImJhciIsIDYgPT4gImJheiJdLCAKICAgICJpc19zZXF1ZW50aWFsIiA9PiB0cnVlLAogICAgImlzX2Fzc29jaWF0aXZlIiA9PiBmYWxzZQpdOwoKCi8qKgogKiBFeGVjdXRhIG9zIHRlc3Rlcy4KICovCiAKZm9yZWFjaCAoJHRlc3RzIGFzICRpID0+ICR0ZXN0KSB7CiAgICBpZiAoJHRlc3RbImlzX3NlcXVlbnRpYWwiXSAhPT0gaXNfc2VxdWVudGlhbCgkdGVzdFsiYXJyYXkiXSkpIHsKICAgICAgICBlY2hvIHNwcmludGYoImlzX3NlcXVlbnRpYWw6IEFsZ28gZXJyYWRvIG7Do28gZXN0w6EgY2VydG8hIFRlc3RlICVkIGZhbGhvdS5cbiIsICRpKzEpOwogICAgfQogICAgCiAgICBpZiAoJHRlc3RbImlzX2Fzc29jaWF0aXZlIl0gIT09IGlzX2Fzc29jaWF0aXZlKCR0ZXN0WyJhcnJheSJdKSkgewogICAgICAgIGVjaG8gc3ByaW50ZigiaXNfYXNzb2NpYXRpdmU6IEFsZ28gZXJyYWRvIG7Do28gZXN0w6EgY2VydG8hIFRlc3RlICVkIGZhbGhvdS5cbiIsICRpKzEpOwogICAgfQp9Cg==