GithubHelp home page GithubHelp logo

thejoeejoee / vut-fit-ifj-2017-toolkit Goto Github PK

View Code? Open in Web Editor NEW
23.0 4.0 11.0 2.9 MB

IDE for custom language IFJcode17 and pack of automatic tests for compilers of that language.

Home Page: https://ifj.josefkolar.cz/

License: GNU General Public License v3.0

Python 66.41% QML 30.18% PHP 0.40% Shell 3.01%
school-project testing testing-tools language freebasic ide vutbr ifj17 fit

vut-fit-ifj-2017-toolkit's Introduction

Sada nástrojů pro IFJ17 a IFJcode17

INFO pro následovníky v IFJ: neváhejte mne kontaktovat, rád předám další generacím - jak IDE, tak testy.

PyPI version GitHub issues GitHub stars GitHub license GitHub release Join the chat at https://gitter.im/VUT-FIT-IFJ-2017-toolkit/Lobby Wiki

Repozitář obsahuje nástroje k projektu kompilátoru do předmětu IFJ na FIT VUT v Brně v akademickém roce 2017/2018. Mezi nástroje patří sada testů včetně automatické spouštěče testových jednotek, vývojové prostředí včetně debuggeru jazyka IFJcode17 a vlastní interpret tohoto jazyka. Instalace těchto balíků je podrobně popsána ve Wiki, obecně je lze nainstalovat následovně:

$ pip install IFJcode17-toolkit

Dokumentaci k nástrojům naleznete na Github Wiki.

Pro řešení chyb, definice testů či komunikaci mezi týmy můžete využít Gitter místnost.

IDE

Spouštění vývojového prostředí provedete po nainstalování pomocí příkazu ifjcode17-ide, níže náhled jeho rozhraní při spuštěném debuggeru. Více informací o jeho funkci naleznete ve wiki.

náhled IDE

Automatické testy

Toolkit obsahu sadu více než 200 testovacích jednotek předkládaných vašemu kompilátoru. Jejich automatické spuštění provedete pomocí příkazu ifjcode17-tests <cesta k vašemu kompilátoru>. Veškeré další informace naleznete ve wiki.

náhled do testů

Spolupráce

Tímto chceme všechny uživatele tototo repozitáře poprosit o spolupráci s definicí testů či jinou, jak uvážíte. Myslíme si, že čím více testovacích jednotek vytvoříme, tím více budeme mít pokrytých stavů kompilátoru a tím méně nás překvapí hodnocení. Všem zájemcům doporučujeme poslat pull request (Jak poslat Pull Request), je pro nás nejsnažší na integraci do repozitáře, ale nebudeme se zlobit, když nám definice hodíte na Facebook, vytvoříte issue nebo pošlete e-mail. Děkujeme!

Také oceníme, když nám nalezené chyby zareportujete do Github issues, kam nám jistě můžete zapsat i vylepšení, co vás napadla nebo by se vám hodila - určitě se nějak domluvíme.

Buď jako Iva!

Nebuď jako rohlík!

Pomožte!

Changelog

  • 20-11-2017 - changelog nyní veden standardně v releases na GitHub
  • 16-11-2017 - publikace 1.1 oprava chyb v IDE a přidání značek do scrollbaru IDE
  • 15-11-2017 - publikace 1.0 na PyPi pod názvem IFJcode17-toolkit
  • 09-11-2017 - uživatelské testování a ladění IFJcode17 IDE, příprava release
  • 08-11-2017 - kompletní testy pro UNARY, SCOPE, BOOLOP, BASE, testy na chyby zmíněné na přednáškách/democviku, celkem asi 180 testů
  • 31-10-2017 - další várka testů, ~140 testů včetně testů některých rozšíření
  • 26-10-2017 - možnost spouštění testů dle implementovaných rozšíření
  • 24-10-2017 - drobné úpravy v logování, celkové agregace úspěšnosti
  • 22-10-2017 - přidána další sada testů, ~90 testů
  • 18-10-2017 - zveřejněno, průběžně základní sada ~60 testů

Autoři

vut-fit-ifj-2017-toolkit's People

Contributors

enkeymc avatar gitter-badger avatar ivakavankova avatar martinkobelka avatar sonypony avatar thejoeejoee avatar timoti111 avatar trsak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

vut-fit-ifj-2017-toolkit's Issues

Snížení náročnosti 99/02

Fibonacciho posloupnost počítaná rekurzí má složitost O(2^N), tudíž při výpočtu fib(25) výpočet trvá neúměrně dlouho, a to hlavně díky verbose výstupu ic17int, jehož vypisování značně ovlivňuje rychlost.
Navrhuji snížit výpočet na fib(10)

Přidat testy i pro rozšíření

Zdravím,
vypadá to moc dobře, nevím kde na to berete tolik času 😄

Jinak do budoucna by se určitě hodily i testy na rozšíření za prémiové body.

Chybné testy

V testech se vyskytuje několik nekorektních návratových kódů, špatně naspecifikovaných testů a i jeden bug.
Popis:

01_basic:
	016 (print string with char 238): ✓ × FAIL TO RUN INTERPRETER ('ascii' codec can't decode byte 0xee in position 0: ordinal not in range(128))
		- bug
02_functions:
	30  (multiple functions call): ✓✓ × STDOUT
		- poradi volani funkci neni definovane, proto by print nemel byt uvnitr funkce
04_expressions:
        27  (divide priority (fail types)):  × COMPILER EXIT CODE expected=4, returned=0
		- tohle ma fungovat a funguje i v fbc, protoze implicitni konverze
        28  (divide priority 2 (fail types)):  × COMPILER EXIT CODE expected=4, returned=2
		- ma fungovat, ale v testu u printu chybi strednik
        30  (divide priority 2 (fail types)):  × COMPILER EXIT CODE expected=4, returned=2
		- ma fungovat, ale v testu u printu chybi strednik
12_global:
        04  (global variable initialized from other global variable):  × COMPILER EXIT CODE expected=0, returned=6
		- nekonstantni definice globalni promenne - nelze ve FreeBASICu
        07  (global variable initialization by function call):  × COMPILER EXIT CODE expected=0, returned=6
		- nekonstantni definice globalni promenne - nelze ve FreeBASICu
        09  (static variable):  × COMPILER EXIT CODE expected=0, returned=6
		- nekonstantni definice globalni promenne - nelze ve FreeBASICu
        10  (multiple static variables):  × COMPILER EXIT CODE expected=0, returned=6
		- nekonstantni definice globalni promenne - nelze ve FreeBASICu
66_errors:
        083 (scope in function):  × COMPILER EXIT CODE expected=2, returned=0
		- povoleno v rozsireni SCOPE
99_benchmarks:
        07  (reference program working with strings and builtin functions): INTERPRETER TIMEOUT
		- test nema nadefinovany stdin a stdout, tudiz intepret cely cas ceka na stdin
	11  (big count of function parameters):  COMPILER TIMEOUT
		- je nutne zvednout timeout v tests.json, evidentne to vsem dela timeout

Nástroj na testování se zacyklí na testu 07_strings 10

Pythoní interpret se zacyklí na, referenční n - konkrétní kód poslán soukromě.
Traceback:

Traceback (most recent call last):
  File "/usr/local/bin/ifjcode17-tests", line 9, in <module>
    load_entry_point('IFJcode17-toolkit==1.1.8', 'console_scripts', 'ifjcode17-tests')()
  File "/usr/local/lib/python3.5/dist-packages/IFJcode17_toolkit-1.1.8-py3.5.egg/ifj2017/test/main.py", line 42, in main
    return runner.run()
  File "/usr/local/lib/python3.5/dist-packages/IFJcode17_toolkit-1.1.8-py3.5.egg/ifj2017/test/runner.py", line 131, in run
    self._run_test(test_info)
  File "/usr/local/lib/python3.5/dist-packages/IFJcode17_toolkit-1.1.8-py3.5.egg/ifj2017/test/runner.py", line 234, in _run_test
    state = self._interpret_price(report.compiler_stdout, test_info)
  File "/usr/local/lib/python3.5/dist-packages/IFJcode17_toolkit-1.1.8-py3.5.egg/ifj2017/test/runner.py", line 273, in _interpret_price
    return interpreter.run()
  File "/usr/local/lib/python3.5/dist-packages/IFJcode17_toolkit-1.1.8-py3.5.egg/ifj2017/interpreter/interpreter.py", line 62, in run    instruction.run(state)
  File "/usr/local/lib/python3.5/dist-packages/IFJcode17_toolkit-1.1.8-py3.5.egg/ifj2017/interpreter/instruction.py", line 193, in run
    command(state, *self.operands)  # fake instance argument
  File "/usr/local/lib/python3.5/dist-packages/IFJcode17_toolkit-1.1.8-py3.5.egg/ifj2017/interpreter/instruction.py", line 93, in operands
    return filter(None, (self.op0, self.op1, self.op2,))
KeyboardInterrupt

Chybný test 99/03 hanoi tower

V definici funkce hanoi je použit parametr to, což je ale při rozšíření CYCLES klíčové slovo. Překlad tudíž vrátí syntaktickou chybu.

Windows - kódování souborů

Diakritika v souborech uložené s kódováním UTF-8 se špatně zobrazuje.
image
Soubory musí být kódovány windows-1250, pak se to už zobrazuje dobře.

FAIL TO RUN COMPILER ('ascii' codec can't decode byte ...

112 (lexical error):  × FAIL TO RUN COMPILER ('ascii' codec can't decode byte 0xe2 in position 53: ordinal not in range(128))
113 (lexical error):  × FAIL TO RUN COMPILER ('ascii' codec can't decode byte 0xf0 in position 53: ordinal not in range(128))
114 (lexical error):  × FAIL TO RUN COMPILER ('ascii' codec can't decode byte 0xf0 in position 53: ordinal not in range(128))
148 (lexical error):  × FAIL TO RUN COMPILER ('ascii' codec can't decode byte 0xc4 in position 53: ordinal not in range(128))

Verze 1.3.8 nenastartuje

Při instalaci přes pip testy nefungují:

Traceback (most recent call last):  
  File "/usr/local/bin/ifjcode17-tests", line 7, in <module>  
    from ifj2017.test.main import main  
  File "/usr/local/lib/python3.5/dist-packages/ifj2017/test/main.py", line 9, in <module>  
    import argcomplete  
ImportError: No module named 'argcomplete'

Manuální instalace funguje, takže to chápu tak, že poslední vydaná verze obsahuje chybu

Test 04/27 - neměl by hodit chybu?

Podle mě by tento test měl vyhodit chybu:
print 100000\(3/4)\4\(4/6);

U operace \ musí být oba operandy typu integer, zde tomu tak není.

Více různých variant stdin pro jeden test

@thejoeejoee
K jednomu testu by mělo být možné přiřadt více různých vstupů a výstupů. Narážím především na podmínky. Pokud testujeme následující kód.

dim a as integer
input a
if a > 10 then
......
else
......
end if

Tak potřebujeme alespoň dva vstupy pro korektní otestovní funkčnosti programu.

Nekonzistencia s ic17int pri opakovanom DEFVAR

Oficialny interpret pri reDEFVARovani ohlasi chybu "Symbol already exists!", zatial co tento interpret nie.

Toto spravanie je klucove pri loopoch, ako napriklad while, kde sa zapisane prikazy vykonavaju viac krat. Tym padom, ak su v tele while zapisane DEFVARy tak pri cykle, ktory sa vykona viac ako raz, nastane na oficialnom interpretri chyba, ktoru tento interpret neodhali.

Testovatelne na tomto kode:

.IFJcode17
DEFVAR GF@$return
JUMP %main

LABEL %main
CREATEFRAME

DEFVAR TF@count
MOVE TF@count int@0

LABEL $label1
DEFVAR TF@$temp1
LT TF@$temp1 TF@count int@5
JUMPIFNEQ $label2 TF@$temp1 bool@true

WRITE TF@count

DEFVAR TF@$temp2
ADD TF@$temp2 TF@count int@1
MOVE TF@count TF@$temp2

JUMP $label1
LABEL $label2

Nazov parametru rovnaky ako nazov funkcie

Myslim, ze test 66/21 je chybny, fbc na merlinovi ho prelozi bez chyby.

Nazov parametru nesmie byt rovnaky ako funkcia len v pripade, ze sa jedna o nazov parametru v definicii. V deklaracii moze byt nazov parametru lubovolny, aj rovnaky ako uz definovana funkcia.

Chyba chování GETCHAR

Interpreter berie ako chybu keď sa zavolá inštrukcia GETCHAR s parametrom prázdny reťazec a index 0.

Plánované úpravy

  • vracet odpovídající návratový kód
  • přidat --verbosity a nemít ty testy tak ukecané
  • přidat ukázkové travis.yml?
  • možnost definování návratových kódu rovnou v .code
  • přidat podporu Windows
  • přidat kontrolu architektury pro shodu s interpretem
  • přidat agregaci a možnost logování do JSON

Completer shortcut

Na macOS nejde zobrazit completer. Zkratka cmd+space je rezervovaná pro otevření Spotlightu.

Ověření načítání standardního vstupu kompilátorem

Dovoluji si navrhnout test na správnost načítání zdrojového jazyka IFJ17 překladačem ifj.
Měli jsme problém, že nám Toolkit nechtěl pracovat tak jak by měl a vyhazoval chyby. Problém byl v tom, že my jsem soubor načítali z argumentu, ale správně má být ze STDIN. Když jsme testy pustili ručtě tak fungovali v pořádku. Bylo by fajn kdyby Toolkit fungoval tak i tak a jen na konci by např napsal, že se má načítat pouze ze STDIN. Jinak díky moc za Toolkit, super práce !!

BASE: 11/07, 11/09, 11/10

Podle mě by mělo jít o lexikální chyby.

Freebasic také vrací jedničku.

scope
	dim x as integer = &b1010041
	dim y as integer = &o778777
	dim z as integer = &hagbaba
end scope

Dodělávky

  • Změnit debug ikonu
  • Opravit zobrazování aktuálního řádku při debugu
  • Zamknout code editor při debugu

Chybné testy

@thejoeejoee
V testu 001_basic/03 jsou definovány proměnné typu float. Ty ale nás omezený free basic nepodporuje. Jen Integer , Double a String

V testu 002_functions/07 je návratový kód 3. Myslím že by měl být 4.

Zlý očakávaný exit code

V teste 02/06 je očakávaný exit code 3 ale mal by byť 4:

• 3 - sémantická chyba v programu – nedefinovaná funkce/proměnná, pokus o redefinici funkce/proměnné, atd.
• 4 - sémantická chyba typové kompatibility v aritmetických, řetězcových a relačních
výrazech, příp. špatný počet či typ parametrů u volání funkce.
• 6 - ostatní sémantické chyby.

' function params with declaration but invalid types
declare function bar(h as string, t as string) as string
function bar(b as string, c as integer) as string
end function
scope
end scope

Názvy premenných možu byť rôzne:

Identifikátor formálního parametru v deklaraci funkce a v definici funkce se
může lišit, ale počty a typy parametrů musí souhlasit.

Mix variant definicie testov

Mozno by bolo prehladnejsie, aby sa mohol kod pre JSON nacitat z osobitneho suboru, radsej ako bol zapeceny priamo v JSONe.

Getchar ze string s escape sekvencí

.IFJcode17

DEFVAR GF@text
DEFVAR GF@index
DEFVAR GF@single_char

MOVE GF@text string@\032
MOVE GF@index int@2
GETCHAR GF@single_char GF@text GF@index
write GF@single_char

Vypíše 2, což znamená, že provádíš getchar i nad escape sekvencí(4 znaky), místo toho aby se brala jako jeden znak
EDIT: Zkontroluj si pro jistotu i #29

Spouštění bez interpretace

Návrh pro přidání přepínače pro vypnutí interpretace.
Pro uživatele macOS velké +.
např: --no-interpret -ni -mac (:-))

Integrace s Google testy

Vytvořit C++ třídu, která bude umět spustit takto definované testy pro snažší integraci s Google testy.

Špatné počítání ceny přístupu do paměti

Problém: nesouhlasí celková cena instrukcí interpretu tohoto projektu a referenčního interpretu z instrukcí BREAK nebo GROOT.

Příčina: v interpretu tohoto projektu se špatně počítá cena přístupu do paměti (nejspíš nepřipočítává vůbec) a nerozlišuje tedy ceny přístupu ke konstantě, zásobníku a rámci.

Před publikací

Pár věcí k dodělání:

  • Sjednotit endpointy pro testy a ide
  • Změnit název okna
  • Vyzkoušet na oknech
  • Popsat instalaci
  • Napsat publikační text
  • Vypnout debugger při novém souboru
  • ikonky pro operace se soubory

Upozornění na chybu v hlavičce

Jen takový detail, když se zapomene vložit .IFJcode17. Ušetří to pár nervů hledání, kde je chyba, protože ji vyhodnotí na řádku "none". :)

Chyba chování TYPE pro float

Například u následujícího kódu:

.IFJcode17
DEFVAR GF@typ
DEFVAR GF@promenna

MOVE GF@promenna int@5
TYPE GF@typ GF@promenna
JUMPIFNEQ konec GF@typ string@int

MOVE GF@promenna [email protected]
TYPE GF@typ GF@promenna
JUMPIFNEQ konec GF@typ string@float

WRITE string@SemByMelDojit

LABEL konec

Hodnoty GF@typ po druhém zavolání TYPE:
Value: None
Type: NoneType,
měla by však obsahovat:
Value: float
Type: str.

Toto vede k chybě u výše uvedeného validního kodu:
Undefined variable GF@typ on line 11: JUMPIFNEQ konec GF@typ string@float.

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.