aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/random-spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/random-spec.js')
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/random-spec.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/random-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/random-spec.js
new file mode 100644
index 00000000..c4c61f1a
--- /dev/null
+++ b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/random-spec.js
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2014,2015 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 -- Util -- Random Service - Unit Tests
+ */
+describe('factory: fw/util/random.js', function() {
+ var rnd, $log, fs;
+
+ beforeEach(module('onosUtil'));
+
+ beforeEach(inject(function (RandomService, _$log_, FnService) {
+ rnd = RandomService;
+ $log = _$log_;
+ fs = FnService;
+ }));
+
+ // interesting use of a custom matcher...
+ beforeEach(function () {
+ jasmine.addMatchers({
+ toBeWithinOf: function () {
+ return {
+ compare: function (actual, distance, base) {
+ var lower = base - distance,
+ upper = base + distance,
+ result = {};
+
+ result.pass = Math.abs(actual - base) <= distance;
+
+ if (result.pass) {
+ // for negation with ".not"
+ result.message = 'Expected ' + actual +
+ ' to be outside ' + lower + ' and ' +
+ upper + ' (inclusive)';
+ } else {
+ result.message = 'Expected ' + actual +
+ ' to be between ' + lower + ' and ' +
+ upper + ' (inclusive)';
+ }
+ return result;
+ }
+ }
+ }
+ });
+ });
+
+ it('should define RandomService', function () {
+ expect(rnd).toBeDefined();
+ });
+
+ it('should define api functions', function () {
+ expect(fs.areFunctions(rnd, [
+ 'spread', 'randDim'
+ ])).toBeTruthy();
+ });
+
+ // really, can only do this heuristically.. hope this doesn't break
+ it('should spread results across the range', function () {
+ var load = 1000,
+ s = 12,
+ low = 0,
+ high = 0,
+ i, res,
+ which = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ minCount = load / s * 0.5; // generous error
+
+ for (i=0; i<load; i++) {
+ res = rnd.spread(s);
+ if (res < low) low = res;
+ if (res > high) high = res;
+ which[res + s/2]++;
+ }
+ expect(low).toBe(-6);
+ expect(high).toBe(5);
+
+ // check we got a good number of hits in each bucket
+ for (i=0; i<s; i++) {
+ expect(which[i]).toBeGreaterThan(minCount);
+ }
+ });
+
+ // really, can only do this heuristically.. hope this doesn't break
+ it('should choose results across the dimension', function () {
+ var load = 1000,
+ dim = 100,
+ low = 999,
+ high = 0,
+ i, res;
+
+ for (i=0; i<load; i++) {
+ res = rnd.randDim(dim);
+ if (res < low) low = res;
+ if (res > high) high = res;
+ expect(res).toBeWithinOf(36, 50);
+ }
+ });
+});