PR# 19741 Error upon generating clickable view of a feature
Problem Report Summary
Submitter: rosivaldo
Category: EiffelStudio
Priority: Medium
Date: 2021/04/14
Class: Bug
Severity: Serious
Number: 19741
Release: 20.11.10.5048 - win64
Confidential: No
Status: Open
Responsible:
Environment: win64 (mingw)
Synopsis: Error upon generating clickable view of a feature
Description
Several features that mix class features with agents fail to produce a clickable view, impairing documentation (class clickable and flat view etc.) and, worse, debugging. For example, the three features below, which are presented with their basic text view and with the failed clickable view.
>>>
Basic text view:
test_flipped
-- Test {STI_TRANSFORMER}.flipped.
note
testing: "covers/{STI_TRANSFORMER}.flipped"
do
assert ("flipped", attached {like transformer_to_be_tested}.flipped (agent f_x_acc, some_object_b, some_object_a) implies True)
end
Clickable view:
test_flipped
-- Test {STI_TRANSFORMER}.flipped.
do
assert ("flipped", attached {like transformer_to_be_tested}.flipped (agent f_x_acc, some_object_b, some_object_a)Format could not be generated.
Please make sure that the system is not being compiled and that the last compilation was successful.
<<<
>>>
Basic text view:
singleton_crossed_tuples_ok (
s: STI_SET [A, EQ]; x: A; ts: STS_SET [STS_N_TUPLE [A, EQ], STS_N_TUPLE_EQUALITY [A, EQ]]
): BOOLEAN
-- Do the properties verified within set theory hold for {STI_SET}.singleton_crossed_tuples?
local
ns: STI_SET [NATURAL, STS_OBJECT_EQUALITY [NATURAL]]
m: REAL_64
l_check: BOOLEAN
do
u := u ∪ s & x ∪ {like tuple_to_set}.set_map (ts, agent {STS_N_TUPLE [A, EQ]}.terms).reduced (o, agent {STS_SET [A, EQ]}.united)
ns := {like tuple_to_natural}.set_map (
ts, agent (t: STS_N_TUPLE [A, EQ]): NATURAL
do
Result := t.n + 1
end
)
m := {like natural_to_real_64}.set_reduction (
ns, 0, agent (acc: REAL_64; n: NATURAL): REAL_64
do
Result := acc + (# u) ^ n
end
)
if m <= Max_tuples then
if m > Max_asserted_tuples then
l_check := {ISE_RUNTIME}.check_assert (False)
end
check
definition: s.singleton_crossed_tuples (x, ts) ≍ (
{like natural_to_tuple_set}.set_reduction (
ns, ts.o, agent (acc: STS_SET [STS_N_TUPLE [A, EQ], STS_N_TUPLE_EQUALITY [A, EQ]]; n: NATURAL): STS_SET [STS_N_TUPLE [A, EQ], STS_N_TUPLE_EQUALITY [A, EQ]]
do
Result := acc ∪ (u ^ n)
end
) | agent (t: STS_N_TUPLE [A, EQ]; ia_x: A; ia_ts: STS_SET [STS_N_TUPLE [A, EQ], STS_N_TUPLE_EQUALITY [A, EQ]]): BOOLEAN
do
Result := (not t.is_unit and then eq (ia_x, t.first)) and ia_ts ∋ t.tail
end (?, x, ts)
)
then
end
if l_check then
l_check := {ISE_RUNTIME}.check_assert (l_check)
end
end
check
cardinality: # s.singleton_crossed_tuples (x, ts) = # ts
then
Result := True
end
ensure
u: u ≍ old (u ∪ s & x ∪ {like tuple_to_set}.set_map (ts, agent {STS_N_TUPLE [A, EQ]}.terms).reduced (o, agent {STS_SET [A, EQ]}.united))
end
Clickable view:
singleton_crossed_tuples_ok (s: STI_SET [A, EQ]; x: A; ts: STS_SET [STS_N_TUPLE [A, EQ], STS_N_TUPLE_EQUALITY [A, EQ]]): BOOLEAN
-- Do the properties verified within set theory hold for {STI_SET}.singleton_crossed_tuples?
local
ns: STI_SET [NATURAL_32, STS_OBJECT_EQUALITY [NATURAL_32]]
m: REAL_64
l_check: BOOLEAN
do
u := u ∪ s & x ∪ {like tuple_to_set}.set_map (ts, agent {STS_N_TUPLE [A, EQ]}.terms).reduced (o, agent {STS_SET [A, EQ]}.united)
ns := {like tuple_to_natural}.set_map (ts, agent (t: STS_N_TUPLE [A, EQ]): NATURAL_32
do
Result := t.n + 1
end)
m := {like natural_to_real_64}.set_reduction (ns, 0.to_double, agent (acc: REAL_64; n: NATURAL_32): REAL_64
do
Result := acc + (# u) ^ n.to_real_64
end)
if m <= Max_tuples.to_real_64 then
if m > Max_asserted_tuples.to_real_64 then
l_check := {ISE_RUNTIME}.check_assert (False)
end
check
definition: s.singleton_crossed_tuples (x, ts)Format could not be generated.
Please make sure that the system is not being compiled and that the last compilation was successful.
<<<
>>>
Basic text view:
default_create
-- Create the universe of complex numbers, i.e. ℂ.
local
real_numbers, r1, r2: like Real_universe.others
z: like any_anchor
do
from
others := O
check
is_disjoint: R.O.is_disjoint (R) -- R.O.is_empty
end
real_numbers := R.O.batch_extended (R)
r1 := real_numbers
invariant
building_up: others ≍{
TRANSFORMER [
STS_ORDERED_PAIR [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
STS_COMPLEX_NUMBER,
STS_ORDERED_PAIR_EQUALITY [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
STS_NEW_COMPLEX_EQUALITY
]
}.set_map ((R ∖ r1) × R, agent complex_from_pair)
until
r1.is_empty
loop
from
r2 := real_numbers
invariant
r1_is_not_empty: not r1.is_empty -- Outer loop is not finished.
still_building_up: others ≍ ({
TRANSFORMER [
STS_ORDERED_PAIR [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
STS_COMPLEX_NUMBER,
STS_ORDERED_PAIR_EQUALITY [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
STS_NEW_COMPLEX_EQUALITY
]
}.set_map ((R ∖ r1) × R, agent complex_from_pair) ∪ {
TRANSFORMER [
STS_ORDERED_PAIR [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
STS_COMPLEX_NUMBER,
STS_ORDERED_PAIR_EQUALITY [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
STS_NEW_COMPLEX_EQUALITY
]
}.set_map ({
TRANSFORMER [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_NEW_REAL_EQUALITY, STS_NEW_REAL_EQUALITY]
}.singleton_crossed_set (r1.any, R ∖ r2), agent complex_from_pair))
until
r2.is_empty
loop
check
-- Loops are not finished.
r1_is_not_empty: not r1.is_empty
r2_is_not_empty: not r2.is_empty
end
create z.make (r1.any, r2.any)
check
does_not_have: others ∌ z -- loop invariant
end
others := others.extended (z)
r2 := r2.others
variant
r2_n: natural_as_integer (# r2)
end
r1 := r1.others
variant
r1_n: natural_as_integer (# r1)
end
check
is_not_empty: not others.is_empty -- not R.is_empty
end
z := others.any
others := others.others
create any_storage.put (z)
ensure then
definition: Current ≍ {
TRANSFORMER [
STS_ORDERED_PAIR [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
STS_COMPLEX_NUMBER,
STS_ORDERED_PAIR_EQUALITY [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
STS_NEW_COMPLEX_EQUALITY
]
}.set_map (× R, agent complex_from_pair)
end
Clickable view:
default_create
-- Create the universe of complex numbers, i.e. â.
-- (export status {NONE})
require -- from ANY
True
local
real_numbers, r1, r2: like Real_universe.others
z: like Any_anchor
do
from
others := O
check
is_disjoint: R.O.is_disjoint (R)
end
real_numbers := R.O.batch_extended (R)
r1 := real_numbers
invariant
building_up: othersFormat could not be generated.
Please make sure that the system is not being compiled and that the last compilation was successful.
<<<
To Reproduce
I wasn't able to create a small system where the issue manifests itself. Should I send my entire system for analysis?
Problem Report Interactions