/* * Copyright 2021 Juan Cruz Viotti * * 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. */ import tap from 'tap' import { JSONObject } from '../../lib/json' import { JSONStats, analyze } from '../../contrib/jsonstats' tap.test('should analyze the survey test object', (test) => { const document: JSONObject = { tags: [], tz: -25200, days: [ 1, 1, 2, 1 ], coord: [ -90.0715, 29.9510 ], data: [ { name: 'ox03', staff: true }, { name: null, staff: false, extra: { info: '' } }, { name: 'ox03', staff: true }, {} ] } const result: JSONStats = { byteSize: 184, height: 4, largestLevel: 4, duplicatedKeys: 4, duplicatedValues: 5, keys: { count: 13, byteSize: 81 }, values: { numeric: { count: 7, byteSize: 24 }, textual: { count: 3, byteSize: 14 }, boolean: { count: 4, byteSize: 17 }, structural: { count: 10, byteSize: 48 } } } test.strictSame(analyze(document), result) test.is(result.byteSize, result.keys.byteSize + result.values.numeric.byteSize + result.values.textual.byteSize + result.values.boolean.byteSize + result.values.structural.byteSize) const VALUES_COUNT: number = result.values.numeric.count + result.values.textual.count + result.values.boolean.count + result.values.structural.count test.ok(VALUES_COUNT >= result.keys.count) test.ok(VALUES_COUNT >= result.duplicatedValues) test.end() })