Giter Club home page Giter Club logo

lsinf1252's Introduction

LSINF1252

Build Status

This repository contains the INGInious tasks for UCLouvain's course LSINF1252, computing systems.

Each INGInious task is structured as follows:

  • a student directory that contains the C code for the exercise
  • a run file that is executed by INGInious when a student provides an answer
  • a task.yaml file that provides the description of the exercise

The student directory contains several types of files:

  • a CTester directory that contains the code of the Ctester library that is used to execute the student code and intercept library calls
  • a student_code.c.tpl file which is the template that the students have to fill in
  • one or more test.c files that contain the actual tests

You can find in Report.md a description on how to write a bug report for an INGInious task

lsinf1252's People

Contributors

anthonygego avatar flyearthr avatar jadinm avatar kaskales avatar maxmawt avatar nrybowski avatar obonaventure avatar olmartin avatar vanstratum avatar zashas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lsinf1252's Issues

s5_big_array_get_set - wrong lseek check

Ce code retourne l'erreur : "Info: You do not return the correct value. — lseek() should at least be called once."

Pourquoi ça renvoie cette erreur puisque le code contient un lseek ?

s5_save_struct_into_file

Hello

I spotted an issue in the week 5 exercise "save struct into file"

to me, when the call to write() fails, the program should close the file, then return -2.

I actually found out that inginious validates a submission which doesn't close the file when an error occurs in write().

here is my submission number : #5c84ee6c6779dd43db062677

Vérification de l'utilisation de fonctions

Pour la question test, un étudiant propose

#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[]){
if(!strcmp(argv[2],"-ne")){
return atof(argv[1])==atof(argv[3]);
}
else if(!strcmp(argv[2],"-ge")){
return atof(argv[1])<atof(argv[3]);
}
else if(!strcmp(argv[2],"-gt")){
return atof(argv[1])<=atof(argv[3]);
}
else if(!strcmp(argv[2],"-le")){
return atof(argv[1])>atof(argv[3]);
}
else if(!strcmp(argv[2],"-lt")){
return atof(argv[1])>=atof(argv[3]);
}
else if(!strcmp(argv[2],"-eq")){
return atof(argv[1])!=atof(argv[3]);
}
else{
return 0;
}
}

comment faire en C pour compter efficacement le nombre de sous-fonctions qui sont implémentés et les forcer à utiliser des sous-fonctions ?

s2_make_calc

Lorsqu'on écrit :

calc: calc.o operations.o
    gcc -o calc calc.o operations.o

les tests passent, lorsqu'on écrit :

calc: calc.o operations.o
    gcc -o calc operations.o calc.o 

ils ne passent pas alors que le binaire est bien là. Je suppose que le binaire peut être différent de celui de référence en fonction des zones mémoires choisies pour les deux codes et que donc le diff entre les deux binaires n'est pas toujours correct.

shell - question 4 - fopen ou open

`int pid = fork(); if(pid==-1){return -1;}
if(pid==0)
{
//if(dup2(fileno(fopen(output_path,"w")),STDOUT_FILENO)==-1) //test1
if(dup2(open(output_path,O_RDWR|O_CREAT|O_TRUNC),STDOUT_FILENO)==-1) //test2
{
return -1;
}
execve(path,argv,NULL);
}
else
{
int exitcode;
int p = waitpid(pid,&exitcode,0);
if(p==-1){return -1;}

if(!WIFEXITED(exitcode)) //pid didn't end correctly
{
    return -1;
}
else
{
    return WEXITSTATUS(exitcode);
}

}`
avec la ligne test1, ca passe, avec test2, l'on obtient le message d'erreur suivant :

Running suite(s): Shell
75%: Checks: 4, Failures: 1, Errors: 0
shell_test.c:85:F:Core:test_redirect:0: Assertion 'fd >= 0' failed
test_redirect s’est terminé après le message suivant : Exécution de "echo 'Hello World' > file_a"

pointer_types

  • [S3] Pointer arithmetic : malheureusement, apparemment faire de l'arithmétique sur void* est autorisée dans le setup actuel. Il faudrait réussir à empêcher ça, car les étudiants ne comprennent pas l'intérêt de l'exercice, et arrivent à bricoler une solution très approximative en chipotant avec des void*.

Filtering Linked List

Il y a un problème dans les tests de Filtering Linked List. Si un étudiant fait le code suivant:

return 0;

Ça fait faire une SIGSEV aux tests et donc, ça ne donne aucun feedback à l'étudiant

Mini projet string

  • Certains étudiants ont passé pas mal de temps à cette séance sur [S2] strlen, strcat et strcasecmp, il est manifestement un peu buggé (le feedback global bug par moments, apparemment quand il y a segfault). Il faudrait peut-être alléger un peu l'énoncé (bcp bloquaient sur le fait que strcasecmp devaient aussi comparer par rapport à l'ordre alphabétique, on pourrait remplacer ça par un simple retour binaire).

Simple Linked List

Quand un étudiant ne change pas le next du noeud ajouté au début de la liste, les tests font une SIGSEV.
Ex:

struct node *n;
n =(struct node*)malloc(sizeof(struct node));
if(n==NULL) return 1;
(*list).size=(list->size)+1;
(*n).value = value;
(*list).first = n;
return 0;

Ordered linked list - Cas avec un seul élément

Pour l'exercice de la S4 ordered linked list il est demandé d'insérer un élément à la bonne position en fonction de l'ordre de la liste. Cependant s'il n'y a qu'un élément présent dans la liste, on ne peut déduire si l'ordre est croissant ou décroissant et donc s'il faut insérer le noeud avant ou après le noeud déjà présent.
Il faudrait peut-être préciser dans les consignes ce qu'il faudrait faire dans ce cas là, ici il me semble qu'il fallait l'insérer avant.

order_relation_linked_list - time limit exceeded

Ce code déclenche une "time limit exceeded" mais il n'y a pas de boucle infinie dans le code de l'étudiant à première vue.

Peut-être que les pointeurs sont faux et que ça déclenche une boucle sur une zone de mémoire bizarre dans le code de test. Si c'est ça, un fix rapide serait de checker si le code de test parcourt plus d'éléments que ceux attendus.

advanced_queue

La structure correcte met le pointeur sur l'avant dernier noeud et non le dernier comme annoncé.

Il faudra mettre à jour toute la tâche (énoncé, solution et tests).

simple_stack - Time Limit Exceeded

Issue très similaire à #19

Ce code, sans aucune boucle, déclenche un "Time Limit Exceeded". La boucle se trouve donc probablement dans le code de test.

Un fix rapide serait de checker si le code de test ne parcourt pas plus d'éléments de la stack que ceux attendus et retourner une erreur si c'est le cas.

s3_make_mcq

Il manque un run pour que la tâche fonctionne.

sleepy_malloc

un code incorrect au niveau de la taille passé comme argument à malloc mais qui passe en vert

for(int i =0; i <10;i++){
size_t *r= (size_t *)malloc((s+1)*sizeof((size_t)s));

if(r!=NULL){
    return(void *)r;      
}
    sleep (5);

}

return NULL;

s3_make

La tâche ne contenait pas de run, j'en ai ajouté un temporaire.

Pablo, pourrais-tu repasser dessus afin de confirmer que cela correspond à ce que tu avais prévu ?

calloc2

Ce code passe tous les tests alors qu'il ne devrait pas (accès à un byte au-delà de la zone allouée)

char *ptr=(char )malloc((nmemb)(size));
if (ptr == 0){
return NULL;
}
int i;
for(i=0; i<nmemb; i++){
ptr[i] = 0 ;
}
ptr[nmemb]='\0';
return ptr;

Simple Stack

Pour le push, si le deuxième malloc fails, les tests ne vérifient pas que noeud initialisé au préalable est libéré, ce qui peut créer de grosses memory leak.
ex:

if(!head) return 1;
struct node* new = (struct node*) malloc(sizeof(struct node));
if(!new) return 1;
new->name = (char*) malloc(sizeof(strlen(value)+1));
if(!new->name){
    //free(new);
    return 1;
}
strcpy(new->name,value);
new->next = *head;
*head = new;
return 0;

Et ce code passe tous les tests

Advanced queue

Advanced queue devrait fournir des informations plus détaillées lorsqu'un test échoue (par ex. si free a été oublié, il faut le remonter via push_info_msg).

[Septembre 2016A] Producteurs/Consommateurs

Il y a un souci avec cette question.
En effet, sans avoir répondu à toutes les sous questions et en ayant un souci avec ma seule réponse, j'obtiens 100% pour cet exercice.

Coordialement.

Screenshot_2019-03-26  Septembre 2016A  Producteurs Consommateurs -  LSINF1252  Systèmes informatiques INGInious

s4 - make basics calculator

Il faudrait rajouter un accès à une archive zip pour qu'ils puissent tester leur Makefile localement, le feedback d'INGInious est binaire pour le moment, ce qui rend leur Makefile indébugable.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.