Comments (2)
Als je parallelle uitvoering of "toekomstige testen" wilt ondersteunen, zou het beter zijn om van uitvoerformaat te wisselen naar de complete uitvoer in plaats van de partiële uitvoer. Het hele idee van de partiële uitvoer is om het sequentieel uitvoeren van testen eenvoudig te maken voor de judge, zodat je geen rekening moet houden met tijds- en geheugenlimieten.
Zodra je parallelle testen wilt uitvoeren, is het niet meer mogelijk om je test te openen wanneer die begint en te sluiten wanneer die eindigt - er zouden verschillende testen door elkaar lopen. De test pas openen en onmiddelijk sluiten als de uitvoering gedaan is, zou mogelijk zijn, maar als je judge dan stopgezet wordt door Dodona, zal deze test nog niet aangekondigd zijn en kan de result_constructor
dus geen 'testgeval met timeout' tonen. Voor parallelle executie heb je dus ook 'toekomstige testen' nodig: dan kan je bij het starten van parallelle executie deze testen tegelijk aankondigen en dan later laten invullen.
Om toekomstige testen te kunnen implementeren, zou je identifiers moeten toevoegen aan de channels/tests/testcases/... Dan kan je eerst een test aankondigen met een identifier, en dan later, wanneer deze effectief uitvoert, naar die eerdere aankondiging verwijzen met dezelfde identifier.
Zo'n implementatie vereist echter bookkeeping van de testen binnen de judge. Het is mogelijk dit optioneel te maken (startende testen zonder identifier worden beschouwd als nieuwe) en dan moeten bestaande judges niet gewijzigd worden. Als je echter toch je testen zal bookkeepen in je judge, kan je evengoed de complete uitvoer gebruiken (wat gewoon een JSON-serialisatie van de status van je testen is als je die toch bijhoudt) en moet de result_constructor
niet complexer gemaakt worden.
from universal-judge.
Bedankt voor de gedetailleerde uitleg.
Het idee van het op voorhand aankondigen van de channels/tests/testcases enz. heb ik nu binnen de judge gedaan voor de timeouts. Toch heb ik ervoor gekozen om het partiële formaat te behouden, omdat er dan nog steeds minder werk is bij de judge, zoals het propageren van de status of de "accepted".
Het in parallel uitvoeren heb ik (voorlopig) verwijderd (zie #41).
from universal-judge.
Related Issues (20)
- Make arguments of oracle consistent with return HOT 2
- Rename "value" to "expected_value" for outputs HOT 2
- Capture global scope HOT 1
- Rename DSL test hierarchy
- Support full DSL as example code in problem statement
- Verification if submission programming interfaces are implemented HOT 2
- Disallow additional keys in DSL
- Tracker for deprecated stuff
- Linking files is broken in DSL
- Improve ergonomics of language-specific literals HOT 1
- File URLs should be relative to description directory
- Fix newline behavior of standard input/output channels
- Resume if not all test cases were executed due to early exit
- Report non-zero exit status if zero exit status is expected
- Always report test cases in the same order as specified in the test suite
- Wrong line references HOT 1
- Multiple messages of non-executed cases
- Using `!v` for literal strings or objects as return values is not user friendly HOT 1
- Format for Dodona debugger HOT 1
- Support files for Dodona debugger (Python tutor)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from universal-judge.