GUI: trie utility operations, and test code.

Change-Id: I7f41d84b880a8e2075cf1c983be9a4a2def01856
diff --git a/web/gui/src/main/webapp/_sdh/trie-test.js b/web/gui/src/main/webapp/_sdh/trie-test.js
new file mode 100644
index 0000000..2c8716c
--- /dev/null
+++ b/web/gui/src/main/webapp/_sdh/trie-test.js
@@ -0,0 +1,116 @@
+/*
+ *  Copyright 2016 Open Networking Laboratory
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+/*
+ ONOS GUI -- Test code illustrating use of trie functions
+ */
+
+(function () {
+    'use strict';
+
+    // injected refs
+    var $log, fs;
+
+    // internal state
+    var out,
+        trie = {},
+        counter = 5000;
+
+    function write(string) {
+        out.append('div').text(string);
+    }
+
+    function lookup(word) {
+        var result = fs.trieLookup(trie, word),
+            f = fs.isF(result),
+            show = f ? '{function}' : result;
+
+
+        write('------> ' + word + ' ==> ' + show);
+
+        f && f();
+    }
+
+    function add(word, data) {
+        var result = fs.addToTrie(trie, word, data);
+        write('   ADD> ' + word + ' [' + data + '] ==> ' + result);
+    }
+
+    function remove(word) {
+        var result = fs.removeFromTrie(trie, word);
+        write('REMOVE> ' + word + ' ==> ' + result);
+    }
+
+    function func1() {
+        counter++;
+        write('** function call **  ' + counter);
+    }
+
+    function func2() {
+        counter += 11;
+        write('** alternate call **  ' + counter);
+    }
+
+    function runTests() {
+        lookup('cat');
+
+        add('cat', 101);
+
+        lookup('ca');
+        lookup('cat');
+        lookup('cats');
+
+        add('cab', 103);
+        add('cog', 105);
+
+        lookup('cut');
+        lookup('cab');
+
+        remove('cab');
+
+        lookup('cab');
+        lookup('cat');
+
+        add('fun', func1);
+
+        lookup('fun');
+        lookup('fun');
+        lookup('fun');
+        lookup('cat');
+        lookup('fun');
+
+        add('fun', func2);
+
+        lookup('fun');
+        lookup('fun');
+        lookup('fun');
+
+        remove('fun');
+
+        lookup('fun');
+    }
+
+    angular.module('trie', ['onosUtil'])
+    .controller('OvTrieTest', ['$log', 'FnService',
+
+        function (_$log_, _fs_) {
+            $log = _$log_;
+            fs = _fs_;
+            out = d3.select('#output');
+
+            runTests();
+        }]);
+}());