Eve Feature Tests

The feature tests of Eve (the conformity tests), by level. Every test is a script (or a project folder) with its expected output in a comment block at the end: a driver passes when the machine prints exactly that and ends with the expected exit code. Each row shows what the test checks, taken from the first comment line of the file, and a link to the file in the code viewer. The tests are the specification that an implementation must pass: python script/runtest.py all runs them, and Smoke and Performance have their own pages.

Level 1: Scripts

The language of a single script. Version 0.1, 65 tests. The folder on GitHub.

CodeTestWhat it checksSource
a01a01_driverTest driver structure and single line commentsa01_driver.eve
a02a02_commentsEvery comment form of the language, then a negative enda02_comments.eve
a03a03_printprint writes a string and a new line; no import is neededa03_print.eve
a04a04_free_scripta free script: sequential statements, no driver and no processa04_free_script.eve
a05a05_print_writeprint adds a new line and separates its arguments with sep, write adds nothing; a list is one argument (Q-019b)a05_print_write.eve
a06a06_new_set_letnew creates variables, set creates constants, let changes a value (D-076, D-079)a06_new_set_let.eve
a07a07_arithmeticnumeric operators and their precedence (D-019)a07_arithmetic.eve
a08a08_logicrelation and logical operators, conditional statement and expressiona08_logic.eve
a09a09_literalsliterals of the primitive types (D-032, D-080)a09_literals.eve
a10a10_stringsstrings are immutable UTF-8 text (D-058, D-080)a10_strings.eve
a11a11_interpolationplaceholders {name} and {name % format}: a name, a literal or a simple expression, written by its type; \{ \} are literal braces; {U+H} Unicode (D-096, D-102, formats are a draft)a11_interpolation.eve
a12a12_ifif, else if, else and the conditional statement (D-016)a12_if.eve
a13a13_whilewhile loop with a header, break, else and then (D-030, D-033, D-034)a13_while.eve
a14a14_forfor loop over ranges and collections (D-022)a14_for.eve
a15a15_matchmatch with values, lists of values, ranges, other, then, one and all (D-016, D-030)a15_match.eve
a16a16_ordinalan Ordinal is a set of named integer values; the first value is 1 unless one is given (Q-029, D-096)a16_ordinal.eve
a17a17_listlist: literal, index, append, remove, capture, delete, builder, deconstruct (D-058 to D-060, D-077, D-079, D-096)a17_list.eve
a18a18_arrayarray: literal, index, slice, view and clone, bulk assignment, builder (D-021, D-022, D-049, D-079)a18_array.eve
a19a19_matrixmatrix: two indexes, last index, absolute index, [*] selects a dimension (D-058, D-064, D-079)a19_matrix.eve
a20a20_datasetDataSet: sorted unique values, union, intersection, difference (D-058)a20_dataset.eve
a21a21_datamapDataMap: a sorted map of key:value pairs; quoted or numeric keys (D-058, D-080)a21_datamap.eve
a22a22_objectObject: unquoted keys make an object, quoted or numeric keys make a DataMap (D-058, D-080)a22_object.eve
a23a23_clone_view:= shares a collection or an object, :: makes a deep copy, native values are always copied (D-049)a23_clone_view.eve
a27a27_text_literala text literal is raw and keeps the line breaks; the indentation of the closing quotes is removed (Q-014)a27_text_literal.eve
a28a28_regexregular expressions: =~ matches, not (...) negates; a string that starts with / is a regex literal and keeps its backslashes (D-079, D-097)a28_regex.eve
a29a29_expect_faila failed expect ends the process with exit code 2 (D-010)a29_expect_fail.eve
a30a30_overover ends the process it is in with exit code 0a30_over.eve
a31a31_recoveran error jumps to recover; reaching the end of recover handles the error (D-020)a31_recover.eve
a32a32_finalizefinalize runs after the process ends normally, and after recover (D-020)a32_finalize.eve
a33a33_over_finalizeover skips recover but runs finalize: a clean exit never skips cleanup (D-081)a33_over_finalize.eve
a34a34_jobsjobs: retry runs a failed job again, resume goes on after it (D-020, D-034)a34_jobs.eve
a35a35_index_errorindex 0 is an error: indexes start at 1 (D-021)a35_index_error.eve
a36a36_map_key_error+= on a missing key of a map raises an error (D-058)a36_map_key_error.eve
a37a37_division_errora division by zero raises an error, also for Real: no infinity, no NaN (Q-019a)a37_division_error.eve
a38a38_matrix_indexmatrix and tensor indexes: [x, y] is the same as [x][y]; a range selects a part (D-064)a38_matrix_index.eve
a39a39_repeatloop tested at the end: loop … do … repeat [while c]; and skip (D-074)a39_repeat.eve
a43a43_let_creates_namelet changes names and creates the ones that are missing, by type inference (Q-017, D-096)a43_let_creates_name.eve
a44a44_bare_assignmenta change without let is a syntax error (D-076)a44_bare_assignment.eve
a45a45_redeclareredeclaring a name in the same scope is an error (D-076)a45_redeclare.eve
a46a46_light_assignment= is the light assignment of a declaration; it never changes a variable (D-079)a46_light_assignment.eve
a47a47_string_plus_number+ between a string and a number is a type error; <+ converts the number (D-080)a47_string_plus_number.eve
a48a48_single_quote_texta rune holds one code point; 'one' is a lexical error (D-063)a48_single_quote_text.eve
a49a49_stop_in_jobstop ends a job without error; the process goes on with the next statement (D-020)a49_stop_in_job.eve
a50a50_exitexit ends the process without error and runs finalize (D-020)a50_exit.eve
a51a51_unhandled_erroran error without recover ends the process with the exit code 4, after finalize (D-081)a51_unhandled_error.eve
a52a52_asserta failed assert is an error with code 3: the process stops when it is not recovered (Q-031h, D-096)a52_assert.eve
a53a53_abortabort in recover ends the process, runs finalize and passes the error on (D-020)a53_abort.eve
a54a54_panicpanic ends the whole application at once with code 1, without finalize (D-038)a54_panic.eve
a57a57_conversionexplicit conversions do what the developer asked: floor, ceiling, round, parse (D-080; from demo/explicit_coercion.eve and demo/string_to_number.eve, D-099)a57_conversion.eve
a58a58_rune_rangea range of runes: ('a'..'c') visits the code points in order (from demo/symbol_range.eve, D-099)a58_rune_range.eve
a59a59_optional_nulla variable without a value has the zero value of its type, never null; an optional type T? may hold null (D-080; from demo/null_strings.eve, D-099)a59_optional_null.eve
a60a60_process_argsthe process receives the command-line arguments; a vararg collects them (D-029, D-040; from demo/method_call.eve and demo/test_args.eve, D-099)a60_process_args.eve
a62a62_multi_linea statement ends with ; so an expression or a literal may span several lines (from demo/multi_line.eve, D-099)a62_multi_line.eve
a63a63_range_domaina range is a domain of values: limits included or excluded, open ends, a step that sets the precision (D-022; from demo/domain_demo.eve and demo/numeric_range.eve, D-099)a63_range_domain.eve
a66a66_bad_placeholderin a string every unescaped brace opens a placeholder {name}; a literal brace is \{ or \} (D-102)a66_bad_placeholder.eve
a68a68_undefined_namean undefined name is a compile error: the script does not start (D-110)a68_undefined_name.eve
a75a75_raise_coderaise "text" creates an error with code 4 and that message (D-054, D-109)a75_raise_code.eve
a76a76_overflowinteger overflow is an error with its own code, 13 (D-109)a76_overflow.eve
a77a77_system_variablea driver can set a system variable and define its own $name (D-109)a77_system_variable.eve
a78a78_digit_separatorthe digit separator _ is not accepted in a number: a lexical error (Q-013, D-095)a78_digit_separator.eve
a80a80_let_capture_loopin a loop a capture creates its name once: the next turns assign it, they do not create it again (D-104)a80_let_capture_loop.eve
a81a81_let_undeclaredlet creates a missing name only in a capture: let y := 5 with no y is an error (D-104)a81_let_undeclared.eve
a82a82_list_endslist modifiers: <+ appends at the end, +> puts in front; the list stays after +> and before <+ (D-107)a82_list_ends.eve
a83a83_bulk_scalarcollection op scalar: the operator applies to every element (D-118)a83_bulk_scalar.eve
a84a84_bulk_string_errora bulk operation never builds strings: a string element or scalar is an error (D-118)a84_bulk_string_error.eve

Level 2: Subprograms

A project: functions, procedures, lambdas and closures, and aspects. Version 0.1, 63 tests. The folder on GitHub.

CodeTestWhat it checksSource
b01b01_apply_aspectapply runs the main process of an aspect from asp/ and waits (D-066)b01_apply_aspect.eve
b01b01_test1 (variation)variation 1 of b01: the same aspect, called in a loop with a computed argument (D-133)b01_test1.eve
b02b02_apply_outputan aspect gives results back through @ output parameters (D-048, D-066)b02_apply_output.eve
b02b02_test1 (variation)variation 1 of b02: results used as inputs, in a loop (D-133)b02_test1.eve
b03b03_apply_stateeach apply creates a new state of the aspect: a second call sees nothing of the first (D-066)b03_apply_state.eve
b03b03_test1 (variation)variation 1 of b03: three applies, three fresh states (D-133)b03_test1.eve
b04b04_apply_named_argsapply with arguments by position, by name and with a default value (D-028, D-066)b04_apply_named_args.eve
b04b04_test1 (variation)variation 1 of b04: every argument by name, in another order (D-133)b04_test1.eve
b05b05_apply_spreadspreading a list into positional arguments and a map into named arguments (D-072 i)b05_apply_spread.eve
b05b05_test1 (variation)variation 1 of b05: spread of a whole list and of a whole map (D-133)b05_test1.eve
b06b06_aspect_erroran error not recovered in the aspect is raised in the driver at the apply line (D-072 d)b06_aspect_error.eve
b06b06_test1 (variation)variation 1 of b06: the error code of the aspect is the code of the raise (D-133)b06_test1.eve
b07b07_aspect_overover in an aspect ends the aspect; the driver goes on after apply (D-072 d)b07_aspect_over.eve
b07b07_test1 (variation)variation 1 of b07: over in the aspect twice: the driver goes on each time (D-133)b07_test1.eve
b08b08_aspect_panicpanic in an aspect ends the whole application with exit code 1 (D-072 d)b08_aspect_panic.eve
b08b08_test1 (variation)variation 1 of b08: panic ends the application: the finalize of the driver does not run (D-133)b08_test1.eve
b09b09_log_fileslog_err and log_wrn write log files in the output folder out/ (D-057, D-114)b09_log_files.eve
b10b10_aspect_functiona function declared in an aspect is used by its main (D-066, D-100)b10_aspect_function.eve
b10b10_test1 (variation)variation 1 of b10: the function of the aspect with its default and by name (D-133)b10_test1.eve
b11b11_aspect_procedurea procedure of an aspect changes an aspect-level variable; the driver's own variable is not touched (D-066, D-100)b11_aspect_procedure.eve
b11b11_test1 (variation)variation 1 of b11: the state of the aspect is new in every call (D-133)b11_test1.eve
b12b12_aspect_fresh_statemain and the procedures of an aspect share its variables, and every apply starts them again (D-066)b12_aspect_fresh_state.eve
b12b12_test1 (variation)variation 1 of b12: the list of the aspect is new in every call, in a loop (D-133)b12_test1.eve
b13b13_aspect_missingapply of an aspect that has no file is an error before the run (D-112)b13_aspect_missing.eve
b14b14_aspect_too_many_argsmore positional arguments than parameters is a check-time error (D-112)b14_aspect_too_many_args.eve
b14b14_test1 (variation)variation 1 of b14: the right call: two arguments, then one (D-133)b14_test1.eve
b15b15_aspect_apply_aspectan aspect can't apply another aspect: compile error (D-066)b15_aspect_apply_aspect.eve
b16b16_aspect_recoveran aspect recovers its own error: the driver never sees it (D-020, D-072)b16_aspect_recover.eve
b16b16_test1 (variation)variation 1 of b16: the aspect recovers its own error, twice (D-133)b16_test1.eve
b17b17_aspect_tracean error nobody recovers: the error first, then the frames in order of call (D-113)b17_aspect_trace.eve
b18b18_lambdaa lambda is an anonymous function: held by a name, passed as an argument, held by a function type (D-109, D-147)b18_lambda.eve
b19b19_closurea closure keeps the state of the function that made it; every apply makes new closures (D-101, D-109)b19_closure.eve
b20b20_aspect_unknown_paraman argument named like no parameter is a check-time error (D-112)b20_aspect_unknown_param.eve
b20b20_test1 (variation)variation 1 of b20: the right name of the optional parameter (D-133)b20_test1.eve
b21b21_aspect_missing_arga missing mandatory argument is a check-time error (D-112)b21_aspect_missing_arg.eve
b21b21_test1 (variation)variation 1 of b21: the mandatory argument by name (D-133)b21_test1.eve
b22b22_aspect_wrong_typean argument of the wrong type is a check-time error (D-112)b22_aspect_wrong_type.eve
b23b23_aspect_default_exclusivean aspect without a kind word is exclusive (D-130)b23_aspect_default_exclusive.eve
b24b24_aspect_second_processan aspect has one process and it is named main (D-066)b24_aspect_second_process.eve
b25b25_aspect_driver_variablean aspect can't read a variable of the driver (D-072)b25_aspect_driver_variable.eve
b26b26_aspect_finalizefinalize of an aspect runs when main ends, also by over; then the driver goes on (D-063, D-072)b26_aspect_finalize.eve
b26b26_test1 (variation)variation 1 of b26: finalize in a loop, by return and by over (D-133)b26_test1.eve
b27b27_aspect_concurrenta concurrent aspect can also be applied, one call after the other (D-090)b27_aspect_concurrent.eve
b27b27_test1 (variation)variation 1 of b27: a concurrent aspect applied with other texts (D-133)b27_test1.eve
b28b28_aspect_folderapply with a folder: the aspect is searched there first, then in asp/ and in the root (D-112)b28_aspect_folder.eve
b28b28_test1 (variation)variation 1 of b28: only the aspect of the default folder (D-133)b28_test1.eve
b29b29_aspect_output_namedan @ output parameter that follows optional parameters is named at the call (D-106)b29_aspect_output_named.eve
b29b29_test1 (variation)variation 1 of b29: the default exponent, then both by name (D-133)b29_test1.eve
b30b30_functionfunctions: result, named arguments, default values, several results (D-028, D-070, D-086, D-087)b30_function.eve
b31b31_procedureprocedures: no result, side effects, @ passes by reference, no @ passes a copy (D-048, D-086, D-100)b31_procedure.eve
b32b32_recursiona function can call itself: Fibonacci (from demo/fibonacci.eve, D-099)b32_recursion.eve
b33b33_function_without_resulta function must have a result: a subprogram without result is declared with procedure (D-100)b33_function_without_result.eve
b34b34_procedure_banga procedure is made for side effects and is never deterministic: it never ends with ! (D-101)b34_procedure_bang.eve
b35b35_exit_procedureexit in a procedure leaves only the procedure; the process goes on (D-111)b35_exit_procedure.eve
b36b36_over_procedureover in a procedure ends the whole process, not only the procedure (D-111)b36_over_procedure.eve
b37b37_param_ordera mandatory parameter may follow optional ones, and the call then names it (D-106)b37_param_order.eve
b38b38_named_requireda parameter after optional parameters can't be positional: the call must name it (D-106)b38_named_required.eve
b39b39_vararg_functiona vararg collects the rest of the arguments; an optional parameter after it is named (D-029)b39_vararg_function.eve
b40b40_procedure_in_expressiona procedure has no value: it can't be used in an expression (D-100)b40_procedure_in_expression.eve
b41b41_variant_paramsa variant type holds one of the listed types and takes the type of the value assigned (from demo/variant_type.eve and demo/variant_params.eve, D-099)b41_variant_params.eve
b42b42_defer_proceduredefer in a procedure runs when the procedure ends, by any path, in reverse order (D-081)b42_defer_procedure.eve
b43b43_vararg_procedurea vararg parameter collects the arguments of a procedure; * spreads a list into it (D-029, D-040)b43_vararg_procedure.eve
b44b44_lambda_calla lambda is not called where it is written: it gets a name, then the name is called (D-147)b44_lambda_call.eve

Level 3: Modules

Modules and imports, local libraries, then classes and methods. Version 0.2, 50 tests. The folder on GitHub.

CodeTestWhat it checksSource
c01c01_import_moduleImport a module with an unquoted path; members are reached as module.member (D-072)c01_import_module.eve
c01c01_test1 (variation)variation 1 of c01: the same module, another use case: only the constant, no call (D-133)c01_test1.eve
c01c01_test2 (variation)variation 2 of c01: the same module under an alias, called in a loop (D-133)c01_test2.eve
c02c02_import_string_pathImport with a path written as a string (D-072)c02_import_string_path.eve
c02c02_test1 (variation)variation 1 of c02: a string path and the members without prefix (D-133)c02_test1.eve
c03c03_import_aliasuse (m as x): members are reached through the alias (D-072)c03_import_alias.eve
c03c03_test1 (variation)variation 1 of c03: the same module without a prefix (D-133)c03_test1.eve
c04c04_import_membersuse (m(*)): the exported members of m are used without prefix (D-072)c04_import_members.eve
c04c04_test1 (variation)variation 1 of c04: the same module with its name as prefix (D-133)c04_test1.eve
c05c05_import_alluse (*): every module of the folder, names merged into the scope (D-072)c05_import_all.eve
c05c05_test1 (variation)variation 1 of c05: the two modules one by one, each with its prefix (D-133)c05_test1.eve
c06c06_module_lifecycleinitialize runs at the import, finalize after the process of the driver (D-068)c06_module_lifecycle.eve
c06c06_test1 (variation)variation 1 of c06: a module that is imported and never called (D-133)c06_test1.eve
c07c07_module_singletona module is loaded once: the driver and an aspect share the same copy (D-068)c07_module_singleton.eve
c07c07_test1 (variation)variation 1 of c07: the aspect applied twice shares the same module (D-133)c07_test1.eve
c08c08_module_privatea member that a module does not export can't be used outside it (D-068, D-085, Q-022 b)c08_module_private.eve
c08c08_test1 (variation)variation 1 of c08: the exported members only (D-133)c08_test1.eve
c09c09_extension_methodan extension method: a method with @self of a class, declared outside the class (D-072, D-085)c09_extension_method.eve
c09c09_test1 (variation)variation 1 of c09: another extension of the imported class (D-133)c09_test1.eve
c10c10_classclass with a constructor, methods, visibility, reference and clone (D-076, D-084, D-085)c10_class.eve
c11c11_extension_method_localan extension method: declared outside the class, first parameter @self with the class type (D-086)c11_extension_method_local.eve
c12c12_inheritancea subclass builds its object through the constructor of its superclass (D-084)c12_inheritance.eve
c13c13_visibilitya private member is seen only inside its class (D-085)c13_visibility.eve
c14c14_attribute_outsidecode outside a class can't add an attribute to an object (Q-019h, Q-031k, D-096)c14_attribute_outside.eve
c15c15_procedure_in_classa class hosts only methods: a procedure in a class body is a compile error (D-103, D-123)c15_procedure_in_class.eve
c16c16_function_selfa function or a procedure can't be bound to a class with @self: only a method can (D-123)c16_function_self.eve
c17c17_function_in_classa class hosts only methods: a function in a class body is a compile error (D-123)c17_function_in_class.eve
c18c18_module_conflictuse (m(*)) merges the names: two modules that export the same name are a compile error (D-112 a)c18_module_conflict.eve
c18c18_test1 (variation)variation 1 of c18: the right way: the two modules by name (D-133)c18_test1.eve
c19c19_export_variablea module has no public variables: exporting one is a compile error (D-068)c19_export_variable.eve
c20c20_export_undeclaredexport lists declared members only: an undeclared name is a compile error (proposed)c20_export_undeclared.eve
c21c21_module_instancea module is not a class: it has no instances (D-068)c21_module_instance.eve
c22c22_module_init_orderdependencies are initialized first, and finalized last: the reverse order of the initialization (D-068)c22_module_init_order.eve
c22c22_test1 (variation)variation 1 of c22: only the module with no import (D-133)c22_test1.eve
c22c22_test2 (variation)variation 2 of c22: both modules, the dependent one first in the list (D-133)c22_test2.eve
c23c23_module_free_statementa module holds declarations and regions only: a free statement is a compile error (D-126)c23_module_free_statement.eve
c24c24_import_free_scripta free script can't export anything and can't be imported (D-126)c24_import_free_script.eve
c25c25_module_not_founda module that is not found is the error $err_module (code 30), raised at the import, before the process starts (D-131)c25_module_not_found.eve
c26c26_managed_module_variablea managed module is rejected when it has a variable that is not atomic (D-129)c26_managed_module_variable.eve
c27c27_managed_module_direct_calla managed module that calls a direct module is rejected (D-129)c27_managed_module_direct_call.eve
c28c28_managed_modulea managed module is accepted: no variable, no unsafe call (D-129)c28_managed_module.eve
c28c28_test1 (variation)variation 1 of c28: a managed module under an alias (D-133)c28_test1.eve
c29c29_managed_module_atomica managed module is accepted when every variable is Atomic(:T) (D-129, D-132)c29_managed_module_atomic.eve
c29c29_test1 (variation)variation 1 of c29: the atomic counter, many times (D-133)c29_test1.eve
c30c30_atomic_classclass Name <: Atomic(:T) declares an atomic type (D-132)c30_atomic_class.eve
c30c30_test1 (variation)variation 1 of c30: a type derived from Atomic, used ten times (D-133)c30_test1.eve
c31c31_atomic_variableAtomic(:T) is a library class: a variable is declared :Atomic(:Integer) and used like an Integer (D-132)c31_atomic_variable.eve
c32c32_module_path_spellingthe same module reached by two spellings of the path is one module: loaded once, one state (D-068)c32_module_path_spelling.eve
c33c33_managed_bare_calla managed module can not call a direct module, also by a bare name from m(*) (D-129)c33_managed_bare_call.eve
c33c33_test1 (variation)variation 1 of c33: the bare name of a managed module is accepted (D-133)c33_test1.eve

Level 4: Parallel

Parallel processing and streams, generics and traits. Version 0.3, 42 tests. The folder on GitHub.

CodeTestWhat it checksSource
d01d01_concurrent_direct_callthe compiler flags the call of a direct module from a concurrent aspect (D-129)d01_concurrent_direct_call.eve
d02d02_concurrent_managed_calla concurrent aspect calls a managed module (D-129)d02_concurrent_managed_call.eve
d02d02_test1 (variation)variation 1 of d02: the concurrent aspect with another input (D-133)d02_test1.eve
d03d03_concurrent_bare_calla concurrent aspect can not call an unsafe member, also by a bare name from m(*) (D-129)d03_concurrent_bare_call.eve
d04d04_parallel_grouptwo parallel groups run one after the other; the output of a group is in the order of start (D-140)d04_parallel_group.eve
d05d05_parallel_outputseach started aspect writes its own element of an array; the results are ready after done (D-140)d05_parallel_outputs.eve
d05d05_test1 (variation)variation 1 of d05: start inside if, inputs by value, a declaration local to the group (D-140)d05_test1.eve
d06d06_start_exclusivestart of an aspect without a kind word is a compile error: it is exclusive (D-130, D-140)d06_start_exclusive.eve
d07d07_start_outside_groupstart outside the do region of a parallel group is a compile error (D-140)d07_start_outside_group.eve
d08d08_same_outputtwo starts of a group can not receive the same output variable (D-140, $err_output)d08_same_output.eve
d08d08_test1 (variation)variation 1 of d08: an output with a computed index is checked at start: $err_output 43 (D-140)d08_test1.eve
d09d09_parallel_errorfailed tasks do not stop the others; done raises ParallelError with the errors in the order of start (D-140)d09_parallel_error.eve
d09d09_test1 (variation)variation 1 of d09: nobody recovers the ParallelError: exit 4, one line per failed task (D-140)d09_test1.eve
d09d09_test2 (variation)variation 2 of d09: retry in recover runs the whole group again (D-066, D-140)d09_test2.eve
d10d10_on_error_cancelon error cancel stops the other tasks after the first failure; they are counted, not listed (D-140)d10_on_error_cancel.eve
d11d11_within_timeoutwithin sets a deadline: a task still running gets a TimeoutError (D-140, D-144)d11_within_timeout.eve
d12d12_channel_pipelinea pipeline: one producer, four workers and a collector connected by two channels (D-141)d12_channel_pipeline.eve
d13d13_channel_closedsend into a closed channel raises ChannelError, code 46 (D-141)d13_channel_closed.eve
d14d14_deadlocka consumer that waits on a channel nobody sends to is a deadlock; the error names it (D-141)d14_deadlock.eve
d15d15_atomic_countereight tasks add to an Atomic(:Integer) of a managed module: the total is exact (D-132, D-140)d15_atomic_counter.eve
d16d16_split_batchsplit(k) and batch(n) cut a list; the parts are summed in parallel and combined by index (D-142)d16_split_batch.eve
d17d17_job_spawnspawn starts async procedures in a job, await waits for an async function; done waits for every task (D-143)d17_job_spawn.eve
d18d18_spawn_functionspawn of an async function is a compile error: its result would be lost (D-143)d18_spawn_function.eve
d19d19_async_plain_callan async procedure called without spawn or await is a compile error (D-104 b)d19_async_plain_call.eve
d20d20_traita class adopts a trait: it writes the required method and gets the provided one (D-145)d20_trait.eve
d21d21_trait_missing_methoda class that does not write a required method of its trait is a compile error (D-145)d21_trait_missing_method.eve
d22d22_abstract_classan abstract class is built only by the constructor of a subclass that writes its required method (D-145)d22_abstract_class.eve
d23d23_abstract_newan abstract class can not be created outside the constructor of a subclass (D-145)d23_abstract_new.eve
d24d24_generic_classa generic class is made with its type argument written; a constraint asks for a trait (D-145)d24_generic_class.eve
d25d25_nested_groupan aspect started by the driver opens a group of two leaf aspects; outputs keep the order of start (D-081, D-140)d25_nested_group.eve
d26d26_nested_too_manyan aspect group holds at most two start statements (D-081, D-140)d26_nested_too_many.eve
d27d27_start_orderthe output of a group is written in the order of start, whatever task ends first (D-140, D-144)d27_start_order.eve
d28d28_channel_receivereceive(@x) takes one value; a for loop takes the rest until the channel is closed (D-141)d28_channel_receive.eve
d28d28_test1 (variation)variation 1 of d28: receive from a closed, empty channel raises ChannelError 46 (D-141)d28_test1.eve
d28d28_test2 (variation)variation 2 of d28: a close beyond the number of senders is an error (D-141)d28_test2.eve
d29d29_auto_closea failing producer does not close its channel: the machine closes it, so the consumer ends (D-141)d29_auto_close.eve
d30d30_channel_timeouta wait on a channel longer than $timeout raises TimeoutError in that task (D-081, D-141)d30_channel_timeout.eve
d31d31_leaf_groupan aspect started by an aspect is a leaf: a parallel group in it is a compile error (D-081, D-140)d31_leaf_group.eve
d32d32_parallel_in_procedurea parallel group in a procedure is a compile error: only in the main of a driver or of an aspect (D-140)d32_parallel_in_procedure.eve
d33d33_job_spawn_errora failing spawned task does not stop the others; the done of the job raises ParallelError (D-143)d33_job_spawn_error.eve
d34d34_trait_conflicttwo traits that provide the same method force the class to write it (D-145)d34_trait_conflict.eve
d35d35_library_traitsa Printable object prints its describe; Comparable gives compare to numbers and texts (D-145)d35_library_traits.eve

Level 5: Data

Data language (types, records, generators, files, formats, HTTP client), database layer and the Eve database. Version 0.4, 22 tests. The folder on GitHub.

CodeTestWhat it checksSource
e01e01_generic_functiona generic function has a list of types before its parameters; the call infers the types or writes them (D-148)e01_generic_function.eve
e02e02_generic_procedurea generic procedure takes a list of types; the call infers it or writes it (D-148)e02_generic_procedure.eve
e03e03_generic_methoda method has its own list of types, in a generic class or in a plain class (D-148)e03_generic_method.eve
e04e04_generic_processthe process of an aspect takes a list of types; apply infers it or writes it (D-148); one Eve macro (D-152)e04_generic_process.eve
e05e05_overload_typesfunctions and procedures share a name when the types of their parameters differ (D-149)e05_overload_types.eve
e06e06_overload_countfunctions and procedures share a name when the number of their parameters differs (D-149)e06_overload_count.eve
e07e07_overload_resultfunctions that differ only by the type of the result: the type expected at the call selects one (D-149)e07_overload_result.eve
e08e08_overload_ambiguousa call that does not fix the type of the result of an overloaded function is ambiguous: compile error (D-149)e08_overload_ambiguous.eve
e09e09_overload_defaultsa default value can make two signatures match the same call: compile error (D-149)e09_overload_defaults.eve
e10e10_overload_no_matcha call that matches no signature of an overloaded name is a compile error (D-149)e10_overload_no_match.eve
e11e11_function_procedure_namea function and a procedure never share a name: compile error (D-149)e11_function_procedure_name.eve
e12e12_same_signaturetwo declarations with the same signature are a compile error (D-149)e12_same_signature.eve
e13e13_method_result_or_nota method without a result and one with a result share a name: a statement calls the first, an expression the second (D-149)e13_method_result_or_not.eve
e14e14_generic_lambdaa lambda has no list of types: compile error (D-148)e14_generic_lambda.eve
e15e15_type_not_inferreda type that the arguments do not give must be written at the call: compile error (D-148)e15_type_not_inferred.eve
e16e16_macro_applyan Eve macro: shared declarations, an exclusive aspect and the driver in one file (D-152)e16_macro_apply.eve
e17e17_macro_parallelan Eve macro starts its concurrent aspects in a parallel group; a shared class carries the results (D-152)e17_macro_parallel.eve
e18e18_macro_atomicconcurrent aspects of a macro add to a shared atomic variable: the total is exact (D-152, D-132)e18_macro_atomic.eve
e19e19_macro_unsafe_variablea concurrent aspect of a macro can not use a shared variable that is not atomic: compile error (D-152)e19_macro_unsafe_variable.eve
e20e20_macro_unsafe_procedurea concurrent aspect of a macro can not call a shared procedure that changes a plain variable: compile error (D-152)e20_macro_unsafe_procedure.eve
e21e21_macro_two_driversa macro has one driver: a second one is a compile error (D-152)e21_macro_two_drivers.eve
e22e22_macro_statementa statement outside a declaration is a compile error in a macro (D-152)e22_macro_statement.eve

Level 6: Server

The Eve machine and the server. Version 0.5, no tests yet. The folder on GitHub.

Level 7: Web

Web: HTML and WebAssembly. Version 0.6, no tests yet. The folder on GitHub.