Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extrair objetos sem declarar nomes #5

Open
andrechalom opened this issue Apr 24, 2018 · 2 comments
Open

Extrair objetos sem declarar nomes #5

andrechalom opened this issue Apr 24, 2018 · 2 comments
Assignees
Labels
enhancement New feature or request

Comments

@andrechalom
Copy link
Member

No momento, estamos realizando os exercícios com "crie um objeto chamado X com características 1,2,3" e testamos exists("x"), etc. Mas poderíamos buscar no ambiente de correção se existe algum objeto com características 1,2,3, e isso encerraria o exercício.

@andrechalom andrechalom added the enhancement New feature or request label Apr 24, 2018
@andrechalom andrechalom self-assigned this Apr 25, 2018
@andrechalom
Copy link
Member Author

andrechalom commented Apr 30, 2018

Com essa alteração e a #1, acho que é possível fazer uma nova estrutura de exercícios (vagamente inspirada em frameworks de testes, como o testthat); seria possível fazer um único string que contivesse toda a definição do exercício. As funções de extração e teste devem ser explicitamente encadeadas (isso é, elas devem retornar o conjunto de objetos extraídos, que pode ser usado nos testes subsequentes).

Imagino que é possível expor o objeto "extraído" para os próximos testes com o nome de "object", e isso poderia ser usado nas próximas correções.

Também imagino que as funções de correção possam incluir alguns testes comuns (talvez test_identical, test_names, etc), e uma função genérica que aceita um string.

O exercício de distâncias entre cidades poderia ser escrito assim:

setup("
   nomes = c('Atenas', 'Madri', 'Paris', 'Estocolmo');
   cidades <- matrix(c(0, 3949, 3000, 3927, 3949, 0, 1273, 3188, 
        3000, 1273, 0, 1827, 3927, 3188, 1827, 0), nrow=4, ncol=4,
        dimnames=list(nomes,nomes))
")
extract_class("matrix", "Você precisa construir um objeto da classe 'matrix'") -> 
extract_dim(c(4,4), 
    "Você precisa construir um objeto que contenha quatro linhas e quatro colunas") ->
test("all (object %in% cidades)", 
    "Algum valor da sua matriz está incorreto") ->
test("all (cidades %in% object)", 
    "Algum valor da matriz está faltando.") ->
test("all(object == t(object))", 
    "A matriz deve ser simétrica, ou seja, a distância entre Paris e Madri deve ser 
     igual a distância entre Madri e Paris.") ->
test("! is.null(rownames(object)) & ! is.null(colnames(object))", 
    "Você deve alterar o nome das linhas e colunas da matriz.") ->
test_identical("cidades", 
    "Alguns valores estão fora de ordem ou o nome das linhas e colunas está incorreto.")

Essa formulação faz sentido pra vcs? Fica claro o que esse código faz?

@raspereira
Copy link

Oi @andrechalom, achei interessante essa estratégia. No entanto o código não ficou muito claro para mim, mas isso é limitação minha de programação. Acho que não seria um impedimento.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants