Path: blob/main/src/vs/editor/test/common/viewModel/prefixSumComputer.test.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { toUint32 } from '../../../../base/common/uint.js';7import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';8import { PrefixSumComputer, PrefixSumIndexOfResult } from '../../../common/model/prefixSumComputer.js';910function toUint32Array(arr: number[]): Uint32Array {11const len = arr.length;12const r = new Uint32Array(len);13for (let i = 0; i < len; i++) {14r[i] = toUint32(arr[i]);15}16return r;17}1819suite('Editor ViewModel - PrefixSumComputer', () => {2021ensureNoDisposablesAreLeakedInTestSuite();2223test('PrefixSumComputer', () => {24let indexOfResult: PrefixSumIndexOfResult;2526const psc = new PrefixSumComputer(toUint32Array([1, 1, 2, 1, 3]));27assert.strictEqual(psc.getTotalSum(), 8);28assert.strictEqual(psc.getPrefixSum(-1), 0);29assert.strictEqual(psc.getPrefixSum(0), 1);30assert.strictEqual(psc.getPrefixSum(1), 2);31assert.strictEqual(psc.getPrefixSum(2), 4);32assert.strictEqual(psc.getPrefixSum(3), 5);33assert.strictEqual(psc.getPrefixSum(4), 8);34indexOfResult = psc.getIndexOf(0);35assert.strictEqual(indexOfResult.index, 0);36assert.strictEqual(indexOfResult.remainder, 0);37indexOfResult = psc.getIndexOf(1);38assert.strictEqual(indexOfResult.index, 1);39assert.strictEqual(indexOfResult.remainder, 0);40indexOfResult = psc.getIndexOf(2);41assert.strictEqual(indexOfResult.index, 2);42assert.strictEqual(indexOfResult.remainder, 0);43indexOfResult = psc.getIndexOf(3);44assert.strictEqual(indexOfResult.index, 2);45assert.strictEqual(indexOfResult.remainder, 1);46indexOfResult = psc.getIndexOf(4);47assert.strictEqual(indexOfResult.index, 3);48assert.strictEqual(indexOfResult.remainder, 0);49indexOfResult = psc.getIndexOf(5);50assert.strictEqual(indexOfResult.index, 4);51assert.strictEqual(indexOfResult.remainder, 0);52indexOfResult = psc.getIndexOf(6);53assert.strictEqual(indexOfResult.index, 4);54assert.strictEqual(indexOfResult.remainder, 1);55indexOfResult = psc.getIndexOf(7);56assert.strictEqual(indexOfResult.index, 4);57assert.strictEqual(indexOfResult.remainder, 2);58indexOfResult = psc.getIndexOf(8);59assert.strictEqual(indexOfResult.index, 4);60assert.strictEqual(indexOfResult.remainder, 3);6162// [1, 2, 2, 1, 3]63psc.setValue(1, 2);64assert.strictEqual(psc.getTotalSum(), 9);65assert.strictEqual(psc.getPrefixSum(0), 1);66assert.strictEqual(psc.getPrefixSum(1), 3);67assert.strictEqual(psc.getPrefixSum(2), 5);68assert.strictEqual(psc.getPrefixSum(3), 6);69assert.strictEqual(psc.getPrefixSum(4), 9);7071// [1, 0, 2, 1, 3]72psc.setValue(1, 0);73assert.strictEqual(psc.getTotalSum(), 7);74assert.strictEqual(psc.getPrefixSum(0), 1);75assert.strictEqual(psc.getPrefixSum(1), 1);76assert.strictEqual(psc.getPrefixSum(2), 3);77assert.strictEqual(psc.getPrefixSum(3), 4);78assert.strictEqual(psc.getPrefixSum(4), 7);79indexOfResult = psc.getIndexOf(0);80assert.strictEqual(indexOfResult.index, 0);81assert.strictEqual(indexOfResult.remainder, 0);82indexOfResult = psc.getIndexOf(1);83assert.strictEqual(indexOfResult.index, 2);84assert.strictEqual(indexOfResult.remainder, 0);85indexOfResult = psc.getIndexOf(2);86assert.strictEqual(indexOfResult.index, 2);87assert.strictEqual(indexOfResult.remainder, 1);88indexOfResult = psc.getIndexOf(3);89assert.strictEqual(indexOfResult.index, 3);90assert.strictEqual(indexOfResult.remainder, 0);91indexOfResult = psc.getIndexOf(4);92assert.strictEqual(indexOfResult.index, 4);93assert.strictEqual(indexOfResult.remainder, 0);94indexOfResult = psc.getIndexOf(5);95assert.strictEqual(indexOfResult.index, 4);96assert.strictEqual(indexOfResult.remainder, 1);97indexOfResult = psc.getIndexOf(6);98assert.strictEqual(indexOfResult.index, 4);99assert.strictEqual(indexOfResult.remainder, 2);100indexOfResult = psc.getIndexOf(7);101assert.strictEqual(indexOfResult.index, 4);102assert.strictEqual(indexOfResult.remainder, 3);103104// [1, 0, 0, 1, 3]105psc.setValue(2, 0);106assert.strictEqual(psc.getTotalSum(), 5);107assert.strictEqual(psc.getPrefixSum(0), 1);108assert.strictEqual(psc.getPrefixSum(1), 1);109assert.strictEqual(psc.getPrefixSum(2), 1);110assert.strictEqual(psc.getPrefixSum(3), 2);111assert.strictEqual(psc.getPrefixSum(4), 5);112indexOfResult = psc.getIndexOf(0);113assert.strictEqual(indexOfResult.index, 0);114assert.strictEqual(indexOfResult.remainder, 0);115indexOfResult = psc.getIndexOf(1);116assert.strictEqual(indexOfResult.index, 3);117assert.strictEqual(indexOfResult.remainder, 0);118indexOfResult = psc.getIndexOf(2);119assert.strictEqual(indexOfResult.index, 4);120assert.strictEqual(indexOfResult.remainder, 0);121indexOfResult = psc.getIndexOf(3);122assert.strictEqual(indexOfResult.index, 4);123assert.strictEqual(indexOfResult.remainder, 1);124indexOfResult = psc.getIndexOf(4);125assert.strictEqual(indexOfResult.index, 4);126assert.strictEqual(indexOfResult.remainder, 2);127indexOfResult = psc.getIndexOf(5);128assert.strictEqual(indexOfResult.index, 4);129assert.strictEqual(indexOfResult.remainder, 3);130131// [1, 0, 0, 0, 3]132psc.setValue(3, 0);133assert.strictEqual(psc.getTotalSum(), 4);134assert.strictEqual(psc.getPrefixSum(0), 1);135assert.strictEqual(psc.getPrefixSum(1), 1);136assert.strictEqual(psc.getPrefixSum(2), 1);137assert.strictEqual(psc.getPrefixSum(3), 1);138assert.strictEqual(psc.getPrefixSum(4), 4);139indexOfResult = psc.getIndexOf(0);140assert.strictEqual(indexOfResult.index, 0);141assert.strictEqual(indexOfResult.remainder, 0);142indexOfResult = psc.getIndexOf(1);143assert.strictEqual(indexOfResult.index, 4);144assert.strictEqual(indexOfResult.remainder, 0);145indexOfResult = psc.getIndexOf(2);146assert.strictEqual(indexOfResult.index, 4);147assert.strictEqual(indexOfResult.remainder, 1);148indexOfResult = psc.getIndexOf(3);149assert.strictEqual(indexOfResult.index, 4);150assert.strictEqual(indexOfResult.remainder, 2);151indexOfResult = psc.getIndexOf(4);152assert.strictEqual(indexOfResult.index, 4);153assert.strictEqual(indexOfResult.remainder, 3);154155// [1, 1, 0, 1, 1]156psc.setValue(1, 1);157psc.setValue(3, 1);158psc.setValue(4, 1);159assert.strictEqual(psc.getTotalSum(), 4);160assert.strictEqual(psc.getPrefixSum(0), 1);161assert.strictEqual(psc.getPrefixSum(1), 2);162assert.strictEqual(psc.getPrefixSum(2), 2);163assert.strictEqual(psc.getPrefixSum(3), 3);164assert.strictEqual(psc.getPrefixSum(4), 4);165indexOfResult = psc.getIndexOf(0);166assert.strictEqual(indexOfResult.index, 0);167assert.strictEqual(indexOfResult.remainder, 0);168indexOfResult = psc.getIndexOf(1);169assert.strictEqual(indexOfResult.index, 1);170assert.strictEqual(indexOfResult.remainder, 0);171indexOfResult = psc.getIndexOf(2);172assert.strictEqual(indexOfResult.index, 3);173assert.strictEqual(indexOfResult.remainder, 0);174indexOfResult = psc.getIndexOf(3);175assert.strictEqual(indexOfResult.index, 4);176assert.strictEqual(indexOfResult.remainder, 0);177indexOfResult = psc.getIndexOf(4);178assert.strictEqual(indexOfResult.index, 4);179assert.strictEqual(indexOfResult.remainder, 1);180});181});182183184