Skip navigation

I revamped Fera’s testcase system to differentiate between expected failures/passing. The way it’s set up, it treats failed tests which were expected to pass as “regress”, and the opposite is marked as “fixed”. Example:

(pass)    decl-field1 (Declarations: Field (test 1))
(pass)    decl-field2 (Declarations: Field (test 2, verified result))
(regress) decl-property1 (Declarations: Property (test 1))
          Caught exception 'Object reference not set to an instance of an object.'
(regress) decl-property2 (Declarations: Property (test 2, verified result))
          Caught exception 'Object reference not set to an instance of an object.'
(pass)    helloworld (Hello, world!)
(pass)    echo1 (Echo (test 1))
(regress) echo2 (Echo (test 2: conversion to string))
          Unexpected program console output (padded to align to [U]nexp...):
          {no output}
(pass)    partial-types1 (Partial types)
(pass)    variables1 (Variable support (simple definition))
(pass)    variables2 (Variable support (initialization))
(pass)    variables3 (Variable support (assignment))
(pass)    variables4 (Variable support (variable as instance))
(fail)    field-get1 (Field access (test 1))
          Caught exception 'OpCode ldsfld have null operand'
(fail)    field-set1 (Field assignment (test 1))
          Compile was not successful (1 errors)
(fail)    field-set2 (Field assignment (test 2, verified result))
          Compile was not successful (1 errors)
(fail)    property-get1 (Property access (test 1))
          Compile was not successful (2 errors)
(fail)    property-set1 (Property assignment (test 1))
          Compile was not successful (1 errors)
(regress) mutate1 (Mutation (++x))
          Caught exception 'Operation is not valid due to the current state of the object.'
(pass)    methodcall1 (Method call (no parameters, void return))
(pass)    methodcall2 (Method call (1 parameter, void return))
(pass)    methodcall3 (Method call (1 parameter, throw-away return))
(pass)    methodcall4 (Method call (1 parameter, used return))
(pass)    methodcall5 (Method call (incorrect parameters, missing 1))
(pass)    methodcall6 (Method call (incorrect parameters, 1 extra))
(pass)    bool-constants1 (Boolean constants (true))
(pass)    bool-constants2 (Boolean constants (check))
(pass)    bool-not (Boolean unary operator (!))
(pass)    bool-and (Boolean binary operator (&&))
(pass)    bool-or (Boolean binary operator (||, test 1))
(pass)    bool-or2 (Boolean binary operator (||, test 2))
(pass)    bool-or3 (Boolean binary operator (||, test 3))
(pass)    invalid-standalone-expr1 (Invalid standalone expressions (x + 3))
(regress) invalid-standalone-expr2 (Invalid standalone expressions (MethodWithoutSideEffects()))
          Unexpected program console output (padded to align to [U]nexp...):
          success

(pass)    imports-structure1 (Imported Namespaces (unqualified type for method return))
(pass)    imports-structure1 (Imported Namespaces (unqualified type for method return))
(pass)    imports-imperative1 (Imported Namespaces (unqualified type for variable definition))
(pass)    switch1 (Switch test 1 (case variable scope))
(pass)    switch2 (Switch test 2 (dynamic cases))
(pass)    invalid-type-variable (Unknown type (variable))
(pass)    missing-variable-initializer (Missing variable initializer (var x;))
(pass)    valuetype-instance1 (Passing by-value types as instance parameter (int x; x.ToString ()))
(pass)    valuetype-instance2 (Passing by-value types as instance parameter (addressof parameter))
(pass)    valuetype-constant-instance1 (Passing by-value constants as instance parameter (38.ToString ()))
(pass)    arrays1 (Arrays (array def/construction))
(pass)    arrays2 (Arrays (element assignment))
(pass)    arrays3 (Arrays (element access))
(pass)    arrays4 (Arrays (use of Length))
(fail)    variable-params1 (Variable parameters (basic test 1))
          Compile was not successful (1 errors)
(fail)    generics1 (Generics (test 1))
          Compile was not successful (1 errors)

I also implemented translation support for all errors and messages in the Fera compiler (Fc). Here’s a sample run of a testcase in my (probably incorrect) Google Translate-based Spanish translation:

C:\fera>fc invalid-standalone-expr2.f /lang:es

invalid-standalone-expr2.f(13,4): Advertencia: 'FeraLanguageTest.Program.MethodWithoutSideEffects' El método no tiene efectos secundarios y devuelve un valor. Este uso del método e
s, probablemente, no.

Compilación éxito (invalid-standalone-expr2.exe): 1 advertencias

Mmm fun. Of course I also implemented a pseudo translation which makes Fera’s messages super brief and concise, useful for people who know what they’re doing and want the compiler to yap as little as possible.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: