///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Copyright (c) 2000-2019 Ericsson Telecom AB                               //
//                                                                           //
// All rights reserved. This program and the accompanying materials          //
// are made available under the terms of the Eclipse Public License v2.0     //
// which accompanies this distribution, and is available at                  //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html                                 //
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////
// Module: EPTF_RedBlackTree_demo
//
// Purpose:
//   This module contains function definitions for testing EPTF Red Black Tree
//
// Module Parameters:
//    -
//
//  Module depends on:
//    <EPTF_CLL_RBtree_Functions>
//    <EPTF_CLL_RBtree_PrivateFunctions>
//    <EPTF_CLL_RBtreeFloat_Functions>
//    <EPTF_CLL_RBtreeFloat_PrivateFunctions>
//    <EPTF_CLL_RBtree_Definitions>
//    <EPTF_CLL_Common_Definitions>
//
// Current Owner:
//    Gabor Tatarka (egbotat)
//
// Last Review Date:
//    -
//
//  Detailed Comments:
//    -
///////////////////////////////////////////////////////////

module EPTF_RedBlackTree_demo {

import from EPTF_CLL_RBtreeFloat_Functions all;
import from EPTF_CLL_RBtree_Definitions all;
import from EPTF_CLL_Common_Definitions all;

//import from EPTF_CLL_Base_Definitions all;
import from EPTF_CLL_Base_Functions all;
import from EPTF_CLL_RBT_Definitions all;
import from EPTF_CLL_RBT_Functions all;


modulepar EPTF_FloatList tsp_itemsToInsert := {
  12.0, 3.0, 22.0, 8.0, 3.14, 1.41, 8.0, 9.3
}

testcase tc_insertItems() runs on EPTF_RBT_CT
{
  f_EPTF_RBT_init_CT(%definitionId);

  var EPTF_RBT_TreeId vl_tree := f_EPTF_RBT_createFloatTree("my float tree");

  action("Input: ", tsp_itemsToInsert);

  for(var integer i:=0; i<lengthof(tsp_itemsToInsert); i:=i+1) {
    f_EPTF_RBT_insertFloatItem(vl_tree, tsp_itemsToInsert[i]);
  }

  f_EPTF_RBT_dumpToPng(vl_tree, %definitionId);
  var integer vl_smallest := f_EPTF_RBT_getItemWithSmallestKey(vl_tree);
  action("Index of smallest item: ", vl_smallest);

  action("Key of smallest item: ", f_EPTF_RBT_getKeyOfFloatItem(vl_tree, vl_smallest));
  //note: same as:
  //action("Key of smallest item: ", tsp_itemsToInsert[vl_smallest]);

  var EPTF_IntegerList vl_order;
  f_EPTF_RBT_sortIncremental(vl_tree, vl_order);
  action("Order of items: ", vl_order);
  var EPTF_FloatList vl_sorted := {};
  for(var integer i:=0; i<lengthof(vl_order); i:=i+1) {
    vl_sorted[i] := f_EPTF_RBT_getKeyOfFloatItem(vl_tree, vl_order[i]);
    // same as:
    // vl_sorted[i] := tsp_itemsToInsert[vl_order[i]];
  }
  action("Sorted keys: ", vl_sorted);

  f_EPTF_RBT_dumpToPng(vl_tree, %definitionId);

  f_EPTF_Base_stop(pass);
}

modulepar EPTF_CharstringList tsp_stringsToSort := {
  "The", "words", "of", "this", "sentence", "are", "going", "to", "be", "sorted"
}

testcase tc_sortStrings() runs on EPTF_RBT_CT
{
  f_EPTF_RBT_init_CT(%definitionId);

  var EPTF_RBT_TreeId vl_tree := f_EPTF_RBT_createCharstringTree("my charstring tree");

  action("Input: ", tsp_stringsToSort);

  for(var integer i:=0; i<lengthof(tsp_stringsToSort); i:=i+1) {
    f_EPTF_RBT_insertCharstringItem(vl_tree, tsp_stringsToSort[i]);
  }

  var EPTF_IntegerList vl_order;
  f_EPTF_RBT_sortIncremental(vl_tree, vl_order);

  var EPTF_CharstringList vl_sorted := {};
  for(var integer i:=0; i<lengthof(vl_order); i:=i+1) {
    vl_sorted[i] := f_EPTF_RBT_getKeyOfCharstringItem(vl_tree, vl_order[i]);
  }

  action("Sorted: ", vl_sorted);

  f_EPTF_RBT_dumpToPng(vl_tree, %definitionId);

  f_EPTF_Base_stop(pass);
}



group RBT_Obsolete {

type component PCOComp {}


////////////////////////////////////////////////////////////////////////////
// by egbozie

//print the red-black tree into the log as a graphviz file
function Log_RBTree(in charstring title, in EPTF_Float_RedBlackTree rb_Tree)
{
     //print preamble
     log("graphviz:"&title&": digraph structs"); 
     log("graphviz:"&title&": { node [shape=record, width=1.5, height=0.3, fixedsize=true, style=filled];");
     log("graphviz:"&title&": "& title &" [label="&title&" color=white];")
     //print nodes
     Log_RBTree_FromPos(title, rb_Tree, rb_Tree.root);
     //print postamble
     log("graphviz:"&title&":}");
}
function Log_RBTree_FromPos(in charstring title, in EPTF_Float_RedBlackTree rb_Tree, in integer pos)
{
     //print the node
     var charstring mycolor;
     var charstring mytime := float2str(rb_Tree.floatKeyData[pos].key)
     if (rb_Tree.nodes[pos].color == red) { 
          mycolor:="red"
     } else {
          mycolor := "gray40"
     }
     log("graphviz:"&title&": "& int2str(pos)& " [label=""{|"&int2str(pos)&":"&mytime&"|{<left>|<right>}}"", color="&mycolor&"];");

     var charstring mylabel;
     //print arrows to children, if any
     // if there is a left child, print arrow(s) and the subtree(s) recursively
     if (rb_Tree.nodes[pos].left!=-1) {
       // if there is also a right child, then there will be two arrows, 
       // otherwise only one
         if (rb_Tree.nodes[pos].right!=-1) { 
              mylabel := ":left"
         } else {
              mylabel := ""
         };
         log("graphviz:"&title&": "&int2str(pos)& mylabel&" -> "& int2str(rb_Tree.nodes[pos].left)&";");
         Log_RBTree_FromPos(title, rb_Tree, rb_Tree.nodes[pos].left);
      }
      // if there is a right child
      if (rb_Tree.nodes[pos].right!=-1) {
         // if there is also a left child, then there will be two arrows, 
         // otherwise only one
         if (rb_Tree.nodes[pos].left!=-1) { 
              mylabel := ":right"
         } else {
              mylabel := ""
         };
         log("graphviz:"&title&": "& int2str(pos)&mylabel&" -> "& int2str(rb_Tree.nodes[pos].right)&";");
         Log_RBTree_FromPos(title, rb_Tree, rb_Tree.nodes[pos].right);
      }
} 

function f_checkTree(in EPTF_Float_RedBlackTree checkThis, in EPTF_Float_RedBlackTree againstThis) {
    log("f_checkTree: checkThis:=", checkThis,", againstThis:", againstThis);
    if (checkThis == againstThis) {
        setverdict(pass);
    }  else  {
        setverdict(fail, log2str(checkThis, " should be ", againstThis));
    };
} 
////////////////////////////////////////////////////////////
testcase tc_add_10_elements() runs on PCOComp system PCOComp { 

    var EPTF_Float_RedBlackTree rb_Tree;
    var integer I;
    var integer j;
    var charstring s;
    var EPTF_IntegerList data;

  // Init
  f_EPTF_RBTreeF_initFloatTree(rb_Tree);

  // Add element 1
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 1.0, data);   
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  // Add element 2
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 6.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  // Add element 3
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 8.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  // Add element 4
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 11.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  // Add element 5
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 13.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  // Add element 6
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 15.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  // Add element 7
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 17.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  // Add element 8
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 22.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  // Add element 9
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 25.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  // Add element 10
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 27.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);      

  log("DEBUG: Insertions done...");    

  // Printout
  log("-----------------");
  log("ROOT: " & int2str(rb_Tree.root)); 
  for (j := 0; j <= rb_Tree.nodesCurMaxIndex; j:=j+1) {  
    log("Index: " & int2str(j));    
    log("Key: " & float2str(rb_Tree.floatKeyData[j].key));    

    if ( rb_Tree.nodes[j].color != unused) {
        if (rb_Tree.nodes[j].color == red) {
          s := "RED";
        } else if (rb_Tree.nodes[j].color == black){
          s := "BLACK";
        } else if (rb_Tree.nodes[j].color == invalid){
          s := "INVALID";
        } else {
          s := "UNUSED";
        }
        log("Color: " & s);    
        log("Parent: " & int2str(rb_Tree.nodes[j].parent)); 
        log("Left: " & int2str(rb_Tree.nodes[j].left)); 
        log("Right: " & int2str(rb_Tree.nodes[j].right)); 
        log("-----------------");
    } // if
  } // for

  var EPTF_Float_RedBlackTree mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, //leaf
      { color := black, left := 5, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, //leaf
      { color := black, left := 0, right := 0, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 2, right := 4, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 3, right := 7, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 7, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 6, right := 9, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 9, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 8, right := 10, parent := 7, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 11, parent := 9, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 10, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { } }, 
      { key := 6.000000, data := { } }, 
      { key := 8.000000, data := { } }, 
      { key := 11.000000, data := { } }, 
      { key := 13.000000, data := { } }, 
      { key := 15.000000, data := { } }, 
      { key := 17.000000, data := { } }, 
      { key := 22.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 27.000000, data := { } } }, 
    nodesCurMaxIndex := 11, 
    root := 1, 
    nil := 0, 
    freeHead := -1, 
    freeTail := -1, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := true,
    nOfElements := 10,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree, mytree);
    
} //testcase tc_add_10_elements()

testcase tc_removeElement() runs on PCOComp system PCOComp { 

  var EPTF_Float_RedBlackTree rb_Tree;
  var integer I;
  var integer j;
  var charstring s;
  var EPTF_IntegerList data;

  // Init
  f_EPTF_RBTreeF_initFloatTree(rb_Tree);

  // Add element 1
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 100.0, data);

  // Add element 2
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 150.0, data);

  // Add element 3
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 50.0, data);

  // Add element 4
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 25.0, data);

  // Add element 5
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 40.0, data);

  log("DEBUG: Insertions done...");  

  // Printout
  log("ROOT: " & int2str(rb_Tree.root)); 
  for (j := 0; j <= rb_Tree.nodesCurMaxIndex; j:=j+1) {  
    log("Index: " & int2str(j));    
    log("Key: " & float2str(rb_Tree.floatKeyData[j].key));    

    if (rb_Tree.nodes[j].color == red) {
      s := "RED";
    } else if (rb_Tree.nodes[j].color == black){
      s := "BLACK";
    } else {
      s := "UNUSED";
    }
    log("Color: " & s);    
    log("Parent: " & int2str(rb_Tree.nodes[j].parent)); 
    log("Left: " & int2str(rb_Tree.nodes[j].left)); 
    log("Right: " & int2str(rb_Tree.nodes[j].right)); 
    log("-----------------");
  } // for 

  var EPTF_Float_RedBlackTree mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 2, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 6, right := 3, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 2, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 6, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 6, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 5, right := 4, parent := 2, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 100.000000, data := { } }, 
      { key := 150.000000, data := { } }, 
      { key := 50.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 40.000000, data := { } } }, 
    nodesCurMaxIndex := 6, 
    root := 1, 
    nil := 0, 
    freeHead := -1, 
    freeTail := -1, 
    smallestKeyIndex := 5, 
    isSmallestCacheValid := true, 
    nOfElements := 5,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree, mytree);

  log("DEBUG: Deletes node with key value '40.0'...");
  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 4, true);

  // Printout
  log("ROOT: " & int2str(rb_Tree.root)); 
  for (j := 0; j <= rb_Tree.nodesCurMaxIndex; j:=j+1) {  
    log("Index: " & int2str(j));    
    log("Key: " & float2str(rb_Tree.floatKeyData[j].key)); 

    if (rb_Tree.nodes[j].color == red) {
      s := "RED";
    } else if (rb_Tree.nodes[j].color == black){
      s := "BLACK";
    } else {
      s := "UNUSED";
    }
    log("Color: " & s);    
    log("Parent: " & int2str(rb_Tree.nodes[j].parent)); 
    log("Left: " & int2str(rb_Tree.nodes[j].left)); 
    log("Right: " & int2str(rb_Tree.nodes[j].right)); 
    log("-----------------");
  } // for

  mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 6, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 2, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 6, right := 3, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 2, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := unused, left := -1, right := -1, parent := 6, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 6, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 5, right := 0, parent := 2, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 100.000000, data := { } }, 
      { key := 150.000000, data := { } }, 
      { key := 50.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 40.000000, data := { } } }, 
    nodesCurMaxIndex := 6, 
    root := 1, 
    nil := 0, 
    freeHead := 4, 
    freeTail := 4, 
    smallestKeyIndex := 5, 
    isSmallestCacheValid := true,
    nOfElements := 4,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree, mytree);
  //Log_RBTree("Final", rb_Tree); 

} //testcase tc_removeElement()

testcase tc_remove_4_elements() runs on PCOComp system PCOComp { 

  var EPTF_Float_RedBlackTree rb_Tree;
  var integer I;
  var integer j;
  var charstring s;
  var EPTF_IntegerList data;

  // Init
  f_EPTF_RBTreeF_initFloatTree(rb_Tree);

  // Add 8 elements
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 1.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 6.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 8.0, data);  
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 11.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 25.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 27.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 5.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 7.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  log("DEBUG: Insertions done...");

  var EPTF_Float_RedBlackTree mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 3, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 0, right := 8, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 2, right := 5, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      {color := black, left := 9, right := 0, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 4, right := 6, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 7, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 6, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 2, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 4, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { } }, 
      { key := 6.000000, data := { } }, 
      { key := 8.000000, data := { } }, 
      { key := 11.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 27.000000, data := { } }, 
      { key := 5.000000, data := { } }, 
      { key := 7.000000, data := { } } },
    nodesCurMaxIndex := 9, 
    root := 1, 
    nil := 0, 
    freeHead := -1, 
    freeTail := -1, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := true,
    nOfElements := 8,
    acceptableMaxSize := -1
  } 

  f_checkTree(rb_Tree,mytree);

  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 2, true);   //smallest
  //Log_RBTree("Removed_0", rb_Tree);

  // Printout
  log("ROOT: " & int2str(rb_Tree.root)); 
  for (j := 0; j <= rb_Tree.nodesCurMaxIndex; j:=j+1) {  
    log("Index: " & int2str(j));
    log("Key: " & float2str(rb_Tree.floatKeyData[j].key));    

    if (rb_Tree.nodes[j].color == red) {
      s := "RED";
    } else if (rb_Tree.nodes[j].color == black){
      s := "BLACK";
    } else {
      s := "UNUSED";
    }
    log("Color: " & s);
    log("Parent: " & int2str(rb_Tree.nodes[j].parent)); 
    log("Left: " & int2str(rb_Tree.nodes[j].left)); 
    log("Right: " & int2str(rb_Tree.nodes[j].right)); 
    log("-----------------");
  } // for

  mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 3, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := unused, left := -1, right := -1, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 8, right := 5, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 9, right := 0, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 4, right := 6, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 7, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 6, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 4, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { } }, 
      { key := 6.000000, data := { } }, 
      { key := 8.000000, data := { } }, 
      { key := 11.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 27.000000, data := { } }, 
      { key := 5.000000, data := { } }, 
      { key := 7.000000, data := { } } }, 
    nodesCurMaxIndex := 9, 
    root := 1, 
    nil := 0, 
    freeHead := 2, 
    freeTail := 2, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := false,
    nOfElements := 7,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree,mytree);

  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 8, true);  //next smallest
  //Log_RBTree("Removed_6", rb_Tree);

  mytree := {
    nodes := { 
      { color := black, left := 0, right := 0, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 5, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := unused, left := -1, right := 8, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 9, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 9, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 9, right := 6, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 7, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 6, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := unused, left := 2, right := -1, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 3, right := 4, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { } }, 
      { key := 6.000000, data := { } }, 
      { key := 8.000000, data := { } }, 
      { key := 11.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 27.000000, data := { } }, 
      { key := 5.000000, data := { } }, 
      { key := 7.000000, data := { } } }, 
    nodesCurMaxIndex := 9, 
    root := 1, 
    nil := 0, 
    freeHead := 2, 
    freeTail := 8, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := false,
    nOfElements := 6,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree,mytree);

  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 3, true);   //next smallest
  //Log_RBTree("Removed_1", rb_Tree);

  mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 9, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 5, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := unused, left := -1, right := 8, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := unused, left := 8, right := -1, parent := 9, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 9, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 9, right := 6, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 7, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 6, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := unused, left := 2, right := 3, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 4, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { } }, 
      { key := 6.000000, data := { } }, 
      { key := 8.000000, data := { } }, 
      { key := 11.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 27.000000, data := { } }, 
      { key := 5.000000, data := { } }, 
      { key := 7.000000, data := { } } }, 
    nodesCurMaxIndex := 9, 
    root := 1, 
    nil := 0, 
    freeHead := 2, 
    freeTail := 3, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := false,
    nOfElements := 5,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree, mytree);

  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 9, true);  //next smallest
  //Log_RBTree("Removed_7", rb_Tree);

  mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 9, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 5, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := unused, left := -1, right := 8, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := unused, left := 8, right := 9, parent := 9, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 4, right := 6, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 7, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 6, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := unused, left := 2, right := 3, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := unused, left := 3, right := -1, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { } }, 
      { key := 6.000000, data := { } }, 
      { key := 8.000000, data := { } }, 
      { key := 11.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 27.000000, data := { } }, 
      { key := 5.000000, data := { } },
      { key := 7.000000, data := { } } },
    nodesCurMaxIndex := 9, 
    root := 1, 
    nil := 0, 
    freeHead := 2, 
    freeTail := 9, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := false,
    nOfElements := 4,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree,mytree);
  //Log_RBTree("Final", rb_Tree);

} //tc_remove_4_elements()

testcase tc_findSmallestIndex() runs on PCOComp system PCOComp {

  var EPTF_Float_RedBlackTree rb_Tree;

  // Init
  f_EPTF_RBTreeF_initFloatTree(rb_Tree);

  var integer smallestIndex := -1;
  if (f_RBTree_getBusyEventHeadIndex(rb_Tree, smallestIndex)) {
    log("Smallest index: " & int2str(smallestIndex));
    log(" ^^^^^^^^^^^^^^^^^^^ ");
    setverdict(fail, "Error occured during call f_RBTree_getBusyEventHeadIndex");
  } else {
    log("Smallest index: " & int2str(smallestIndex));
    log(" ^^^^^^^^^^^^^^^^^^^ ");
    log("Could not find a valid smallest index... ");
    if (smallestIndex == -1) {
      setverdict(pass); 
    } else {
      setverdict(fail, "Smallest index should be -1 after init!");
    }
  } 

} //testcase tc_findSmallestIndex()


testcase tc_findSmallest() runs on PCOComp system PCOComp {

  var EPTF_Float_RedBlackTree rb_Tree;
  var integer I;
  var integer j;
  var charstring s;
  var EPTF_IntegerList data;

  // Init
  f_EPTF_RBTreeF_initFloatTree(rb_Tree);

  // Add element 1
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 100.0, data);

  // Add element 2
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 150.0, data);

  // Add element 3
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 50.0, data);

  // Add element 4
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 25.0, data);

  // Add element 5
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 40.0, data);

  log("DEBUG: Insertions done...");  

  var EPTF_FloatNode smallestNode := c_EPTF_emptyFloatNode;
  if (f_EPTF_RBTreeF_getSmallestNodeFromCache(rb_Tree, smallestNode)) {
    log("Smallest key: " & float2str(smallestNode.key));
    log(" ^^^^^^^^^^^^^^^^^^^^^^^^ ");
    if (smallestNode.key == 25.0) {setverdict(pass);} else {setverdict(fail, log2str("smallestNode.key should be 25.0, but it is: ", smallestNode.key));}
  } else {
    setverdict(fail, " could not find a valid smallest key... "); 
  }  

  // Printout
  log("ROOT: " & int2str(rb_Tree.root)); 
  for (j := 0; j <= rb_Tree.nodesCurMaxIndex; j:=j+1) {  
    log("Index: " & int2str(j));    
    log("Key: " & float2str(rb_Tree.floatKeyData[j].key));    

    if (rb_Tree.nodes[j].color == red) {
      s := "RED";
    } else if (rb_Tree.nodes[j].color == black){
      s := "BLACK";
    } else {
      s := "UNUSED";
    }
    log("Color: " & s);    
    log("Parent: " & int2str(rb_Tree.nodes[j].parent)); 
    log("Left: " & int2str(rb_Tree.nodes[j].left)); 
    log("Right: " & int2str(rb_Tree.nodes[j].right)); 
    log("-----------------");
  } // for 

  log("DEBUG: Deletes node with key value '40.0'...");
  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 6, true);

  log("DEBUG: Deletes node with key value '25.0'...");
  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 5, true);

  // Printout
  log("ROOT: " & int2str(rb_Tree.root)); 
  for (j := 0; j <= rb_Tree.nodesCurMaxIndex; j:=j+1) {  
    log("Index: " & int2str(j));    
    log("Key: " & float2str(rb_Tree.floatKeyData[j].key)); 

    if (rb_Tree.nodes[j].color == red) {
      s := "RED";
    } else if (rb_Tree.nodes[j].color == black){
      s := "BLACK";
    } else {
      s := "UNUSED";
    }
    log("Color: " & s);    
    log("Parent: " & int2str(rb_Tree.nodes[j].parent)); 
    log("Left: " & int2str(rb_Tree.nodes[j].left)); 
    log("Right: " & int2str(rb_Tree.nodes[j].right)); 
    log("-----------------");
  } // for

  if (f_EPTF_RBTreeF_getSmallestNodeFromCache(rb_Tree, smallestNode)) {
    log("Smallest key: " & float2str(smallestNode.key));
    log(" ^^^^^^^^^^^^^^^^^^^^^^^^ ");
    if (smallestNode.key == 50.0) {setverdict(pass);} else {setverdict(fail, log2str("smallestNode.key should be 50.0, but it is: ", smallestNode.key));}
  } else {
    setverdict(fail, "could not find a valid smallest key"); 
  } 
  //Log_RBTree("Final", rb_Tree); 

} //testcase tc_findSmallest()

testcase tc_getFloatNodeByKey() runs on PCOComp system PCOComp { 

    var EPTF_Float_RedBlackTree rb_Tree;
    var integer I;
    var charstring s;
    var EPTF_IntegerList data;
    var EPTF_FloatNode node;
    var integer l_index;
    var boolean result;

  // Init
  f_EPTF_RBTreeF_initFloatTree(rb_Tree);

  log("-----------------Add four elements----------------------");
  // Add element 1
  data := {1};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 1.0, data);   
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  // Add element 2
  data := {2};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 2.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  // Add element 3
  data := {3};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 3.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  data := {4};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 4.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  log("Before removal ",rb_Tree);
  log("-----------------removing element with key 1.0----------------------");
  result := f_EPTF_RBTreeF_getFloatNodeByKey(rb_Tree, 1.0, node, l_index);
  log("Found index: ", l_index);
  log("smallestKeyindex: ",rb_Tree.smallestKeyIndex);
  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, l_index, true);
  log("After removal ",rb_Tree);

  log("-----------------Add one new element----------------------");
  data := {5};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 5.0, data);   
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  log("Before removal ",rb_Tree);
  log("-----------------removing element with key 2.0----------------------");
  result := f_EPTF_RBTreeF_getFloatNodeByKey(rb_Tree, 2.0, node, l_index);
  log("Found index: ", l_index);
  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, l_index, true);
  log("After removal ",rb_Tree);

  log("-----------------Add one new element----------------------");
  log("Add node... ");
  data := {2};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 6.0, data);   
  //Log_RBTree("Added_"& int2str(I), rb_Tree);

  // Printout
  var EPTF_Float_RedBlackTree mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 4, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 5, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 0, right := 3, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 2, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 4, right := 2, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 5.000000, data := { 5 } }, 
      { key := 6.000000, data := { 2 } }, 
      { key := 3.000000, data := { 3 } }, 
      { key := 4.000000, data := { 4 } } },
    nodesCurMaxIndex := 5, 
    root := 1, 
    nil := 0, 
    freeHead := -1, 
    freeTail := -1, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := false,
    nOfElements := 4,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree,mytree);

  log("-----------------removing element with key 3.0----------------------");
  result := f_EPTF_RBTreeF_getFloatNodeByKey(rb_Tree, 3.0, node, l_index);
  log("Found index: ", l_index);
  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, l_index, true);
  log("After removal ",rb_Tree);

  mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 2, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 5, right := 3, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 2, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := unused, left := -1, right := -1, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 2, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 5.000000, data := { 5 } }, 
      { key := 6.000000, data := { 2 } }, 
      { key := 3.000000, data := { 3 } }, 
      { key := 4.000000, data := { 4 } } }, 
    nodesCurMaxIndex := 5, 
    root := 1, 
    nil := 0, 
    freeHead := 4, 
    freeTail := 4, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := false,
    nOfElements := 3,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree,mytree);

  result := f_EPTF_RBTreeF_getFloatNodeByKey(rb_Tree, 4.0, node, l_index);
  log("Found index: ", l_index);
  log("result: ", result);
}

testcase tc_add_remove() runs on PCOComp system PCOComp { 

  var EPTF_Float_RedBlackTree rb_Tree;
  var integer I;
  var charstring s;
  var EPTF_IntegerList data;
  var boolean success;

  // Init
  f_EPTF_RBTreeF_initFloatTree(rb_Tree);

  log("Creating first node...");
  data := {2};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 1.0, data);

  log("Invalidating first node...");
  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 2, false);

  data := {5};
  log("Creating second node...");
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 2.0, data);

  // Printout
  var EPTF_Float_RedBlackTree mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 3, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := invalid, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { 2 } }, 
      { key := 2.000000, data := { 5 } } }, 
    nodesCurMaxIndex := 3, 
    root := 1, 
    nil := 0, 
    freeHead := -1, 
    freeTail := -1, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := false,
    nOfElements := 1,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree,mytree);

  log("Removing first node...");
  success := f_EPTF_RBTreeF_destroyInvalidFloatNode(rb_Tree, 2);

  // Printout
  mytree := {
    nodes := { 
      { color := black, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 3, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := unused, left := -1, right := -1, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { 2 } }, 
      { key := 2.000000, data := { 5 } } }, 
    nodesCurMaxIndex := 3, 
    root := 1, 
    nil := 0, 
    freeHead := 2, 
    freeTail := 2, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := false,
    nOfElements := 1,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree,mytree);

  log("Invalidating the only valid node...");
  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 3, false);

  log("Creating new node...");
  data := {2};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 1.0, data);

  log("Removing just invalidated node...");
  success := f_EPTF_RBTreeF_destroyInvalidFloatNode(rb_Tree, 3);

  // Printout
  mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 2, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := unused, left := -1, right := -1, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { 2 } }, 
      { key := 2.000000, data := { 5 } } }, 
    nodesCurMaxIndex := 3, 
    root := 1, 
    nil := 0, 
    freeHead := 3, 
    freeTail := 3, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := false,
    nOfElements := 1,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree,mytree);

  log("Invalidating the only valid node...");
  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 2, false);

  log("Creating new node...");
  data := {5};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 2.0, data);

  log("Removing node with index 3 (invalid already)");
  success := f_EPTF_RBTreeF_destroyInvalidFloatNode(rb_Tree, 2);

  log("Invalidating the only valid node...");
  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 3, false);

  // Printout
  mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 0, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := unused, left := -1, right := -1, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := invalid, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { 2 } }, 
      { key := 2.000000, data := { 5 } } }, 
    nodesCurMaxIndex := 3, 
    root := 1, 
    nil := 0, 
    freeHead := 2, 
    freeTail := 2, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := false,
    nOfElements := 0,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree,mytree);

  log("Creating new node...");
  data := {2};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 1.0, data); 

  log("Removing node with index 3");
  success := f_EPTF_RBTreeF_destroyInvalidFloatNode(rb_Tree, 3);

  log("Invalidating the only valid node...");
  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 2, false);

  log("Creating new node...");
  data := {5};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 5.0, data);

  // Printout
  mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 3, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := invalid, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { 2 } }, 
      { key := 5.000000, data := { 5 } } }, 
    nodesCurMaxIndex := 3, 
    root := 1, 
    nil := 0, 
    freeHead := -1, 
    freeTail := -1, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := false,
    nOfElements := 1,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree,mytree);

  log("Removing node with index 2");
  success := f_EPTF_RBTreeF_destroyInvalidFloatNode(rb_Tree, 2);

  log("Creating new node...");
  data := {8};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 8.0, data);

  mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 3, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := red, left := 0, right := 0, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 2, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 8.000000, data := { 8 } }, 
      { key := 5.000000, data := { 5 } } }, 
    nodesCurMaxIndex := 3, 
    root := 1, 
    nil := 0, 
    freeHead := -1, 
    freeTail := -1, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := false,
    nOfElements := 2,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree,mytree);

  log("Invalidating the node with index 3...");
  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 3, false);

  log("Creating new node...");
  data := {3};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 3.0, data);   

  // Printout
  mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 2, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 4, right := 0, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := invalid, left := 0, right := 2, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 2, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 8.000000, data := { 8 } }, 
      { key := 5.000000, data := { 5 } }, 
      { key := 3.000000, data := { 3 } } }, 
    nodesCurMaxIndex := 4, 
    root := 1, 
    nil := 0, 
    freeHead := -1, 
    freeTail := -1, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := false,
    nOfElements := 2,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree,mytree);

  log("Removing node with index 3");
  success := f_EPTF_RBTreeF_destroyInvalidFloatNode(rb_Tree, 3);
  log("After removal rb_Tree= ", rb_Tree);
} 

testcase tc_use_duplicate_keys() runs on PCOComp system PCOComp { 

  var EPTF_Float_RedBlackTree rb_Tree;
  var integer I;
  var charstring s;
  var EPTF_IntegerList data;

  // Init
  f_EPTF_RBTreeF_initFloatTree(rb_Tree);

  // Add 8 elements
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 1.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 6.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 25.0, data);  
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 11.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 25.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 27.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 25.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  data := {};
  I := f_EPTF_RBTreeF_createNewFloatNode(rb_Tree, 7.0, data);
  //Log_RBTree("Added_"& int2str(I), rb_Tree);
  log("DEBUG: Insertions done...");

  var EPTF_Float_RedBlackTree mytree := { 
    nodes := { 
      { color := black, left := 0, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 3, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 0, right := 0, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 2, right := 4, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 5, right := 7, parent := 3, fwd := 6, bwd := -1, isHeadInSameKeysCluster := true, isSentinel := false }, 
      { color := black, left := 9, right := 0, parent := 4, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := incluster, left := 0, right := 0, parent := 0, fwd := 8, bwd := 4, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 4, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := incluster, left := 0, right := 0, parent := 0, fwd := -1, bwd := 6, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { } }, 
      { key := 6.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 11.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 27.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 7.000000, data := { } } }, 
    nodesCurMaxIndex := 9, 
    root := 1, 
    nil := 0, 
    freeHead := -1, 
    freeTail := -1, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := true,
    nOfElements := 8,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree, mytree);

  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 4, true);   //middle of cluster

  mytree := {
    nodes := { 
      { color := black, left := 0, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 3, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 0, right := 0, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 2, right := 6, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := unused, left := -1, right := -1, parent := 3, fwd := 6, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 9, right := 0, parent := 6, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 5, right := 7, parent := 3, fwd := 8, bwd := -1, isHeadInSameKeysCluster := true, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 6, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := incluster, left := 0, right := 0, parent := 0, fwd := -1, bwd := 6, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { } }, 
      { key := 6.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 11.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 27.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 7.000000, data := { } } }, 
    nodesCurMaxIndex := 9, 
    root := 1, 
    nil := 0, 
    freeHead := 4, 
    freeTail := 4, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := true,
    nOfElements := 7,
    acceptableMaxSize := -1
  }

  f_checkTree(rb_Tree, mytree);

  f_EPTF_RBTreeF_removeFloatNode(rb_Tree, 6, true);  //head of cluster
  //Log_RBTree("Removed_6", rb_Tree);

  mytree := {
    nodes := { 
      { color := black, left := 0, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 3, right := 0, parent := 0, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := true }, 
      { color := black, left := 0, right := 0, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 2, right := 8, parent := 1, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false },
      { color := unused, left := -1, right := 6, parent := 3, fwd := 6, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 9, right := 0, parent := 8, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := unused, left := 4, right := -1, parent := 3, fwd := 8, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := black, left := 0, right := 0, parent := 8, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 5, right := 7, parent := 3, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false }, 
      { color := red, left := 0, right := 0, parent := 5, fwd := -1, bwd := -1, isHeadInSameKeysCluster := false, isSentinel := false } }, 
    floatKeyData := { 
      { key := 0.000000, data := { } }, 
      { key := 0.000000, data := { } }, 
      { key := 1.000000, data := { } }, 
      { key := 6.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 11.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 27.000000, data := { } }, 
      { key := 25.000000, data := { } }, 
      { key := 7.000000, data := { } } }, 
    nodesCurMaxIndex := 9, 
    root := 1, 
    nil := 0, 
    freeHead := 4, 
    freeTail := 6, 
    smallestKeyIndex := 2, 
    isSmallestCacheValid := true,
    nOfElements := 6,
    acceptableMaxSize := -1
  }
  
  f_checkTree(rb_Tree, mytree);
  //Log_RBTree("Final", rb_Tree);

} //tc_use_duplicate_keys()

} // group RBT_Obsolete

control{
/*  execute(tc_add_10_elements());
  execute(tc_removeElement());
  execute(tc_remove_4_elements());
  execute(tc_findSmallestIndex());
  execute(tc_findSmallest());
  execute(tc_getFloatNodeByKey());
  execute(tc_add_remove());
  execute(tc_use_duplicate_keys());*/
  execute(tc_insertItems());
  execute(tc_sortStrings());
} 


} //module
