From 0519cfa92cbf2f7efb13e2b3861f2d684fcd329b Mon Sep 17 00:00:00 2001
From: Christian Gram Kalhauge <chrg@dtu.dk>
Date: Wed, 28 Feb 2024 23:14:01 +0100
Subject: [PATCH] Many changes made

---
 rtree-c/src/ReduceC.hs                        | 58 ++++++++++++++-----
 rtree-c/test/cases/small/functions.c          |  9 +++
 .../reduction/{r000000000.c => r0000000000.c} |  7 ++-
 .../reduction/{r0000001.c => r0000000001.c}   |  5 +-
 .../reduction/{r000000001.c => r0000000010.c} |  7 ++-
 .../test/expected/add/reduction/r0000000011.c | 19 ++++++
 .../reduction/{r000000010.c => r0000000100.c} |  7 ++-
 .../test/expected/add/reduction/r0000000101.c | 19 ++++++
 .../reduction/{r000000011.c => r0000000110.c} |  7 ++-
 .../test/expected/add/reduction/r0000000111.c | 19 ++++++
 .../test/expected/add/reduction/r0000001000.c | 19 ++++++
 .../test/expected/add/reduction/r0000001001.c | 19 ++++++
 .../test/expected/add/reduction/r0000001010.c | 19 ++++++
 .../test/expected/add/reduction/r0000001011.c | 19 ++++++
 .../test/expected/add/reduction/r0000001100.c | 19 ++++++
 .../test/expected/add/reduction/r0000001101.c | 19 ++++++
 .../test/expected/add/reduction/r000000111.c  | 18 ++++++
 rtree-c/test/expected/add/reduction/r000001.c |  2 +-
 .../test/expected/add/reduction/r0000100000.c | 19 ++++++
 .../test/expected/add/reduction/r0000100001.c | 19 ++++++
 .../test/expected/add/reduction/r0000100010.c | 19 ++++++
 .../test/expected/add/reduction/r0000100011.c | 19 ++++++
 .../test/expected/add/reduction/r0000100100.c | 19 ++++++
 .../test/expected/add/reduction/r0000100101.c | 19 ++++++
 .../test/expected/add/reduction/r0000100110.c | 19 ++++++
 .../test/expected/add/reduction/r0000100111.c | 19 ++++++
 .../test/expected/add/reduction/r0000101000.c | 19 ++++++
 .../test/expected/add/reduction/r0000101001.c | 19 ++++++
 .../test/expected/add/reduction/r0000101010.c | 19 ++++++
 .../test/expected/add/reduction/r0000101011.c | 19 ++++++
 .../test/expected/add/reduction/r0000101100.c | 19 ++++++
 .../test/expected/add/reduction/r0000101101.c | 19 ++++++
 .../test/expected/add/reduction/r000010111.c  | 18 ++++++
 rtree-c/test/expected/add/reduction/r000011.c |  6 +-
 .../reduction/{r000010000.c => r0001000000.c} |  7 ++-
 .../reduction/{r0000101.c => r0001000001.c}   |  5 +-
 .../reduction/{r000010001.c => r0001000010.c} |  7 ++-
 .../test/expected/add/reduction/r0001000011.c | 19 ++++++
 .../reduction/{r000010010.c => r0001000100.c} |  7 ++-
 .../test/expected/add/reduction/r0001000101.c | 19 ++++++
 .../reduction/{r000010011.c => r0001000110.c} |  7 ++-
 .../test/expected/add/reduction/r0001000111.c | 19 ++++++
 .../test/expected/add/reduction/r0001001000.c | 19 ++++++
 .../test/expected/add/reduction/r0001001001.c | 19 ++++++
 .../test/expected/add/reduction/r0001001010.c | 19 ++++++
 .../test/expected/add/reduction/r0001001011.c | 19 ++++++
 .../test/expected/add/reduction/r0001001100.c | 19 ++++++
 .../test/expected/add/reduction/r0001001101.c | 19 ++++++
 .../test/expected/add/reduction/r000100111.c  | 18 ++++++
 rtree-c/test/expected/add/reduction/r000101.c |  9 ++-
 .../test/expected/add/reduction/r0001100000.c | 19 ++++++
 .../test/expected/add/reduction/r0001100001.c | 19 ++++++
 .../test/expected/add/reduction/r0001100010.c | 19 ++++++
 .../test/expected/add/reduction/r0001100011.c | 19 ++++++
 .../test/expected/add/reduction/r0001100100.c | 19 ++++++
 .../test/expected/add/reduction/r0001100101.c | 19 ++++++
 .../test/expected/add/reduction/r0001100110.c | 19 ++++++
 .../test/expected/add/reduction/r0001100111.c | 19 ++++++
 .../test/expected/add/reduction/r0001101000.c | 19 ++++++
 .../test/expected/add/reduction/r0001101001.c | 19 ++++++
 .../test/expected/add/reduction/r0001101010.c | 19 ++++++
 .../test/expected/add/reduction/r0001101011.c | 19 ++++++
 .../test/expected/add/reduction/r0001101100.c | 19 ++++++
 .../test/expected/add/reduction/r0001101101.c | 19 ++++++
 .../test/expected/add/reduction/r000110111.c  | 18 ++++++
 .../add/reduction/{r00011.c => r000111.c}     |  7 ++-
 .../reduction/{r00010000.c => r001000000.c}   |  7 ++-
 .../test/expected/add/reduction/r001000001.c  | 18 ++++++
 .../reduction/{r00010001.c => r001000010.c}   |  7 ++-
 .../test/expected/add/reduction/r001000011.c  | 18 ++++++
 .../reduction/{r00010010.c => r001000100.c}   |  7 ++-
 .../test/expected/add/reduction/r001000101.c  | 18 ++++++
 .../reduction/{r00010011.c => r001000110.c}   |  7 ++-
 .../test/expected/add/reduction/r001000111.c  | 18 ++++++
 .../test/expected/add/reduction/r001001000.c  | 18 ++++++
 .../test/expected/add/reduction/r001001001.c  | 18 ++++++
 .../test/expected/add/reduction/r001001010.c  | 18 ++++++
 .../test/expected/add/reduction/r001001011.c  | 18 ++++++
 .../test/expected/add/reduction/r001001100.c  | 18 ++++++
 .../test/expected/add/reduction/r001001101.c  | 18 ++++++
 .../test/expected/add/reduction/r00100111.c   | 17 ++++++
 rtree-c/test/expected/add/reduction/r00101.c  |  9 ++-
 .../reduction/{r0010000.c => r001100000.c}    |  6 +-
 .../test/expected/add/reduction/r001100001.c  | 18 ++++++
 .../reduction/{r0010001.c => r001100010.c}    |  6 +-
 .../test/expected/add/reduction/r001100011.c  | 18 ++++++
 .../reduction/{r0010010.c => r001100100.c}    |  6 +-
 .../test/expected/add/reduction/r001100101.c  | 18 ++++++
 .../reduction/{r0010011.c => r001100110.c}    |  6 +-
 .../test/expected/add/reduction/r001100111.c  | 18 ++++++
 .../test/expected/add/reduction/r001101000.c  | 18 ++++++
 .../test/expected/add/reduction/r001101001.c  | 18 ++++++
 .../test/expected/add/reduction/r001101010.c  | 18 ++++++
 .../test/expected/add/reduction/r001101011.c  | 18 ++++++
 .../test/expected/add/reduction/r001101100.c  | 18 ++++++
 .../test/expected/add/reduction/r001101101.c  | 18 ++++++
 .../test/expected/add/reduction/r00110111.c   | 17 ++++++
 .../add/reduction/{r0011.c => r00111.c}       |  1 +
 .../add/reduction/{r010000.c => r0100000.c}   |  5 +-
 .../add/reduction/{r0101.c => r0100001.c}     |  3 +
 .../add/reduction/{r010001.c => r0100010.c}   |  5 +-
 .../test/expected/add/reduction/r0100011.c    | 15 +++++
 .../add/reduction/{r010010.c => r0100100.c}   |  5 +-
 .../test/expected/add/reduction/r0100101.c    | 15 +++++
 .../add/reduction/{r010011.c => r0100110.c}   |  5 +-
 .../test/expected/add/reduction/r0100111.c    | 15 +++++
 .../test/expected/add/reduction/r0101000.c    | 15 +++++
 .../test/expected/add/reduction/r0101001.c    | 15 +++++
 .../test/expected/add/reduction/r0101010.c    | 15 +++++
 .../test/expected/add/reduction/r0101011.c    | 15 +++++
 .../test/expected/add/reduction/r0101100.c    | 15 +++++
 .../test/expected/add/reduction/r0101101.c    | 15 +++++
 rtree-c/test/expected/add/reduction/r010111.c | 14 +++++
 rtree-c/test/expected/add/reduction/r10000.c  | 10 ++++
 rtree-c/test/expected/add/reduction/r10001.c  | 10 ++++
 rtree-c/test/expected/add/reduction/r10010.c  | 10 ++++
 rtree-c/test/expected/add/reduction/r10011.c  | 10 ++++
 rtree-c/test/expected/add/reduction/r10100.c  | 10 ++++
 rtree-c/test/expected/add/reduction/r10101.c  | 10 ++++
 .../expected/add/reduction/{r10.c => r1011.c} |  2 +
 .../expected/constant/reduction/r000000.c     |  2 +-
 .../expected/constant/reduction/r000001.c     |  6 +-
 .../expected/constant/reduction/r000010.c     | 13 +++++
 .../expected/constant/reduction/r000011.c     | 13 +++++
 .../constant/reduction/{r00001.c => r00010.c} |  2 +-
 .../constant/reduction/{r0001.c => r00011.c}  |  1 +
 .../expected/constant/reduction/r010000.c     |  2 +-
 .../expected/constant/reduction/r010001.c     |  6 +-
 .../expected/constant/reduction/r010010.c     | 12 ++++
 .../expected/constant/reduction/r010011.c     | 12 ++++
 .../constant/reduction/{r01001.c => r01010.c} |  2 +-
 .../constant/reduction/{r0101.c => r01011.c}  |  1 +
 .../expected/constant/reduction/r100000.c     |  2 +-
 .../expected/constant/reduction/r100001.c     |  6 +-
 .../expected/constant/reduction/r100010.c     | 12 ++++
 .../expected/constant/reduction/r100011.c     | 12 ++++
 .../constant/reduction/{r10001.c => r10010.c} |  2 +-
 .../constant/reduction/{r1001.c => r10011.c}  |  1 +
 .../expected/constant/reduction/r110000.c     |  2 +-
 .../expected/constant/reduction/r110001.c     |  6 +-
 .../expected/constant/reduction/r110010.c     | 11 ++++
 .../expected/constant/reduction/r110011.c     | 11 ++++
 .../constant/reduction/{r11001.c => r11010.c} |  2 +-
 .../constant/reduction/{r1101.c => r11011.c}  |  1 +
 .../declaration/reduction/{r000.c => r0000.c} |  3 +-
 .../declaration/reduction/{r001.c => r0001.c} |  3 +-
 .../expected/declaration/reduction/r0010.c    | 10 ++++
 .../expected/declaration/reduction/r0011.c    | 10 ++++
 .../test/expected/declaration/reduction/r10.c |  7 +++
 .../declaration/reduction/{r1.c => r11.c}     |  1 +
 .../reduction/{r00000.c => r000000.c}         |  1 +
 .../expected/definition/reduction/r000001.c   | 15 +++++
 .../expected/definition/reduction/r00001.c    |  2 +-
 .../reduction/{r00100.c => r001000.c}         |  1 +
 .../expected/definition/reduction/r001001.c   | 15 +++++
 .../expected/definition/reduction/r00101.c    |  2 +-
 .../reduction/{r0100.c => r01000.c}           |  1 +
 .../expected/definition/reduction/r01001.c    | 13 +++++
 .../expected/definition/reduction/r0101.c     |  2 +-
 rtree-c/test/expected/functions/main.c        | 10 ++++
 .../expected/functions/reduction/r000000000.c | 20 +++++++
 .../expected/functions/reduction/r000000001.c | 20 +++++++
 .../expected/functions/reduction/r000000010.c | 20 +++++++
 .../expected/functions/reduction/r000000011.c | 20 +++++++
 .../expected/functions/reduction/r000000100.c | 20 +++++++
 .../expected/functions/reduction/r000000101.c | 20 +++++++
 .../expected/functions/reduction/r000000110.c | 20 +++++++
 .../expected/functions/reduction/r000000111.c | 20 +++++++
 .../expected/functions/reduction/r0000010.c   | 18 ++++++
 .../expected/functions/reduction/r0000011.c   | 18 ++++++
 .../expected/functions/reduction/r000010000.c | 20 +++++++
 .../expected/functions/reduction/r000010001.c | 20 +++++++
 .../expected/functions/reduction/r000010010.c | 20 +++++++
 .../expected/functions/reduction/r000010011.c | 20 +++++++
 .../expected/functions/reduction/r000010100.c | 20 +++++++
 .../expected/functions/reduction/r000010101.c | 20 +++++++
 .../expected/functions/reduction/r00001011.c  | 19 ++++++
 .../expected/functions/reduction/r000011.c    | 17 ++++++
 .../test/expected/functions/reduction/r0001.c | 14 +++++
 .../expected/functions/reduction/r001000000.c | 20 +++++++
 .../expected/functions/reduction/r001000001.c | 20 +++++++
 .../expected/functions/reduction/r001000010.c | 20 +++++++
 .../expected/functions/reduction/r001000011.c | 20 +++++++
 .../expected/functions/reduction/r001000100.c | 20 +++++++
 .../expected/functions/reduction/r001000101.c | 20 +++++++
 .../expected/functions/reduction/r001000110.c | 20 +++++++
 .../expected/functions/reduction/r001000111.c | 20 +++++++
 .../expected/functions/reduction/r0010010.c   | 18 ++++++
 .../expected/functions/reduction/r0010011.c   | 18 ++++++
 .../expected/functions/reduction/r001010000.c | 20 +++++++
 .../expected/functions/reduction/r001010001.c | 20 +++++++
 .../expected/functions/reduction/r001010010.c | 20 +++++++
 .../expected/functions/reduction/r001010011.c | 20 +++++++
 .../expected/functions/reduction/r001010100.c | 20 +++++++
 .../expected/functions/reduction/r001010101.c | 20 +++++++
 .../expected/functions/reduction/r00101011.c  | 19 ++++++
 .../expected/functions/reduction/r001011.c    | 17 ++++++
 .../test/expected/functions/reduction/r0011.c | 14 +++++
 .../expected/functions/reduction/r010000.c    | 14 +++++
 .../expected/functions/reduction/r010001.c    | 14 +++++
 .../expected/functions/reduction/r010010.c    | 14 +++++
 .../expected/functions/reduction/r010011.c    | 14 +++++
 .../expected/functions/reduction/r010100.c    | 14 +++++
 .../expected/functions/reduction/r010101.c    | 14 +++++
 .../expected/functions/reduction/r01011.c     | 13 +++++
 .../test/expected/functions/reduction/r011.c  | 10 ++++
 .../expected/functions/reduction/r1000000.c   | 15 +++++
 .../expected/functions/reduction/r1000001.c   | 15 +++++
 .../expected/functions/reduction/r1000010.c   | 15 +++++
 .../expected/functions/reduction/r1000011.c   | 15 +++++
 .../expected/functions/reduction/r1000100.c   | 15 +++++
 .../expected/functions/reduction/r1000101.c   | 15 +++++
 .../expected/functions/reduction/r100011.c    | 14 +++++
 .../test/expected/functions/reduction/r1001.c | 11 ++++
 .../expected/functions/reduction/r1010000.c   | 15 +++++
 .../expected/functions/reduction/r1010001.c   | 15 +++++
 .../expected/functions/reduction/r1010010.c   | 15 +++++
 .../expected/functions/reduction/r1010011.c   | 15 +++++
 .../expected/functions/reduction/r1010100.c   | 15 +++++
 .../expected/functions/reduction/r1010101.c   | 15 +++++
 .../expected/functions/reduction/r101011.c    | 14 +++++
 .../test/expected/functions/reduction/r1011.c | 11 ++++
 .../test/expected/functions/reduction/r1100.c |  9 +++
 .../test/expected/functions/reduction/r1101.c |  9 +++
 .../test/expected/functions/reduction/r111.c  |  7 +++
 .../expected/while-loops/reduction/r0000000.c |  2 +-
 .../expected/while-loops/reduction/r0000001.c |  2 +-
 .../expected/while-loops/reduction/r000001.c  |  2 +-
 .../expected/while-loops/reduction/r0000100.c |  6 +-
 .../expected/while-loops/reduction/r0000101.c |  6 +-
 .../expected/while-loops/reduction/r000011.c  |  6 +-
 .../expected/while-loops/reduction/r0001000.c | 16 +++++
 .../expected/while-loops/reduction/r0001001.c | 16 +++++
 .../expected/while-loops/reduction/r000101.c  |  9 ++-
 .../expected/while-loops/reduction/r0001100.c | 16 +++++
 .../expected/while-loops/reduction/r0001101.c | 16 +++++
 .../expected/while-loops/reduction/r000111.c  | 14 +++++
 .../reduction/{r000100.c => r001000.c}        |  2 +-
 .../reduction/{r00011.c => r001001.c}         |  6 +-
 .../expected/while-loops/reduction/r00101.c   |  9 ++-
 .../reduction/{r00100.c => r001100.c}         |  1 +
 .../expected/while-loops/reduction/r001101.c  | 15 +++++
 .../reduction/{r0011.c => r00111.c}           |  1 +
 .../expected/while-loops/reduction/r10000.c   |  2 +-
 .../expected/while-loops/reduction/r10001.c   |  6 +-
 .../expected/while-loops/reduction/r10010.c   | 12 ++++
 .../expected/while-loops/reduction/r10011.c   | 12 ++++
 .../reduction/{r1001.c => r1010.c}            |  2 +-
 .../while-loops/reduction/{r101.c => r1011.c} |  1 +
 249 files changed, 3162 insertions(+), 141 deletions(-)
 create mode 100644 rtree-c/test/cases/small/functions.c
 rename rtree-c/test/expected/add/reduction/{r000000000.c => r0000000000.c} (73%)
 rename rtree-c/test/expected/add/reduction/{r0000001.c => r0000000001.c} (73%)
 rename rtree-c/test/expected/add/reduction/{r000000001.c => r0000000010.c} (73%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0000000011.c
 rename rtree-c/test/expected/add/reduction/{r000000010.c => r0000000100.c} (73%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0000000101.c
 rename rtree-c/test/expected/add/reduction/{r000000011.c => r0000000110.c} (73%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0000000111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000001000.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000001001.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000001010.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000001011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000001100.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000001101.c
 create mode 100644 rtree-c/test/expected/add/reduction/r000000111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000100000.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000100001.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000100010.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000100011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000100100.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000100101.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000100110.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000100111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000101000.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000101001.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000101010.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000101011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000101100.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0000101101.c
 create mode 100644 rtree-c/test/expected/add/reduction/r000010111.c
 rename rtree-c/test/expected/add/reduction/{r000010000.c => r0001000000.c} (73%)
 rename rtree-c/test/expected/add/reduction/{r0000101.c => r0001000001.c} (72%)
 rename rtree-c/test/expected/add/reduction/{r000010001.c => r0001000010.c} (73%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0001000011.c
 rename rtree-c/test/expected/add/reduction/{r000010010.c => r0001000100.c} (73%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0001000101.c
 rename rtree-c/test/expected/add/reduction/{r000010011.c => r0001000110.c} (73%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0001000111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001001000.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001001001.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001001010.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001001011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001001100.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001001101.c
 create mode 100644 rtree-c/test/expected/add/reduction/r000100111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001100000.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001100001.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001100010.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001100011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001100100.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001100101.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001100110.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001100111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001101000.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001101001.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001101010.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001101011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001101100.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0001101101.c
 create mode 100644 rtree-c/test/expected/add/reduction/r000110111.c
 rename rtree-c/test/expected/add/reduction/{r00011.c => r000111.c} (54%)
 rename rtree-c/test/expected/add/reduction/{r00010000.c => r001000000.c} (70%)
 create mode 100644 rtree-c/test/expected/add/reduction/r001000001.c
 rename rtree-c/test/expected/add/reduction/{r00010001.c => r001000010.c} (70%)
 create mode 100644 rtree-c/test/expected/add/reduction/r001000011.c
 rename rtree-c/test/expected/add/reduction/{r00010010.c => r001000100.c} (70%)
 create mode 100644 rtree-c/test/expected/add/reduction/r001000101.c
 rename rtree-c/test/expected/add/reduction/{r00010011.c => r001000110.c} (70%)
 create mode 100644 rtree-c/test/expected/add/reduction/r001000111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r001001000.c
 create mode 100644 rtree-c/test/expected/add/reduction/r001001001.c
 create mode 100644 rtree-c/test/expected/add/reduction/r001001010.c
 create mode 100644 rtree-c/test/expected/add/reduction/r001001011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r001001100.c
 create mode 100644 rtree-c/test/expected/add/reduction/r001001101.c
 create mode 100644 rtree-c/test/expected/add/reduction/r00100111.c
 rename rtree-c/test/expected/add/reduction/{r0010000.c => r001100000.c} (61%)
 create mode 100644 rtree-c/test/expected/add/reduction/r001100001.c
 rename rtree-c/test/expected/add/reduction/{r0010001.c => r001100010.c} (61%)
 create mode 100644 rtree-c/test/expected/add/reduction/r001100011.c
 rename rtree-c/test/expected/add/reduction/{r0010010.c => r001100100.c} (61%)
 create mode 100644 rtree-c/test/expected/add/reduction/r001100101.c
 rename rtree-c/test/expected/add/reduction/{r0010011.c => r001100110.c} (61%)
 create mode 100644 rtree-c/test/expected/add/reduction/r001100111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r001101000.c
 create mode 100644 rtree-c/test/expected/add/reduction/r001101001.c
 create mode 100644 rtree-c/test/expected/add/reduction/r001101010.c
 create mode 100644 rtree-c/test/expected/add/reduction/r001101011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r001101100.c
 create mode 100644 rtree-c/test/expected/add/reduction/r001101101.c
 create mode 100644 rtree-c/test/expected/add/reduction/r00110111.c
 rename rtree-c/test/expected/add/reduction/{r0011.c => r00111.c} (83%)
 rename rtree-c/test/expected/add/reduction/{r010000.c => r0100000.c} (62%)
 rename rtree-c/test/expected/add/reduction/{r0101.c => r0100001.c} (62%)
 rename rtree-c/test/expected/add/reduction/{r010001.c => r0100010.c} (62%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0100011.c
 rename rtree-c/test/expected/add/reduction/{r010010.c => r0100100.c} (62%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0100101.c
 rename rtree-c/test/expected/add/reduction/{r010011.c => r0100110.c} (62%)
 create mode 100644 rtree-c/test/expected/add/reduction/r0100111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0101000.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0101001.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0101010.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0101011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0101100.c
 create mode 100644 rtree-c/test/expected/add/reduction/r0101101.c
 create mode 100644 rtree-c/test/expected/add/reduction/r010111.c
 create mode 100644 rtree-c/test/expected/add/reduction/r10000.c
 create mode 100644 rtree-c/test/expected/add/reduction/r10001.c
 create mode 100644 rtree-c/test/expected/add/reduction/r10010.c
 create mode 100644 rtree-c/test/expected/add/reduction/r10011.c
 create mode 100644 rtree-c/test/expected/add/reduction/r10100.c
 create mode 100644 rtree-c/test/expected/add/reduction/r10101.c
 rename rtree-c/test/expected/add/reduction/{r10.c => r1011.c} (56%)
 create mode 100644 rtree-c/test/expected/constant/reduction/r000010.c
 create mode 100644 rtree-c/test/expected/constant/reduction/r000011.c
 rename rtree-c/test/expected/constant/reduction/{r00001.c => r00010.c} (100%)
 rename rtree-c/test/expected/constant/reduction/{r0001.c => r00011.c} (83%)
 create mode 100644 rtree-c/test/expected/constant/reduction/r010010.c
 create mode 100644 rtree-c/test/expected/constant/reduction/r010011.c
 rename rtree-c/test/expected/constant/reduction/{r01001.c => r01010.c} (100%)
 rename rtree-c/test/expected/constant/reduction/{r0101.c => r01011.c} (82%)
 create mode 100644 rtree-c/test/expected/constant/reduction/r100010.c
 create mode 100644 rtree-c/test/expected/constant/reduction/r100011.c
 rename rtree-c/test/expected/constant/reduction/{r10001.c => r10010.c} (100%)
 rename rtree-c/test/expected/constant/reduction/{r1001.c => r10011.c} (82%)
 create mode 100644 rtree-c/test/expected/constant/reduction/r110010.c
 create mode 100644 rtree-c/test/expected/constant/reduction/r110011.c
 rename rtree-c/test/expected/constant/reduction/{r11001.c => r11010.c} (100%)
 rename rtree-c/test/expected/constant/reduction/{r1101.c => r11011.c} (82%)
 rename rtree-c/test/expected/declaration/reduction/{r000.c => r0000.c} (62%)
 rename rtree-c/test/expected/declaration/reduction/{r001.c => r0001.c} (60%)
 create mode 100644 rtree-c/test/expected/declaration/reduction/r0010.c
 create mode 100644 rtree-c/test/expected/declaration/reduction/r0011.c
 create mode 100644 rtree-c/test/expected/declaration/reduction/r10.c
 rename rtree-c/test/expected/declaration/reduction/{r1.c => r11.c} (56%)
 rename rtree-c/test/expected/definition/reduction/{r00000.c => r000000.c} (84%)
 create mode 100644 rtree-c/test/expected/definition/reduction/r000001.c
 rename rtree-c/test/expected/definition/reduction/{r00100.c => r001000.c} (84%)
 create mode 100644 rtree-c/test/expected/definition/reduction/r001001.c
 rename rtree-c/test/expected/definition/reduction/{r0100.c => r01000.c} (81%)
 create mode 100644 rtree-c/test/expected/definition/reduction/r01001.c
 create mode 100644 rtree-c/test/expected/functions/main.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000000000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000000001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000000010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000000011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000000100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000000101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000000110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000000111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0000011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000010101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r00001011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r000011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001000000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001000001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001000010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001000011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001000100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001000101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001000110.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001000111.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0010010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0010011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001010000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001010001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001010010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001010011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001010100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001010101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r00101011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r001011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r0011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r010000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r010001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r010010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r010011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r010100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r010101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r01011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1000000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1000001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1000010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1000011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1000100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1000101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r100011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1010000.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1010001.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1010010.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1010011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1010100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1010101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r101011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1011.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1100.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r1101.c
 create mode 100644 rtree-c/test/expected/functions/reduction/r111.c
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r0001000.c
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r0001001.c
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r0001100.c
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r0001101.c
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r000111.c
 rename rtree-c/test/expected/while-loops/reduction/{r000100.c => r001000.c} (100%)
 rename rtree-c/test/expected/while-loops/reduction/{r00011.c => r001001.c} (69%)
 rename rtree-c/test/expected/while-loops/reduction/{r00100.c => r001100.c} (86%)
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r001101.c
 rename rtree-c/test/expected/while-loops/reduction/{r0011.c => r00111.c} (83%)
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r10010.c
 create mode 100644 rtree-c/test/expected/while-loops/reduction/r10011.c
 rename rtree-c/test/expected/while-loops/reduction/{r1001.c => r1010.c} (100%)
 rename rtree-c/test/expected/while-loops/reduction/{r101.c => r1011.c} (78%)

diff --git a/rtree-c/src/ReduceC.hs b/rtree-c/src/ReduceC.hs
index f95c80c..a464686 100644
--- a/rtree-c/src/ReduceC.hs
+++ b/rtree-c/src/ReduceC.hs
@@ -185,10 +185,21 @@ reduceCFunDef
   -> Context
   -> m (C.CFunctionDef C.NodeInfo)
 reduceCFunDef (C.CFunDef spc dec cdecls smt ni) ctx = do
+  let spc'' =
+        filter
+          ( \case
+              C.CStorageSpec (C.CStatic _) -> False
+              _ow -> True
+          )
+          spc
+  spc' <-
+    if spc'' /= spc
+      then split ("remove static", C.posOf ni) (pure spc'') (pure spc)
+      else pure spc
   smt' <- reduceCStatementOrEmptyBlock smt ctx'
   pure $
     C.CFunDef
-      (inlineTypeDefsSpecs spc ctx)
+      (inlineTypeDefsSpecs spc' ctx)
       (inlineTypeDefsCDeclarator dec ctx)
       (map (`inlineTypeDefsCDeclaration` ctx) cdecls)
       smt'
@@ -282,8 +293,9 @@ reduceCStatementOrEmptyBlock stmt ctx = do
       ex
     Nothing -> do
       pure emptyBlock
- where
-  emptyBlock = C.CCompound [] [] C.undefNode
+
+emptyBlock :: C.CStatement C.NodeInfo
+emptyBlock = C.CCompound [] [] C.undefNode
 
 reduceCStatement
   :: (MonadReduce Lab m, HasCallStack)
@@ -328,12 +340,17 @@ reduceCStatement smt ctx = case smt of
         maybeSplit ("remove else branch", C.posOf els') do
           reduceCStatement els' ctx
       Nothing -> pure Nothing
-    s' <- reduceCStatementOrEmptyBlock s ctx
-    case (e', els') of
-      (Nothing, Nothing) -> pure s'
-      (Just e'', Nothing) -> pure $ C.CIf e'' s' Nothing ni
-      (Nothing, Just x) -> pure $ C.CIf zeroExpr s' (Just x) ni
-      (Just e'', Just x) -> pure $ C.CIf e'' s' (Just x) ni
+    ms' <- maybeSplit ("remove if branch", C.posOf s) do
+      reduceCStatement s ctx
+    case (e', ms', els') of
+      (Nothing, Nothing, Nothing) -> pure emptyBlock
+      (Just e'', Just s', Nothing) -> pure $ C.CIf e'' s' Nothing ni
+      (Nothing, Just s', Just x) -> pure $ C.CIf zeroExpr s' (Just x) ni
+      (Just e'', Just s', Just x) -> pure $ C.CIf e'' s' (Just x) ni
+      (Just e'', Nothing, Nothing) -> pure $ C.CExpr (Just e'') C.undefNode
+      (Nothing, Nothing, Just x) -> pure x
+      (Just e'', Nothing, Just x) -> pure $ C.CIf e'' emptyBlock (Just x) ni
+      (Nothing, Just s', Nothing) -> pure s'
   C.CFor e1 e2 e3 s ni -> Just $ do
     (me1', ctx') <- case e1 of
       C.CForDecl (C.CDecl rec decl ni') -> do
@@ -429,7 +446,10 @@ reduceCExprOrZero :: (MonadReduce Lab m, HasCallStack) => C.CExpr -> Context ->
 reduceCExprOrZero expr ctx = do
   case reduceCExpr expr ctx of
     Just ex -> do
-      split ("replace by zero", C.posOf expr) (pure zeroExpr) ex
+      r <- ex
+      if r == zeroExpr
+        then pure r
+        else split ("replace by zero", C.posOf expr) (pure zeroExpr) (pure r)
     Nothing -> do
       pure zeroExpr
 {-# INLINE reduceCExprOrZero #-}
@@ -480,11 +500,19 @@ reduceCExpr expr ctx = case expr of
       e <- elhs'
       pure $ C.CUnary o e ni
   C.CCall e es ni -> do
-    re <- reduceCExpr e (addKeyword DisallowVariableInlining ctx)
-    Just $ do
-      e' <- re
-      es' <- traverse (`reduceCExprOrZero` ctx) es
-      pure $ C.CCall e' es' ni
+    let re = reduceCExpr e (addKeyword DisallowVariableInlining ctx)
+        res = map (`reduceCExpr` ctx) es
+    case (re, catMaybes res) of
+      (Nothing, []) -> Nothing
+      (Nothing, [r]) -> Just r
+      (_, _) -> Just do
+        e' <- maybeSplit ("do without function", C.posOf e) re
+        es' <- res & traverse (maybeSplit ("do without pram", C.posOf e))
+        case (e', catMaybes es') of
+          (Nothing, []) -> pure zeroExpr
+          (Nothing, [e'']) -> pure e''
+          (Nothing, es'') -> pure $ C.CComma es'' C.undefNode
+          (Just f, _) -> pure $ C.CCall f (map (fromMaybe zeroExpr) es') ni
   C.CCond ec et ef ni -> do
     -- TODO: More fine grained reduction is possible here.
     Just $ do
diff --git a/rtree-c/test/cases/small/functions.c b/rtree-c/test/cases/small/functions.c
new file mode 100644
index 0000000..3c013ec
--- /dev/null
+++ b/rtree-c/test/cases/small/functions.c
@@ -0,0 +1,9 @@
+int f(int a) { 
+}
+
+static int g(int a) { 
+}
+
+int main() { 
+    return f(g(42));
+}
diff --git a/rtree-c/test/expected/add/reduction/r000000000.c b/rtree-c/test/expected/add/reduction/r0000000000.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000000000.c
rename to rtree-c/test/expected/add/reduction/r0000000000.c
index cf8062b..fb30a1d 100644
--- a/rtree-c/test/expected/add/reduction/r000000000.c
+++ b/rtree-c/test/expected/add/reduction/r0000000000.c
@@ -1,11 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0000001.c b/rtree-c/test/expected/add/reduction/r0000000001.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r0000001.c
rename to rtree-c/test/expected/add/reduction/r0000000001.c
index 64fc9f5..a691200 100644
--- a/rtree-c/test/expected/add/reduction/r0000001.c
+++ b/rtree-c/test/expected/add/reduction/r0000000001.c
@@ -1,9 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r000000001.c b/rtree-c/test/expected/add/reduction/r0000000010.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000000001.c
rename to rtree-c/test/expected/add/reduction/r0000000010.c
index 3c81f19..14ac768 100644
--- a/rtree-c/test/expected/add/reduction/r000000001.c
+++ b/rtree-c/test/expected/add/reduction/r0000000010.c
@@ -1,12 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0000000011.c b/rtree-c/test/expected/add/reduction/r0000000011.c
new file mode 100644
index 0000000..0636b34
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000000011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000000010.c b/rtree-c/test/expected/add/reduction/r0000000100.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000000010.c
rename to rtree-c/test/expected/add/reduction/r0000000100.c
index 8b24fab..6cbd0b5 100644
--- a/rtree-c/test/expected/add/reduction/r000000010.c
+++ b/rtree-c/test/expected/add/reduction/r0000000100.c
@@ -1,11 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0000000101.c b/rtree-c/test/expected/add/reduction/r0000000101.c
new file mode 100644
index 0000000..ba6036a
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000000101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000000011.c b/rtree-c/test/expected/add/reduction/r0000000110.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000000011.c
rename to rtree-c/test/expected/add/reduction/r0000000110.c
index 841508e..1d53078 100644
--- a/rtree-c/test/expected/add/reduction/r000000011.c
+++ b/rtree-c/test/expected/add/reduction/r0000000110.c
@@ -1,12 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0000000111.c b/rtree-c/test/expected/add/reduction/r0000000111.c
new file mode 100644
index 0000000..23adb94
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000000111.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000001000.c b/rtree-c/test/expected/add/reduction/r0000001000.c
new file mode 100644
index 0000000..2c70fba
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000001000.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000001001.c b/rtree-c/test/expected/add/reduction/r0000001001.c
new file mode 100644
index 0000000..55dbcab
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000001001.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000001010.c b/rtree-c/test/expected/add/reduction/r0000001010.c
new file mode 100644
index 0000000..198371f
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000001010.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000001011.c b/rtree-c/test/expected/add/reduction/r0000001011.c
new file mode 100644
index 0000000..d630721
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000001011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000001100.c b/rtree-c/test/expected/add/reduction/r0000001100.c
new file mode 100644
index 0000000..14daad9
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000001100.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000001101.c b/rtree-c/test/expected/add/reduction/r0000001101.c
new file mode 100644
index 0000000..a322bac
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000001101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000000111.c b/rtree-c/test/expected/add/reduction/r000000111.c
new file mode 100644
index 0000000..2b806c1
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000000111.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a + b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000001.c b/rtree-c/test/expected/add/reduction/r000001.c
index e66ccb2..cd8a689 100644
--- a/rtree-c/test/expected/add/reduction/r000001.c
+++ b/rtree-c/test/expected/add/reduction/r000001.c
@@ -1,8 +1,8 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 remove statement at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0000100000.c b/rtree-c/test/expected/add/reduction/r0000100000.c
new file mode 100644
index 0000000..8fd7739
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100000.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100001.c b/rtree-c/test/expected/add/reduction/r0000100001.c
new file mode 100644
index 0000000..be1c6d8
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100001.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100010.c b/rtree-c/test/expected/add/reduction/r0000100010.c
new file mode 100644
index 0000000..f8b5d0d
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100010.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(10, 0);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100011.c b/rtree-c/test/expected/add/reduction/r0000100011.c
new file mode 100644
index 0000000..164fe6f
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100100.c b/rtree-c/test/expected/add/reduction/r0000100100.c
new file mode 100644
index 0000000..a849cd1
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100100.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(0, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100101.c b/rtree-c/test/expected/add/reduction/r0000100101.c
new file mode 100644
index 0000000..a8a9ef6
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100110.c b/rtree-c/test/expected/add/reduction/r0000100110.c
new file mode 100644
index 0000000..fad65c7
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100110.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(0, 0);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000100111.c b/rtree-c/test/expected/add/reduction/r0000100111.c
new file mode 100644
index 0000000..bd83749
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000100111.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000101000.c b/rtree-c/test/expected/add/reduction/r0000101000.c
new file mode 100644
index 0000000..657aae3
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000101000.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000101001.c b/rtree-c/test/expected/add/reduction/r0000101001.c
new file mode 100644
index 0000000..b0b38a9
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000101001.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000101010.c b/rtree-c/test/expected/add/reduction/r0000101010.c
new file mode 100644
index 0000000..521e11d
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000101010.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000101011.c b/rtree-c/test/expected/add/reduction/r0000101011.c
new file mode 100644
index 0000000..3caeabe
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000101011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000101100.c b/rtree-c/test/expected/add/reduction/r0000101100.c
new file mode 100644
index 0000000..9d54bb7
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000101100.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0000101101.c b/rtree-c/test/expected/add/reduction/r0000101101.c
new file mode 100644
index 0000000..7a185a7
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0000101101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000010111.c b/rtree-c/test/expected/add/reduction/r000010111.c
new file mode 100644
index 0000000..86584ab
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000010111.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000011.c b/rtree-c/test/expected/add/reduction/r000011.c
index 29cdcfe..025a273 100644
--- a/rtree-c/test/expected/add/reduction/r000011.c
+++ b/rtree-c/test/expected/add/reduction/r000011.c
@@ -1,13 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
-// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 remove statement at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
-    return b;
+    return 0;
 }
 int main()
 {
diff --git a/rtree-c/test/expected/add/reduction/r000010000.c b/rtree-c/test/expected/add/reduction/r0001000000.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000010000.c
rename to rtree-c/test/expected/add/reduction/r0001000000.c
index 12d3ffa..1ef25e0 100644
--- a/rtree-c/test/expected/add/reduction/r000010000.c
+++ b/rtree-c/test/expected/add/reduction/r0001000000.c
@@ -1,11 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0000101.c b/rtree-c/test/expected/add/reduction/r0001000001.c
similarity index 72%
rename from rtree-c/test/expected/add/reduction/r0000101.c
rename to rtree-c/test/expected/add/reduction/r0001000001.c
index 87fb648..4975014 100644
--- a/rtree-c/test/expected/add/reduction/r0000101.c
+++ b/rtree-c/test/expected/add/reduction/r0001000001.c
@@ -1,9 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r000010001.c b/rtree-c/test/expected/add/reduction/r0001000010.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000010001.c
rename to rtree-c/test/expected/add/reduction/r0001000010.c
index f670f50..72d6d2f 100644
--- a/rtree-c/test/expected/add/reduction/r000010001.c
+++ b/rtree-c/test/expected/add/reduction/r0001000010.c
@@ -1,12 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0001000011.c b/rtree-c/test/expected/add/reduction/r0001000011.c
new file mode 100644
index 0000000..19b84bb
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001000011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000010010.c b/rtree-c/test/expected/add/reduction/r0001000100.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000010010.c
rename to rtree-c/test/expected/add/reduction/r0001000100.c
index a0057e8..ac9e3a7 100644
--- a/rtree-c/test/expected/add/reduction/r000010010.c
+++ b/rtree-c/test/expected/add/reduction/r0001000100.c
@@ -1,11 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0001000101.c b/rtree-c/test/expected/add/reduction/r0001000101.c
new file mode 100644
index 0000000..9582d5c
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001000101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000010011.c b/rtree-c/test/expected/add/reduction/r0001000110.c
similarity index 73%
rename from rtree-c/test/expected/add/reduction/r000010011.c
rename to rtree-c/test/expected/add/reduction/r0001000110.c
index fb62fc5..325d3f5 100644
--- a/rtree-c/test/expected/add/reduction/r000010011.c
+++ b/rtree-c/test/expected/add/reduction/r0001000110.c
@@ -1,12 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0001000111.c b/rtree-c/test/expected/add/reduction/r0001000111.c
new file mode 100644
index 0000000..b006144
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001000111.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001001000.c b/rtree-c/test/expected/add/reduction/r0001001000.c
new file mode 100644
index 0000000..3248b5d
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001001000.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001001001.c b/rtree-c/test/expected/add/reduction/r0001001001.c
new file mode 100644
index 0000000..04f3afd
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001001001.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001001010.c b/rtree-c/test/expected/add/reduction/r0001001010.c
new file mode 100644
index 0000000..1bb0311
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001001010.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001001011.c b/rtree-c/test/expected/add/reduction/r0001001011.c
new file mode 100644
index 0000000..cf3a3fc
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001001011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001001100.c b/rtree-c/test/expected/add/reduction/r0001001100.c
new file mode 100644
index 0000000..db13198
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001001100.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001001101.c b/rtree-c/test/expected/add/reduction/r0001001101.c
new file mode 100644
index 0000000..df75f8e
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001001101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000100111.c b/rtree-c/test/expected/add/reduction/r000100111.c
new file mode 100644
index 0000000..9e3a851
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000100111.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return b;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000101.c b/rtree-c/test/expected/add/reduction/r000101.c
index 11ed208..bf78551 100644
--- a/rtree-c/test/expected/add/reduction/r000101.c
+++ b/rtree-c/test/expected/add/reduction/r000101.c
@@ -1,15 +1,14 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
 // 0 replace by zero at ("test/cases/small/add.c": line 2)
-// 1 reduce to left at ("test/cases/small/add.c": line 2)
-// 0 remove statement at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 1 remove statement at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
-    return a;
+    return b;
 }
 int main()
 {
-    return 0;
 }
diff --git a/rtree-c/test/expected/add/reduction/r0001100000.c b/rtree-c/test/expected/add/reduction/r0001100000.c
new file mode 100644
index 0000000..ea6accf
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100000.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100001.c b/rtree-c/test/expected/add/reduction/r0001100001.c
new file mode 100644
index 0000000..21d5153
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100001.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100010.c b/rtree-c/test/expected/add/reduction/r0001100010.c
new file mode 100644
index 0000000..b46dd1e
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100010.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(10, 0);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100011.c b/rtree-c/test/expected/add/reduction/r0001100011.c
new file mode 100644
index 0000000..e5bc917
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100100.c b/rtree-c/test/expected/add/reduction/r0001100100.c
new file mode 100644
index 0000000..e2c1419
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100100.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(0, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100101.c b/rtree-c/test/expected/add/reduction/r0001100101.c
new file mode 100644
index 0000000..918a049
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100110.c b/rtree-c/test/expected/add/reduction/r0001100110.c
new file mode 100644
index 0000000..1341aaa
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100110.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return add(0, 0);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001100111.c b/rtree-c/test/expected/add/reduction/r0001100111.c
new file mode 100644
index 0000000..08fe2df
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001100111.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001101000.c b/rtree-c/test/expected/add/reduction/r0001101000.c
new file mode 100644
index 0000000..fbadbd6
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001101000.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001101001.c b/rtree-c/test/expected/add/reduction/r0001101001.c
new file mode 100644
index 0000000..a0902e8
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001101001.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001101010.c b/rtree-c/test/expected/add/reduction/r0001101010.c
new file mode 100644
index 0000000..3be7492
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001101010.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001101011.c b/rtree-c/test/expected/add/reduction/r0001101011.c
new file mode 100644
index 0000000..96c7dec
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001101011.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001101100.c b/rtree-c/test/expected/add/reduction/r0001101100.c
new file mode 100644
index 0000000..0425a2b
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001101100.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0001101101.c b/rtree-c/test/expected/add/reduction/r0001101101.c
new file mode 100644
index 0000000..2e521da
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0001101101.c
@@ -0,0 +1,19 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r000110111.c b/rtree-c/test/expected/add/reduction/r000110111.c
new file mode 100644
index 0000000..8492f47
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r000110111.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00011.c b/rtree-c/test/expected/add/reduction/r000111.c
similarity index 54%
rename from rtree-c/test/expected/add/reduction/r00011.c
rename to rtree-c/test/expected/add/reduction/r000111.c
index 6db3a28..293a3ba 100644
--- a/rtree-c/test/expected/add/reduction/r00011.c
+++ b/rtree-c/test/expected/add/reduction/r000111.c
@@ -1,12 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
-// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 reduce to right at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 remove statement at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
-    return a;
+    return 0;
 }
 int main()
 {
diff --git a/rtree-c/test/expected/add/reduction/r00010000.c b/rtree-c/test/expected/add/reduction/r001000000.c
similarity index 70%
rename from rtree-c/test/expected/add/reduction/r00010000.c
rename to rtree-c/test/expected/add/reduction/r001000000.c
index 6704ccd..35b79c0 100644
--- a/rtree-c/test/expected/add/reduction/r00010000.c
+++ b/rtree-c/test/expected/add/reduction/r001000000.c
@@ -1,10 +1,11 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r001000001.c b/rtree-c/test/expected/add/reduction/r001000001.c
new file mode 100644
index 0000000..4e71c31
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001000001.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00010001.c b/rtree-c/test/expected/add/reduction/r001000010.c
similarity index 70%
rename from rtree-c/test/expected/add/reduction/r00010001.c
rename to rtree-c/test/expected/add/reduction/r001000010.c
index c1d1bd8..33f30cb 100644
--- a/rtree-c/test/expected/add/reduction/r00010001.c
+++ b/rtree-c/test/expected/add/reduction/r001000010.c
@@ -1,11 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r001000011.c b/rtree-c/test/expected/add/reduction/r001000011.c
new file mode 100644
index 0000000..247f3c0
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001000011.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00010010.c b/rtree-c/test/expected/add/reduction/r001000100.c
similarity index 70%
rename from rtree-c/test/expected/add/reduction/r00010010.c
rename to rtree-c/test/expected/add/reduction/r001000100.c
index 9406ac1..4fb332d 100644
--- a/rtree-c/test/expected/add/reduction/r00010010.c
+++ b/rtree-c/test/expected/add/reduction/r001000100.c
@@ -1,10 +1,11 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r001000101.c b/rtree-c/test/expected/add/reduction/r001000101.c
new file mode 100644
index 0000000..b3c320a
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001000101.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00010011.c b/rtree-c/test/expected/add/reduction/r001000110.c
similarity index 70%
rename from rtree-c/test/expected/add/reduction/r00010011.c
rename to rtree-c/test/expected/add/reduction/r001000110.c
index 49c1166..510a012 100644
--- a/rtree-c/test/expected/add/reduction/r00010011.c
+++ b/rtree-c/test/expected/add/reduction/r001000110.c
@@ -1,11 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r001000111.c b/rtree-c/test/expected/add/reduction/r001000111.c
new file mode 100644
index 0000000..d833d45
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001000111.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001001000.c b/rtree-c/test/expected/add/reduction/r001001000.c
new file mode 100644
index 0000000..e35838b
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001001000.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r001001001.c b/rtree-c/test/expected/add/reduction/r001001001.c
new file mode 100644
index 0000000..89c42bb
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001001001.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001001010.c b/rtree-c/test/expected/add/reduction/r001001010.c
new file mode 100644
index 0000000..dc42b26
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001001010.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001001011.c b/rtree-c/test/expected/add/reduction/r001001011.c
new file mode 100644
index 0000000..d365a46
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001001011.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001001100.c b/rtree-c/test/expected/add/reduction/r001001100.c
new file mode 100644
index 0000000..0db50c6
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001001100.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001001101.c b/rtree-c/test/expected/add/reduction/r001001101.c
new file mode 100644
index 0000000..2836ded
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001001101.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00100111.c b/rtree-c/test/expected/add/reduction/r00100111.c
new file mode 100644
index 0000000..2d3f0a9
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00100111.c
@@ -0,0 +1,17 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return a;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00101.c b/rtree-c/test/expected/add/reduction/r00101.c
index a90efe1..e518c5f 100644
--- a/rtree-c/test/expected/add/reduction/r00101.c
+++ b/rtree-c/test/expected/add/reduction/r00101.c
@@ -1,14 +1,13 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
-// 1 replace by zero at ("test/cases/small/add.c": line 2)
-// 0 remove statement at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 0 replace by zero at ("test/cases/small/add.c": line 2)
+// 1 remove statement at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
-    return 0;
+    return a;
 }
 int main()
 {
-    return 0;
 }
diff --git a/rtree-c/test/expected/add/reduction/r0010000.c b/rtree-c/test/expected/add/reduction/r001100000.c
similarity index 61%
rename from rtree-c/test/expected/add/reduction/r0010000.c
rename to rtree-c/test/expected/add/reduction/r001100000.c
index a4876ca..736141a 100644
--- a/rtree-c/test/expected/add/reduction/r0010000.c
+++ b/rtree-c/test/expected/add/reduction/r001100000.c
@@ -1,9 +1,11 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r001100001.c b/rtree-c/test/expected/add/reduction/r001100001.c
new file mode 100644
index 0000000..75f4879
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001100001.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0010001.c b/rtree-c/test/expected/add/reduction/r001100010.c
similarity index 61%
rename from rtree-c/test/expected/add/reduction/r0010001.c
rename to rtree-c/test/expected/add/reduction/r001100010.c
index bad7d73..25d4656 100644
--- a/rtree-c/test/expected/add/reduction/r0010001.c
+++ b/rtree-c/test/expected/add/reduction/r001100010.c
@@ -1,10 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r001100011.c b/rtree-c/test/expected/add/reduction/r001100011.c
new file mode 100644
index 0000000..cddba80
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001100011.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0010010.c b/rtree-c/test/expected/add/reduction/r001100100.c
similarity index 61%
rename from rtree-c/test/expected/add/reduction/r0010010.c
rename to rtree-c/test/expected/add/reduction/r001100100.c
index ef3794e..ac926e6 100644
--- a/rtree-c/test/expected/add/reduction/r0010010.c
+++ b/rtree-c/test/expected/add/reduction/r001100100.c
@@ -1,9 +1,11 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r001100101.c b/rtree-c/test/expected/add/reduction/r001100101.c
new file mode 100644
index 0000000..ab58c56
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001100101.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0010011.c b/rtree-c/test/expected/add/reduction/r001100110.c
similarity index 61%
rename from rtree-c/test/expected/add/reduction/r0010011.c
rename to rtree-c/test/expected/add/reduction/r001100110.c
index 55ee7eb..cff0981 100644
--- a/rtree-c/test/expected/add/reduction/r0010011.c
+++ b/rtree-c/test/expected/add/reduction/r001100110.c
@@ -1,10 +1,12 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r001100111.c b/rtree-c/test/expected/add/reduction/r001100111.c
new file mode 100644
index 0000000..fdb1963
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001100111.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001101000.c b/rtree-c/test/expected/add/reduction/r001101000.c
new file mode 100644
index 0000000..99a2111
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001101000.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r001101001.c b/rtree-c/test/expected/add/reduction/r001101001.c
new file mode 100644
index 0000000..1a016d0
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001101001.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001101010.c b/rtree-c/test/expected/add/reduction/r001101010.c
new file mode 100644
index 0000000..5fb1797
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001101010.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001101011.c b/rtree-c/test/expected/add/reduction/r001101011.c
new file mode 100644
index 0000000..d15197b
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001101011.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001101100.c b/rtree-c/test/expected/add/reduction/r001101100.c
new file mode 100644
index 0000000..3420f2e
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001101100.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r001101101.c b/rtree-c/test/expected/add/reduction/r001101101.c
new file mode 100644
index 0000000..e9bf656
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r001101101.c
@@ -0,0 +1,18 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r00110111.c b/rtree-c/test/expected/add/reduction/r00110111.c
new file mode 100644
index 0000000..c5d2470
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r00110111.c
@@ -0,0 +1,17 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
+// 1 replace by zero at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0011.c b/rtree-c/test/expected/add/reduction/r00111.c
similarity index 83%
rename from rtree-c/test/expected/add/reduction/r0011.c
rename to rtree-c/test/expected/add/reduction/r00111.c
index 9a0d18c..b2ee65e 100644
--- a/rtree-c/test/expected/add/reduction/r0011.c
+++ b/rtree-c/test/expected/add/reduction/r00111.c
@@ -1,5 +1,6 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 2)
+// 1 reduce to left at ("test/cases/small/add.c": line 2)
 // 1 replace by zero at ("test/cases/small/add.c": line 2)
 // 1 remove statement at ("test/cases/small/add.c": line 6)
 
diff --git a/rtree-c/test/expected/add/reduction/r010000.c b/rtree-c/test/expected/add/reduction/r0100000.c
similarity index 62%
rename from rtree-c/test/expected/add/reduction/r010000.c
rename to rtree-c/test/expected/add/reduction/r0100000.c
index 6cdccce..dcae9c1 100644
--- a/rtree-c/test/expected/add/reduction/r010000.c
+++ b/rtree-c/test/expected/add/reduction/r0100000.c
@@ -1,8 +1,9 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove statement at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0101.c b/rtree-c/test/expected/add/reduction/r0100001.c
similarity index 62%
rename from rtree-c/test/expected/add/reduction/r0101.c
rename to rtree-c/test/expected/add/reduction/r0100001.c
index 233ed9e..3a80815 100644
--- a/rtree-c/test/expected/add/reduction/r0101.c
+++ b/rtree-c/test/expected/add/reduction/r0100001.c
@@ -1,6 +1,9 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove statement at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r010001.c b/rtree-c/test/expected/add/reduction/r0100010.c
similarity index 62%
rename from rtree-c/test/expected/add/reduction/r010001.c
rename to rtree-c/test/expected/add/reduction/r0100010.c
index 5ca9cce..3cfe4f0 100644
--- a/rtree-c/test/expected/add/reduction/r010001.c
+++ b/rtree-c/test/expected/add/reduction/r0100010.c
@@ -1,9 +1,10 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove statement at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0100011.c b/rtree-c/test/expected/add/reduction/r0100011.c
new file mode 100644
index 0000000..12e3508
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0100011.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r010010.c b/rtree-c/test/expected/add/reduction/r0100100.c
similarity index 62%
rename from rtree-c/test/expected/add/reduction/r010010.c
rename to rtree-c/test/expected/add/reduction/r0100100.c
index 742989b..88bb639 100644
--- a/rtree-c/test/expected/add/reduction/r010010.c
+++ b/rtree-c/test/expected/add/reduction/r0100100.c
@@ -1,8 +1,9 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove statement at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
-// 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
diff --git a/rtree-c/test/expected/add/reduction/r0100101.c b/rtree-c/test/expected/add/reduction/r0100101.c
new file mode 100644
index 0000000..cd40cf3
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0100101.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r010011.c b/rtree-c/test/expected/add/reduction/r0100110.c
similarity index 62%
rename from rtree-c/test/expected/add/reduction/r010011.c
rename to rtree-c/test/expected/add/reduction/r0100110.c
index 1a4de1c..b0f06b5 100644
--- a/rtree-c/test/expected/add/reduction/r010011.c
+++ b/rtree-c/test/expected/add/reduction/r0100110.c
@@ -1,9 +1,10 @@
 // 0 remove function add at ("test/cases/small/add.c": line 1)
 // 1 remove statement at ("test/cases/small/add.c": line 2)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 // 0 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
-// 1 replace by zero at ("test/cases/small/add.c": line 6)
 
 int add(int a, int b)
 {
diff --git a/rtree-c/test/expected/add/reduction/r0100111.c b/rtree-c/test/expected/add/reduction/r0100111.c
new file mode 100644
index 0000000..91a2a79
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0100111.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0101000.c b/rtree-c/test/expected/add/reduction/r0101000.c
new file mode 100644
index 0000000..70aaeea
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0101000.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r0101001.c b/rtree-c/test/expected/add/reduction/r0101001.c
new file mode 100644
index 0000000..be5b891
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0101001.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0101010.c b/rtree-c/test/expected/add/reduction/r0101010.c
new file mode 100644
index 0000000..723719c
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0101010.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0101011.c b/rtree-c/test/expected/add/reduction/r0101011.c
new file mode 100644
index 0000000..b6e75ac
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0101011.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0101100.c b/rtree-c/test/expected/add/reduction/r0101100.c
new file mode 100644
index 0000000..c778d3e
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0101100.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r0101101.c b/rtree-c/test/expected/add/reduction/r0101101.c
new file mode 100644
index 0000000..f4645d8
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r0101101.c
@@ -0,0 +1,15 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r010111.c b/rtree-c/test/expected/add/reduction/r010111.c
new file mode 100644
index 0000000..5e71ecd
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r010111.c
@@ -0,0 +1,14 @@
+// 0 remove function add at ("test/cases/small/add.c": line 1)
+// 1 remove statement at ("test/cases/small/add.c": line 2)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without function at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+
+int add(int a, int b)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r10000.c b/rtree-c/test/expected/add/reduction/r10000.c
new file mode 100644
index 0000000..2af231d
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r10000.c
@@ -0,0 +1,10 @@
+// 1 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int main()
+{
+    return (10, 23);
+}
diff --git a/rtree-c/test/expected/add/reduction/r10001.c b/rtree-c/test/expected/add/reduction/r10001.c
new file mode 100644
index 0000000..531bd72
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r10001.c
@@ -0,0 +1,10 @@
+// 1 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r10010.c b/rtree-c/test/expected/add/reduction/r10010.c
new file mode 100644
index 0000000..90ead1f
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r10010.c
@@ -0,0 +1,10 @@
+// 1 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int main()
+{
+    return 10;
+}
diff --git a/rtree-c/test/expected/add/reduction/r10011.c b/rtree-c/test/expected/add/reduction/r10011.c
new file mode 100644
index 0000000..bd68a23
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r10011.c
@@ -0,0 +1,10 @@
+// 1 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r10100.c b/rtree-c/test/expected/add/reduction/r10100.c
new file mode 100644
index 0000000..b602e37
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r10100.c
@@ -0,0 +1,10 @@
+// 1 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 0 replace by zero at ("test/cases/small/add.c": line 6)
+
+int main()
+{
+    return 23;
+}
diff --git a/rtree-c/test/expected/add/reduction/r10101.c b/rtree-c/test/expected/add/reduction/r10101.c
new file mode 100644
index 0000000..62dac8e
--- /dev/null
+++ b/rtree-c/test/expected/add/reduction/r10101.c
@@ -0,0 +1,10 @@
+// 1 remove function add at ("test/cases/small/add.c": line 1)
+// 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 0 do without pram at ("test/cases/small/add.c": line 6)
+// 1 replace by zero at ("test/cases/small/add.c": line 6)
+
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/add/reduction/r10.c b/rtree-c/test/expected/add/reduction/r1011.c
similarity index 56%
rename from rtree-c/test/expected/add/reduction/r10.c
rename to rtree-c/test/expected/add/reduction/r1011.c
index 0fd3bac..ea81123 100644
--- a/rtree-c/test/expected/add/reduction/r10.c
+++ b/rtree-c/test/expected/add/reduction/r1011.c
@@ -1,5 +1,7 @@
 // 1 remove function add at ("test/cases/small/add.c": line 1)
 // 0 remove statement at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
+// 1 do without pram at ("test/cases/small/add.c": line 6)
 
 int main()
 {
diff --git a/rtree-c/test/expected/constant/reduction/r000000.c b/rtree-c/test/expected/constant/reduction/r000000.c
index 8caa6b7..54eb77c 100644
--- a/rtree-c/test/expected/constant/reduction/r000000.c
+++ b/rtree-c/test/expected/constant/reduction/r000000.c
@@ -1,9 +1,9 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
 // 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
 int main()
diff --git a/rtree-c/test/expected/constant/reduction/r000001.c b/rtree-c/test/expected/constant/reduction/r000001.c
index c237e98..ad5678c 100644
--- a/rtree-c/test/expected/constant/reduction/r000001.c
+++ b/rtree-c/test/expected/constant/reduction/r000001.c
@@ -1,13 +1,13 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
-// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
 int main()
 {
     int y = 25;
-    return y;
+    return 0;
 }
diff --git a/rtree-c/test/expected/constant/reduction/r000010.c b/rtree-c/test/expected/constant/reduction/r000010.c
new file mode 100644
index 0000000..f41c07d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r000010.c
@@ -0,0 +1,13 @@
+// 0 inline variable x at ("test/cases/small/constant.c": line 1)
+// 0 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int x = 10;
+int main()
+{
+    int y = 25;
+    return y;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r000011.c b/rtree-c/test/expected/constant/reduction/r000011.c
new file mode 100644
index 0000000..7760819
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r000011.c
@@ -0,0 +1,13 @@
+// 0 inline variable x at ("test/cases/small/constant.c": line 1)
+// 0 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int x = 10;
+int main()
+{
+    int y = 25;
+    return 0;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r00001.c b/rtree-c/test/expected/constant/reduction/r00010.c
similarity index 100%
rename from rtree-c/test/expected/constant/reduction/r00001.c
rename to rtree-c/test/expected/constant/reduction/r00010.c
index 093aea2..a1ecd2e 100644
--- a/rtree-c/test/expected/constant/reduction/r00001.c
+++ b/rtree-c/test/expected/constant/reduction/r00010.c
@@ -1,8 +1,8 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 1 reduce to left at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
 int main()
diff --git a/rtree-c/test/expected/constant/reduction/r0001.c b/rtree-c/test/expected/constant/reduction/r00011.c
similarity index 83%
rename from rtree-c/test/expected/constant/reduction/r0001.c
rename to rtree-c/test/expected/constant/reduction/r00011.c
index 2ab76f4..ab29507 100644
--- a/rtree-c/test/expected/constant/reduction/r0001.c
+++ b/rtree-c/test/expected/constant/reduction/r00011.c
@@ -1,6 +1,7 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 1 reduce to left at ("test/cases/small/constant.c": line 5)
 // 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
diff --git a/rtree-c/test/expected/constant/reduction/r010000.c b/rtree-c/test/expected/constant/reduction/r010000.c
index 9db7e67..2a09cdb 100644
--- a/rtree-c/test/expected/constant/reduction/r010000.c
+++ b/rtree-c/test/expected/constant/reduction/r010000.c
@@ -1,9 +1,9 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
 // 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
 int main()
diff --git a/rtree-c/test/expected/constant/reduction/r010001.c b/rtree-c/test/expected/constant/reduction/r010001.c
index 8e50811..eb089fb 100644
--- a/rtree-c/test/expected/constant/reduction/r010001.c
+++ b/rtree-c/test/expected/constant/reduction/r010001.c
@@ -1,12 +1,12 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
-// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
 int main()
 {
-    return 25;
+    return 0;
 }
diff --git a/rtree-c/test/expected/constant/reduction/r010010.c b/rtree-c/test/expected/constant/reduction/r010010.c
new file mode 100644
index 0000000..76eb1e1
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r010010.c
@@ -0,0 +1,12 @@
+// 0 inline variable x at ("test/cases/small/constant.c": line 1)
+// 1 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int x = 10;
+int main()
+{
+    return 25;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r010011.c b/rtree-c/test/expected/constant/reduction/r010011.c
new file mode 100644
index 0000000..b57eacb
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r010011.c
@@ -0,0 +1,12 @@
+// 0 inline variable x at ("test/cases/small/constant.c": line 1)
+// 1 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int x = 10;
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r01001.c b/rtree-c/test/expected/constant/reduction/r01010.c
similarity index 100%
rename from rtree-c/test/expected/constant/reduction/r01001.c
rename to rtree-c/test/expected/constant/reduction/r01010.c
index 2a5899b..a401b0a 100644
--- a/rtree-c/test/expected/constant/reduction/r01001.c
+++ b/rtree-c/test/expected/constant/reduction/r01010.c
@@ -1,8 +1,8 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 1 reduce to left at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
 int main()
diff --git a/rtree-c/test/expected/constant/reduction/r0101.c b/rtree-c/test/expected/constant/reduction/r01011.c
similarity index 82%
rename from rtree-c/test/expected/constant/reduction/r0101.c
rename to rtree-c/test/expected/constant/reduction/r01011.c
index 611d6f1..0f24799 100644
--- a/rtree-c/test/expected/constant/reduction/r0101.c
+++ b/rtree-c/test/expected/constant/reduction/r01011.c
@@ -1,6 +1,7 @@
 // 0 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 1 reduce to left at ("test/cases/small/constant.c": line 5)
 // 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int x = 10;
diff --git a/rtree-c/test/expected/constant/reduction/r100000.c b/rtree-c/test/expected/constant/reduction/r100000.c
index 55eec85..4528b6d 100644
--- a/rtree-c/test/expected/constant/reduction/r100000.c
+++ b/rtree-c/test/expected/constant/reduction/r100000.c
@@ -1,9 +1,9 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
 // 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
 {
diff --git a/rtree-c/test/expected/constant/reduction/r100001.c b/rtree-c/test/expected/constant/reduction/r100001.c
index 5b53020..dcd590f 100644
--- a/rtree-c/test/expected/constant/reduction/r100001.c
+++ b/rtree-c/test/expected/constant/reduction/r100001.c
@@ -1,12 +1,12 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
-// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
 {
     int y = 25;
-    return y;
+    return 0;
 }
diff --git a/rtree-c/test/expected/constant/reduction/r100010.c b/rtree-c/test/expected/constant/reduction/r100010.c
new file mode 100644
index 0000000..4196c5d
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r100010.c
@@ -0,0 +1,12 @@
+// 1 inline variable x at ("test/cases/small/constant.c": line 1)
+// 0 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int main()
+{
+    int y = 25;
+    return y;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r100011.c b/rtree-c/test/expected/constant/reduction/r100011.c
new file mode 100644
index 0000000..0476664
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r100011.c
@@ -0,0 +1,12 @@
+// 1 inline variable x at ("test/cases/small/constant.c": line 1)
+// 0 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int main()
+{
+    int y = 25;
+    return 0;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r10001.c b/rtree-c/test/expected/constant/reduction/r10010.c
similarity index 100%
rename from rtree-c/test/expected/constant/reduction/r10001.c
rename to rtree-c/test/expected/constant/reduction/r10010.c
index 24353b7..8a9c230 100644
--- a/rtree-c/test/expected/constant/reduction/r10001.c
+++ b/rtree-c/test/expected/constant/reduction/r10010.c
@@ -1,8 +1,8 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 1 reduce to left at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
 {
diff --git a/rtree-c/test/expected/constant/reduction/r1001.c b/rtree-c/test/expected/constant/reduction/r10011.c
similarity index 82%
rename from rtree-c/test/expected/constant/reduction/r1001.c
rename to rtree-c/test/expected/constant/reduction/r10011.c
index 36ad940..2bc8152 100644
--- a/rtree-c/test/expected/constant/reduction/r1001.c
+++ b/rtree-c/test/expected/constant/reduction/r10011.c
@@ -1,6 +1,7 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 0 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 1 reduce to left at ("test/cases/small/constant.c": line 5)
 // 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
diff --git a/rtree-c/test/expected/constant/reduction/r110000.c b/rtree-c/test/expected/constant/reduction/r110000.c
index 8b8d961..22ffbc9 100644
--- a/rtree-c/test/expected/constant/reduction/r110000.c
+++ b/rtree-c/test/expected/constant/reduction/r110000.c
@@ -1,9 +1,9 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
 // 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
 {
diff --git a/rtree-c/test/expected/constant/reduction/r110001.c b/rtree-c/test/expected/constant/reduction/r110001.c
index 3546559..db1afaa 100644
--- a/rtree-c/test/expected/constant/reduction/r110001.c
+++ b/rtree-c/test/expected/constant/reduction/r110001.c
@@ -1,11 +1,11 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 0 reduce to left at ("test/cases/small/constant.c": line 5)
-// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
 {
-    return 25;
+    return 0;
 }
diff --git a/rtree-c/test/expected/constant/reduction/r110010.c b/rtree-c/test/expected/constant/reduction/r110010.c
new file mode 100644
index 0000000..bdd8e7e
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r110010.c
@@ -0,0 +1,11 @@
+// 1 inline variable x at ("test/cases/small/constant.c": line 1)
+// 1 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int main()
+{
+    return 25;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r110011.c b/rtree-c/test/expected/constant/reduction/r110011.c
new file mode 100644
index 0000000..38741e8
--- /dev/null
+++ b/rtree-c/test/expected/constant/reduction/r110011.c
@@ -0,0 +1,11 @@
+// 1 inline variable x at ("test/cases/small/constant.c": line 1)
+// 1 inline variable y at ("test/cases/small/constant.c": line 4)
+// 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 0 reduce to left at ("test/cases/small/constant.c": line 5)
+// 1 reduce to right at ("test/cases/small/constant.c": line 5)
+// 1 replace by zero at ("test/cases/small/constant.c": line 5)
+
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/constant/reduction/r11001.c b/rtree-c/test/expected/constant/reduction/r11010.c
similarity index 100%
rename from rtree-c/test/expected/constant/reduction/r11001.c
rename to rtree-c/test/expected/constant/reduction/r11010.c
index 7d0aad4..034b2ad 100644
--- a/rtree-c/test/expected/constant/reduction/r11001.c
+++ b/rtree-c/test/expected/constant/reduction/r11010.c
@@ -1,8 +1,8 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
-// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 // 1 reduce to left at ("test/cases/small/constant.c": line 5)
+// 0 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
 {
diff --git a/rtree-c/test/expected/constant/reduction/r1101.c b/rtree-c/test/expected/constant/reduction/r11011.c
similarity index 82%
rename from rtree-c/test/expected/constant/reduction/r1101.c
rename to rtree-c/test/expected/constant/reduction/r11011.c
index 43237b2..9643213 100644
--- a/rtree-c/test/expected/constant/reduction/r1101.c
+++ b/rtree-c/test/expected/constant/reduction/r11011.c
@@ -1,6 +1,7 @@
 // 1 inline variable x at ("test/cases/small/constant.c": line 1)
 // 1 inline variable y at ("test/cases/small/constant.c": line 4)
 // 0 remove statement at ("test/cases/small/constant.c": line 5)
+// 1 reduce to left at ("test/cases/small/constant.c": line 5)
 // 1 replace by zero at ("test/cases/small/constant.c": line 5)
 
 int main()
diff --git a/rtree-c/test/expected/declaration/reduction/r000.c b/rtree-c/test/expected/declaration/reduction/r0000.c
similarity index 62%
rename from rtree-c/test/expected/declaration/reduction/r000.c
rename to rtree-c/test/expected/declaration/reduction/r0000.c
index 5f46ee7..1cf3df7 100644
--- a/rtree-c/test/expected/declaration/reduction/r000.c
+++ b/rtree-c/test/expected/declaration/reduction/r0000.c
@@ -1,6 +1,7 @@
 // 0 remove variable printf at ("test/cases/small/declaration.c": line 1)
 // 0 remove statement at ("test/cases/small/declaration.c": line 4)
-// 0 replace by zero at ("test/cases/small/declaration.c": line 4)
+// 0 do without function at ("test/cases/small/declaration.c": line 4)
+// 0 do without pram at ("test/cases/small/declaration.c": line 4)
 
 int printf(const char *, ...);
 int main()
diff --git a/rtree-c/test/expected/declaration/reduction/r001.c b/rtree-c/test/expected/declaration/reduction/r0001.c
similarity index 60%
rename from rtree-c/test/expected/declaration/reduction/r001.c
rename to rtree-c/test/expected/declaration/reduction/r0001.c
index bca00a7..3e5d4d2 100644
--- a/rtree-c/test/expected/declaration/reduction/r001.c
+++ b/rtree-c/test/expected/declaration/reduction/r0001.c
@@ -1,6 +1,7 @@
 // 0 remove variable printf at ("test/cases/small/declaration.c": line 1)
 // 0 remove statement at ("test/cases/small/declaration.c": line 4)
-// 1 replace by zero at ("test/cases/small/declaration.c": line 4)
+// 0 do without function at ("test/cases/small/declaration.c": line 4)
+// 1 do without pram at ("test/cases/small/declaration.c": line 4)
 
 int printf(const char *, ...);
 int main()
diff --git a/rtree-c/test/expected/declaration/reduction/r0010.c b/rtree-c/test/expected/declaration/reduction/r0010.c
new file mode 100644
index 0000000..184f255
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r0010.c
@@ -0,0 +1,10 @@
+// 0 remove variable printf at ("test/cases/small/declaration.c": line 1)
+// 0 remove statement at ("test/cases/small/declaration.c": line 4)
+// 1 do without function at ("test/cases/small/declaration.c": line 4)
+// 0 do without pram at ("test/cases/small/declaration.c": line 4)
+
+int printf(const char *, ...);
+int main()
+{
+    "Hello, World!";
+}
diff --git a/rtree-c/test/expected/declaration/reduction/r0011.c b/rtree-c/test/expected/declaration/reduction/r0011.c
new file mode 100644
index 0000000..2e86fa7
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r0011.c
@@ -0,0 +1,10 @@
+// 0 remove variable printf at ("test/cases/small/declaration.c": line 1)
+// 0 remove statement at ("test/cases/small/declaration.c": line 4)
+// 1 do without function at ("test/cases/small/declaration.c": line 4)
+// 1 do without pram at ("test/cases/small/declaration.c": line 4)
+
+int printf(const char *, ...);
+int main()
+{
+    0;
+}
diff --git a/rtree-c/test/expected/declaration/reduction/r10.c b/rtree-c/test/expected/declaration/reduction/r10.c
new file mode 100644
index 0000000..c836dd4
--- /dev/null
+++ b/rtree-c/test/expected/declaration/reduction/r10.c
@@ -0,0 +1,7 @@
+// 1 remove variable printf at ("test/cases/small/declaration.c": line 1)
+// 0 remove statement at ("test/cases/small/declaration.c": line 4)
+
+int main()
+{
+    "Hello, World!";
+}
diff --git a/rtree-c/test/expected/declaration/reduction/r1.c b/rtree-c/test/expected/declaration/reduction/r11.c
similarity index 56%
rename from rtree-c/test/expected/declaration/reduction/r1.c
rename to rtree-c/test/expected/declaration/reduction/r11.c
index 597b7b8..d3ecbda 100644
--- a/rtree-c/test/expected/declaration/reduction/r1.c
+++ b/rtree-c/test/expected/declaration/reduction/r11.c
@@ -1,4 +1,5 @@
 // 1 remove variable printf at ("test/cases/small/declaration.c": line 1)
+// 1 remove statement at ("test/cases/small/declaration.c": line 4)
 
 int main()
 {
diff --git a/rtree-c/test/expected/definition/reduction/r00000.c b/rtree-c/test/expected/definition/reduction/r000000.c
similarity index 84%
rename from rtree-c/test/expected/definition/reduction/r00000.c
rename to rtree-c/test/expected/definition/reduction/r000000.c
index 6970d15..42d44b2 100644
--- a/rtree-c/test/expected/definition/reduction/r00000.c
+++ b/rtree-c/test/expected/definition/reduction/r000000.c
@@ -2,6 +2,7 @@
 // 0 remove statement at ("test/cases/small/definition.c": line 2)
 // 0 replace by zero at ("test/cases/small/definition.c": line 2)
 // 0 remove statement at ("test/cases/small/definition.c": line 6)
+// 0 do without function at ("test/cases/small/definition.c": line 6)
 // 0 replace by zero at ("test/cases/small/definition.c": line 6)
 
 int f()
diff --git a/rtree-c/test/expected/definition/reduction/r000001.c b/rtree-c/test/expected/definition/reduction/r000001.c
new file mode 100644
index 0000000..8416189
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r000001.c
@@ -0,0 +1,15 @@
+// 0 remove function f at ("test/cases/small/definition.c": line 1)
+// 0 remove statement at ("test/cases/small/definition.c": line 2)
+// 0 replace by zero at ("test/cases/small/definition.c": line 2)
+// 0 remove statement at ("test/cases/small/definition.c": line 6)
+// 0 do without function at ("test/cases/small/definition.c": line 6)
+// 1 replace by zero at ("test/cases/small/definition.c": line 6)
+
+int f()
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/definition/reduction/r00001.c b/rtree-c/test/expected/definition/reduction/r00001.c
index 59d0bfe..38b1989 100644
--- a/rtree-c/test/expected/definition/reduction/r00001.c
+++ b/rtree-c/test/expected/definition/reduction/r00001.c
@@ -2,7 +2,7 @@
 // 0 remove statement at ("test/cases/small/definition.c": line 2)
 // 0 replace by zero at ("test/cases/small/definition.c": line 2)
 // 0 remove statement at ("test/cases/small/definition.c": line 6)
-// 1 replace by zero at ("test/cases/small/definition.c": line 6)
+// 1 do without function at ("test/cases/small/definition.c": line 6)
 
 int f()
 {
diff --git a/rtree-c/test/expected/definition/reduction/r00100.c b/rtree-c/test/expected/definition/reduction/r001000.c
similarity index 84%
rename from rtree-c/test/expected/definition/reduction/r00100.c
rename to rtree-c/test/expected/definition/reduction/r001000.c
index 0a6c0ed..e9afc0b 100644
--- a/rtree-c/test/expected/definition/reduction/r00100.c
+++ b/rtree-c/test/expected/definition/reduction/r001000.c
@@ -2,6 +2,7 @@
 // 0 remove statement at ("test/cases/small/definition.c": line 2)
 // 1 replace by zero at ("test/cases/small/definition.c": line 2)
 // 0 remove statement at ("test/cases/small/definition.c": line 6)
+// 0 do without function at ("test/cases/small/definition.c": line 6)
 // 0 replace by zero at ("test/cases/small/definition.c": line 6)
 
 int f()
diff --git a/rtree-c/test/expected/definition/reduction/r001001.c b/rtree-c/test/expected/definition/reduction/r001001.c
new file mode 100644
index 0000000..9795d1b
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r001001.c
@@ -0,0 +1,15 @@
+// 0 remove function f at ("test/cases/small/definition.c": line 1)
+// 0 remove statement at ("test/cases/small/definition.c": line 2)
+// 1 replace by zero at ("test/cases/small/definition.c": line 2)
+// 0 remove statement at ("test/cases/small/definition.c": line 6)
+// 0 do without function at ("test/cases/small/definition.c": line 6)
+// 1 replace by zero at ("test/cases/small/definition.c": line 6)
+
+int f()
+{
+    return 0;
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/definition/reduction/r00101.c b/rtree-c/test/expected/definition/reduction/r00101.c
index 153f431..35ae911 100644
--- a/rtree-c/test/expected/definition/reduction/r00101.c
+++ b/rtree-c/test/expected/definition/reduction/r00101.c
@@ -2,7 +2,7 @@
 // 0 remove statement at ("test/cases/small/definition.c": line 2)
 // 1 replace by zero at ("test/cases/small/definition.c": line 2)
 // 0 remove statement at ("test/cases/small/definition.c": line 6)
-// 1 replace by zero at ("test/cases/small/definition.c": line 6)
+// 1 do without function at ("test/cases/small/definition.c": line 6)
 
 int f()
 {
diff --git a/rtree-c/test/expected/definition/reduction/r0100.c b/rtree-c/test/expected/definition/reduction/r01000.c
similarity index 81%
rename from rtree-c/test/expected/definition/reduction/r0100.c
rename to rtree-c/test/expected/definition/reduction/r01000.c
index 5527e63..d8e2054 100644
--- a/rtree-c/test/expected/definition/reduction/r0100.c
+++ b/rtree-c/test/expected/definition/reduction/r01000.c
@@ -1,6 +1,7 @@
 // 0 remove function f at ("test/cases/small/definition.c": line 1)
 // 1 remove statement at ("test/cases/small/definition.c": line 2)
 // 0 remove statement at ("test/cases/small/definition.c": line 6)
+// 0 do without function at ("test/cases/small/definition.c": line 6)
 // 0 replace by zero at ("test/cases/small/definition.c": line 6)
 
 int f()
diff --git a/rtree-c/test/expected/definition/reduction/r01001.c b/rtree-c/test/expected/definition/reduction/r01001.c
new file mode 100644
index 0000000..b8068af
--- /dev/null
+++ b/rtree-c/test/expected/definition/reduction/r01001.c
@@ -0,0 +1,13 @@
+// 0 remove function f at ("test/cases/small/definition.c": line 1)
+// 1 remove statement at ("test/cases/small/definition.c": line 2)
+// 0 remove statement at ("test/cases/small/definition.c": line 6)
+// 0 do without function at ("test/cases/small/definition.c": line 6)
+// 1 replace by zero at ("test/cases/small/definition.c": line 6)
+
+int f()
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/definition/reduction/r0101.c b/rtree-c/test/expected/definition/reduction/r0101.c
index 473ba0f..4787297 100644
--- a/rtree-c/test/expected/definition/reduction/r0101.c
+++ b/rtree-c/test/expected/definition/reduction/r0101.c
@@ -1,7 +1,7 @@
 // 0 remove function f at ("test/cases/small/definition.c": line 1)
 // 1 remove statement at ("test/cases/small/definition.c": line 2)
 // 0 remove statement at ("test/cases/small/definition.c": line 6)
-// 1 replace by zero at ("test/cases/small/definition.c": line 6)
+// 1 do without function at ("test/cases/small/definition.c": line 6)
 
 int f()
 {
diff --git a/rtree-c/test/expected/functions/main.c b/rtree-c/test/expected/functions/main.c
new file mode 100644
index 0000000..6c27bbd
--- /dev/null
+++ b/rtree-c/test/expected/functions/main.c
@@ -0,0 +1,10 @@
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return f(g(42));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000000.c b/rtree-c/test/expected/functions/reduction/r000000000.c
new file mode 100644
index 0000000..22361ac
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000000.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return f(g(42));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000001.c b/rtree-c/test/expected/functions/reduction/r000000001.c
new file mode 100644
index 0000000..e8bed9f
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000001.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000010.c b/rtree-c/test/expected/functions/reduction/r000000010.c
new file mode 100644
index 0000000..8777499
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000010.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return f(g(0));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000011.c b/rtree-c/test/expected/functions/reduction/r000000011.c
new file mode 100644
index 0000000..bd8abb8
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000011.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000100.c b/rtree-c/test/expected/functions/reduction/r000000100.c
new file mode 100644
index 0000000..0b62277
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000100.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return f(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000101.c b/rtree-c/test/expected/functions/reduction/r000000101.c
new file mode 100644
index 0000000..839cae9
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000101.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000110.c b/rtree-c/test/expected/functions/reduction/r000000110.c
new file mode 100644
index 0000000..946e44b
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000110.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000000111.c b/rtree-c/test/expected/functions/reduction/r000000111.c
new file mode 100644
index 0000000..87badda
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000000111.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0000010.c b/rtree-c/test/expected/functions/reduction/r0000010.c
new file mode 100644
index 0000000..fef82a2
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000010.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0000011.c b/rtree-c/test/expected/functions/reduction/r0000011.c
new file mode 100644
index 0000000..97c1f82
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0000011.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000010000.c b/rtree-c/test/expected/functions/reduction/r000010000.c
new file mode 100644
index 0000000..8df0263
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010000.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return g(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000010001.c b/rtree-c/test/expected/functions/reduction/r000010001.c
new file mode 100644
index 0000000..f83642c
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010001.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000010010.c b/rtree-c/test/expected/functions/reduction/r000010010.c
new file mode 100644
index 0000000..efb0502
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010010.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return g(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000010011.c b/rtree-c/test/expected/functions/reduction/r000010011.c
new file mode 100644
index 0000000..ab439fa
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010011.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000010100.c b/rtree-c/test/expected/functions/reduction/r000010100.c
new file mode 100644
index 0000000..c47fce7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010100.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 42;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000010101.c b/rtree-c/test/expected/functions/reduction/r000010101.c
new file mode 100644
index 0000000..4fa1e07
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000010101.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00001011.c b/rtree-c/test/expected/functions/reduction/r00001011.c
new file mode 100644
index 0000000..a86552b
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00001011.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r000011.c b/rtree-c/test/expected/functions/reduction/r000011.c
new file mode 100644
index 0000000..eef7a25
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r000011.c
@@ -0,0 +1,17 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0001.c b/rtree-c/test/expected/functions/reduction/r0001.c
new file mode 100644
index 0000000..872dd58
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0001.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 1 remove statement at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+static int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000000.c b/rtree-c/test/expected/functions/reduction/r001000000.c
new file mode 100644
index 0000000..e234a1c
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000000.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(g(42));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000001.c b/rtree-c/test/expected/functions/reduction/r001000001.c
new file mode 100644
index 0000000..25bfbd6
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000001.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000010.c b/rtree-c/test/expected/functions/reduction/r001000010.c
new file mode 100644
index 0000000..1781459
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000010.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(g(0));
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000011.c b/rtree-c/test/expected/functions/reduction/r001000011.c
new file mode 100644
index 0000000..85f7458
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000011.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000100.c b/rtree-c/test/expected/functions/reduction/r001000100.c
new file mode 100644
index 0000000..87b10da
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000100.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000101.c b/rtree-c/test/expected/functions/reduction/r001000101.c
new file mode 100644
index 0000000..51cf2fa
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000101.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000110.c b/rtree-c/test/expected/functions/reduction/r001000110.c
new file mode 100644
index 0000000..857ff48
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000110.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001000111.c b/rtree-c/test/expected/functions/reduction/r001000111.c
new file mode 100644
index 0000000..930630c
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001000111.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0010010.c b/rtree-c/test/expected/functions/reduction/r0010010.c
new file mode 100644
index 0000000..0627186
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0010010.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0010011.c b/rtree-c/test/expected/functions/reduction/r0010011.c
new file mode 100644
index 0000000..b87f01e
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0010011.c
@@ -0,0 +1,18 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001010000.c b/rtree-c/test/expected/functions/reduction/r001010000.c
new file mode 100644
index 0000000..1cf9c7c
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001010000.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return g(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001010001.c b/rtree-c/test/expected/functions/reduction/r001010001.c
new file mode 100644
index 0000000..24bf263
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001010001.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001010010.c b/rtree-c/test/expected/functions/reduction/r001010010.c
new file mode 100644
index 0000000..45e4699
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001010010.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return g(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001010011.c b/rtree-c/test/expected/functions/reduction/r001010011.c
new file mode 100644
index 0000000..06fe706
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001010011.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001010100.c b/rtree-c/test/expected/functions/reduction/r001010100.c
new file mode 100644
index 0000000..1c3a300
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001010100.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 42;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001010101.c b/rtree-c/test/expected/functions/reduction/r001010101.c
new file mode 100644
index 0000000..904d845
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001010101.c
@@ -0,0 +1,20 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r00101011.c b/rtree-c/test/expected/functions/reduction/r00101011.c
new file mode 100644
index 0000000..c151f80
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r00101011.c
@@ -0,0 +1,19 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r001011.c b/rtree-c/test/expected/functions/reduction/r001011.c
new file mode 100644
index 0000000..1c3989b
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r001011.c
@@ -0,0 +1,17 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r0011.c b/rtree-c/test/expected/functions/reduction/r0011.c
new file mode 100644
index 0000000..13e0025
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r0011.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 1 remove statement at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r010000.c b/rtree-c/test/expected/functions/reduction/r010000.c
new file mode 100644
index 0000000..5ea9bc4
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r010000.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return f(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r010001.c b/rtree-c/test/expected/functions/reduction/r010001.c
new file mode 100644
index 0000000..f85193e
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r010001.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r010010.c b/rtree-c/test/expected/functions/reduction/r010010.c
new file mode 100644
index 0000000..fb40908
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r010010.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return f(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r010011.c b/rtree-c/test/expected/functions/reduction/r010011.c
new file mode 100644
index 0000000..e03e630
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r010011.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r010100.c b/rtree-c/test/expected/functions/reduction/r010100.c
new file mode 100644
index 0000000..022a557
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r010100.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return 42;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r010101.c b/rtree-c/test/expected/functions/reduction/r010101.c
new file mode 100644
index 0000000..8ef81a4
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r010101.c
@@ -0,0 +1,14 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r01011.c b/rtree-c/test/expected/functions/reduction/r01011.c
new file mode 100644
index 0000000..9b8bb5e
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r01011.c
@@ -0,0 +1,13 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r011.c b/rtree-c/test/expected/functions/reduction/r011.c
new file mode 100644
index 0000000..39c73e7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r011.c
@@ -0,0 +1,10 @@
+// 0 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove statement at ("test/cases/small/functions.c": line 8)
+
+int f(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1000000.c b/rtree-c/test/expected/functions/reduction/r1000000.c
new file mode 100644
index 0000000..a9f70dc
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000000.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return g(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1000001.c b/rtree-c/test/expected/functions/reduction/r1000001.c
new file mode 100644
index 0000000..cabb1bb
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000001.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1000010.c b/rtree-c/test/expected/functions/reduction/r1000010.c
new file mode 100644
index 0000000..d629f15
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000010.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return g(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1000011.c b/rtree-c/test/expected/functions/reduction/r1000011.c
new file mode 100644
index 0000000..210a171
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000011.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1000100.c b/rtree-c/test/expected/functions/reduction/r1000100.c
new file mode 100644
index 0000000..21d1c0c
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000100.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return 42;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1000101.c b/rtree-c/test/expected/functions/reduction/r1000101.c
new file mode 100644
index 0000000..652b3c9
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1000101.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r100011.c b/rtree-c/test/expected/functions/reduction/r100011.c
new file mode 100644
index 0000000..25cdf8b
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r100011.c
@@ -0,0 +1,14 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1001.c b/rtree-c/test/expected/functions/reduction/r1001.c
new file mode 100644
index 0000000..6f2ae79
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1001.c
@@ -0,0 +1,11 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove static at ("test/cases/small/functions.c": line 4)
+// 1 remove statement at ("test/cases/small/functions.c": line 8)
+
+static int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1010000.c b/rtree-c/test/expected/functions/reduction/r1010000.c
new file mode 100644
index 0000000..18ca7c0
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1010000.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return g(42);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1010001.c b/rtree-c/test/expected/functions/reduction/r1010001.c
new file mode 100644
index 0000000..4e875f7
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1010001.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1010010.c b/rtree-c/test/expected/functions/reduction/r1010010.c
new file mode 100644
index 0000000..efc759a
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1010010.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return g(0);
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1010011.c b/rtree-c/test/expected/functions/reduction/r1010011.c
new file mode 100644
index 0000000..82fe6f2
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1010011.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1010100.c b/rtree-c/test/expected/functions/reduction/r1010100.c
new file mode 100644
index 0000000..320c06f
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1010100.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return 42;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1010101.c b/rtree-c/test/expected/functions/reduction/r1010101.c
new file mode 100644
index 0000000..6e5f74c
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1010101.c
@@ -0,0 +1,15 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 0 do without pram at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r101011.c b/rtree-c/test/expected/functions/reduction/r101011.c
new file mode 100644
index 0000000..b5c4c0f
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r101011.c
@@ -0,0 +1,14 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 do without function at ("test/cases/small/functions.c": line 8)
+// 1 do without pram at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1011.c b/rtree-c/test/expected/functions/reduction/r1011.c
new file mode 100644
index 0000000..5b4125c
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1011.c
@@ -0,0 +1,11 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 0 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove static at ("test/cases/small/functions.c": line 4)
+// 1 remove statement at ("test/cases/small/functions.c": line 8)
+
+int g(int a)
+{
+}
+int main()
+{
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1100.c b/rtree-c/test/expected/functions/reduction/r1100.c
new file mode 100644
index 0000000..7ec41ba
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1100.c
@@ -0,0 +1,9 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 0 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int main()
+{
+    return 42;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r1101.c b/rtree-c/test/expected/functions/reduction/r1101.c
new file mode 100644
index 0000000..0d8137f
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r1101.c
@@ -0,0 +1,9 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 0 remove statement at ("test/cases/small/functions.c": line 8)
+// 1 replace by zero at ("test/cases/small/functions.c": line 8)
+
+int main()
+{
+    return 0;
+}
diff --git a/rtree-c/test/expected/functions/reduction/r111.c b/rtree-c/test/expected/functions/reduction/r111.c
new file mode 100644
index 0000000..168e38f
--- /dev/null
+++ b/rtree-c/test/expected/functions/reduction/r111.c
@@ -0,0 +1,7 @@
+// 1 remove function f at ("test/cases/small/functions.c": line 1)
+// 1 remove function g at ("test/cases/small/functions.c": line 4)
+// 1 remove statement at ("test/cases/small/functions.c": line 8)
+
+int main()
+{
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r0000000.c b/rtree-c/test/expected/while-loops/reduction/r0000000.c
index 6d5db5e..c42c943 100644
--- a/rtree-c/test/expected/while-loops/reduction/r0000000.c
+++ b/rtree-c/test/expected/while-loops/reduction/r0000000.c
@@ -1,8 +1,8 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 4)
 // 0 reduce to operant at ("test/cases/small/while-loops.c": line 4)
 
diff --git a/rtree-c/test/expected/while-loops/reduction/r0000001.c b/rtree-c/test/expected/while-loops/reduction/r0000001.c
index 71df2ce..0b2c891 100644
--- a/rtree-c/test/expected/while-loops/reduction/r0000001.c
+++ b/rtree-c/test/expected/while-loops/reduction/r0000001.c
@@ -1,8 +1,8 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 4)
 // 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
 
diff --git a/rtree-c/test/expected/while-loops/reduction/r000001.c b/rtree-c/test/expected/while-loops/reduction/r000001.c
index 6633e53..5fea61d 100644
--- a/rtree-c/test/expected/while-loops/reduction/r000001.c
+++ b/rtree-c/test/expected/while-loops/reduction/r000001.c
@@ -1,8 +1,8 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 1 remove statement at ("test/cases/small/while-loops.c": line 4)
 
 int main()
diff --git a/rtree-c/test/expected/while-loops/reduction/r0000100.c b/rtree-c/test/expected/while-loops/reduction/r0000100.c
index 139e84f..153a96c 100644
--- a/rtree-c/test/expected/while-loops/reduction/r0000100.c
+++ b/rtree-c/test/expected/while-loops/reduction/r0000100.c
@@ -1,15 +1,15 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
-// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 4)
 // 0 reduce to operant at ("test/cases/small/while-loops.c": line 4)
 
 int main()
 {
     int i = 0;
-    while (10)
+    while (0)
     {
         i++;
     }
diff --git a/rtree-c/test/expected/while-loops/reduction/r0000101.c b/rtree-c/test/expected/while-loops/reduction/r0000101.c
index 8786ab8..e07255e 100644
--- a/rtree-c/test/expected/while-loops/reduction/r0000101.c
+++ b/rtree-c/test/expected/while-loops/reduction/r0000101.c
@@ -1,15 +1,15 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
-// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 4)
 // 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
 
 int main()
 {
     int i = 0;
-    while (10)
+    while (0)
     {
         i;
     }
diff --git a/rtree-c/test/expected/while-loops/reduction/r000011.c b/rtree-c/test/expected/while-loops/reduction/r000011.c
index f7d5579..e5b79bd 100644
--- a/rtree-c/test/expected/while-loops/reduction/r000011.c
+++ b/rtree-c/test/expected/while-loops/reduction/r000011.c
@@ -1,14 +1,14 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
-// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 1 remove statement at ("test/cases/small/while-loops.c": line 4)
 
 int main()
 {
     int i = 0;
-    while (10)
+    while (0)
     {
     }
 }
diff --git a/rtree-c/test/expected/while-loops/reduction/r0001000.c b/rtree-c/test/expected/while-loops/reduction/r0001000.c
new file mode 100644
index 0000000..06de89a
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0001000.c
@@ -0,0 +1,16 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 0 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+
+int main()
+{
+    int i = 0;
+    while (10)
+    {
+        i++;
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r0001001.c b/rtree-c/test/expected/while-loops/reduction/r0001001.c
new file mode 100644
index 0000000..760d9d6
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0001001.c
@@ -0,0 +1,16 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+
+int main()
+{
+    int i = 0;
+    while (10)
+    {
+        i;
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r000101.c b/rtree-c/test/expected/while-loops/reduction/r000101.c
index b077238..b6b281b 100644
--- a/rtree-c/test/expected/while-loops/reduction/r000101.c
+++ b/rtree-c/test/expected/while-loops/reduction/r000101.c
@@ -1,15 +1,14 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
 // 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
-// 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
-// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
-// 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+// 1 remove statement at ("test/cases/small/while-loops.c": line 4)
 
 int main()
 {
     int i = 0;
-    while (i)
+    while (10)
     {
-        i;
     }
 }
diff --git a/rtree-c/test/expected/while-loops/reduction/r0001100.c b/rtree-c/test/expected/while-loops/reduction/r0001100.c
new file mode 100644
index 0000000..1dbb151
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0001100.c
@@ -0,0 +1,16 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 0 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+
+int main()
+{
+    int i = 0;
+    while (0)
+    {
+        i++;
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r0001101.c b/rtree-c/test/expected/while-loops/reduction/r0001101.c
new file mode 100644
index 0000000..08368b3
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r0001101.c
@@ -0,0 +1,16 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+
+int main()
+{
+    int i = 0;
+    while (0)
+    {
+        i;
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r000111.c b/rtree-c/test/expected/while-loops/reduction/r000111.c
new file mode 100644
index 0000000..5bf00c8
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r000111.c
@@ -0,0 +1,14 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 1 remove statement at ("test/cases/small/while-loops.c": line 4)
+
+int main()
+{
+    int i = 0;
+    while (0)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r000100.c b/rtree-c/test/expected/while-loops/reduction/r001000.c
similarity index 100%
rename from rtree-c/test/expected/while-loops/reduction/r000100.c
rename to rtree-c/test/expected/while-loops/reduction/r001000.c
index b524fca..22795b8 100644
--- a/rtree-c/test/expected/while-loops/reduction/r000100.c
+++ b/rtree-c/test/expected/while-loops/reduction/r001000.c
@@ -1,7 +1,7 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 4)
 // 0 reduce to operant at ("test/cases/small/while-loops.c": line 4)
 
diff --git a/rtree-c/test/expected/while-loops/reduction/r00011.c b/rtree-c/test/expected/while-loops/reduction/r001001.c
similarity index 69%
rename from rtree-c/test/expected/while-loops/reduction/r00011.c
rename to rtree-c/test/expected/while-loops/reduction/r001001.c
index 3aa141b..8482a0e 100644
--- a/rtree-c/test/expected/while-loops/reduction/r00011.c
+++ b/rtree-c/test/expected/while-loops/reduction/r001001.c
@@ -1,13 +1,15 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
-// 1 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
 
 int main()
 {
     int i = 0;
     while (i)
     {
+        i;
     }
 }
diff --git a/rtree-c/test/expected/while-loops/reduction/r00101.c b/rtree-c/test/expected/while-loops/reduction/r00101.c
index e8e3166..8413b56 100644
--- a/rtree-c/test/expected/while-loops/reduction/r00101.c
+++ b/rtree-c/test/expected/while-loops/reduction/r00101.c
@@ -1,14 +1,13 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
-// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
-// 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+// 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 1 remove statement at ("test/cases/small/while-loops.c": line 4)
 
 int main()
 {
     int i = 0;
-    while (0)
+    while (i)
     {
-        i;
     }
 }
diff --git a/rtree-c/test/expected/while-loops/reduction/r00100.c b/rtree-c/test/expected/while-loops/reduction/r001100.c
similarity index 86%
rename from rtree-c/test/expected/while-loops/reduction/r00100.c
rename to rtree-c/test/expected/while-loops/reduction/r001100.c
index 65d31d9..2c8507c 100644
--- a/rtree-c/test/expected/while-loops/reduction/r00100.c
+++ b/rtree-c/test/expected/while-loops/reduction/r001100.c
@@ -1,5 +1,6 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 4)
 // 0 reduce to operant at ("test/cases/small/while-loops.c": line 4)
diff --git a/rtree-c/test/expected/while-loops/reduction/r001101.c b/rtree-c/test/expected/while-loops/reduction/r001101.c
new file mode 100644
index 0000000..6a6e600
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r001101.c
@@ -0,0 +1,15 @@
+// 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 4)
+// 1 reduce to operant at ("test/cases/small/while-loops.c": line 4)
+
+int main()
+{
+    int i = 0;
+    while (0)
+    {
+        i;
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r0011.c b/rtree-c/test/expected/while-loops/reduction/r00111.c
similarity index 83%
rename from rtree-c/test/expected/while-loops/reduction/r0011.c
rename to rtree-c/test/expected/while-loops/reduction/r00111.c
index 7e6f1ef..1dff3e5 100644
--- a/rtree-c/test/expected/while-loops/reduction/r0011.c
+++ b/rtree-c/test/expected/while-loops/reduction/r00111.c
@@ -1,5 +1,6 @@
 // 0 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 1 remove statement at ("test/cases/small/while-loops.c": line 4)
 
diff --git a/rtree-c/test/expected/while-loops/reduction/r10000.c b/rtree-c/test/expected/while-loops/reduction/r10000.c
index 3a753f8..5fe50b8 100644
--- a/rtree-c/test/expected/while-loops/reduction/r10000.c
+++ b/rtree-c/test/expected/while-loops/reduction/r10000.c
@@ -1,8 +1,8 @@
 // 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 
 int main()
 {
diff --git a/rtree-c/test/expected/while-loops/reduction/r10001.c b/rtree-c/test/expected/while-loops/reduction/r10001.c
index ad2c9b2..55a01a4 100644
--- a/rtree-c/test/expected/while-loops/reduction/r10001.c
+++ b/rtree-c/test/expected/while-loops/reduction/r10001.c
@@ -1,12 +1,12 @@
 // 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
-// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 
 int main()
 {
-    while (10)
+    while (0)
     {
     }
 }
diff --git a/rtree-c/test/expected/while-loops/reduction/r10010.c b/rtree-c/test/expected/while-loops/reduction/r10010.c
new file mode 100644
index 0000000..ce6b516
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r10010.c
@@ -0,0 +1,12 @@
+// 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
+
+int main()
+{
+    while (10)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r10011.c b/rtree-c/test/expected/while-loops/reduction/r10011.c
new file mode 100644
index 0000000..dcae175
--- /dev/null
+++ b/rtree-c/test/expected/while-loops/reduction/r10011.c
@@ -0,0 +1,12 @@
+// 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
+// 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 0 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to right at ("test/cases/small/while-loops.c": line 3)
+// 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
+
+int main()
+{
+    while (0)
+    {
+    }
+}
diff --git a/rtree-c/test/expected/while-loops/reduction/r1001.c b/rtree-c/test/expected/while-loops/reduction/r1010.c
similarity index 100%
rename from rtree-c/test/expected/while-loops/reduction/r1001.c
rename to rtree-c/test/expected/while-loops/reduction/r1010.c
index 3aa47a9..2cad2a8 100644
--- a/rtree-c/test/expected/while-loops/reduction/r1001.c
+++ b/rtree-c/test/expected/while-loops/reduction/r1010.c
@@ -1,7 +1,7 @@
 // 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
-// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 // 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
+// 0 replace by zero at ("test/cases/small/while-loops.c": line 3)
 
 int main()
 {
diff --git a/rtree-c/test/expected/while-loops/reduction/r101.c b/rtree-c/test/expected/while-loops/reduction/r1011.c
similarity index 78%
rename from rtree-c/test/expected/while-loops/reduction/r101.c
rename to rtree-c/test/expected/while-loops/reduction/r1011.c
index d8796c6..1e2fe42 100644
--- a/rtree-c/test/expected/while-loops/reduction/r101.c
+++ b/rtree-c/test/expected/while-loops/reduction/r1011.c
@@ -1,5 +1,6 @@
 // 1 inline variable i at ("test/cases/small/while-loops.c": line 2)
 // 0 remove statement at ("test/cases/small/while-loops.c": line 3)
+// 1 reduce to left at ("test/cases/small/while-loops.c": line 3)
 // 1 replace by zero at ("test/cases/small/while-loops.c": line 3)
 
 int main()
-- 
GitLab