snapshot of https://github.com/dream-num/univer.git (dev, 2026-09-16; blobs > 131072B omitted)
Some checks failed
📦 Build / build (push) Has been cancelled
🧪 CI Test / test shard (1/4) (push) Has been cancelled
🧪 CI Test / test shard (2/4) (push) Has been cancelled
🧪 CI Test / test shard (3/4) (push) Has been cancelled
🧪 CI Test / test shard (4/4) (push) Has been cancelled
🧪 CI Test / test (push) Has been cancelled
🧪 CI Test / eslint (push) Has been cancelled
🧪 CI Test / typecheck (push) Has been cancelled
🔫 Sync to Pro / dispatch-sync (push) Has been cancelled
🔮 Sync Mirror / sync (push) Has been cancelled
Some checks failed
📦 Build / build (push) Has been cancelled
🧪 CI Test / test shard (1/4) (push) Has been cancelled
🧪 CI Test / test shard (2/4) (push) Has been cancelled
🧪 CI Test / test shard (3/4) (push) Has been cancelled
🧪 CI Test / test shard (4/4) (push) Has been cancelled
🧪 CI Test / test (push) Has been cancelled
🧪 CI Test / eslint (push) Has been cancelled
🧪 CI Test / typecheck (push) Has been cancelled
🔫 Sync to Pro / dispatch-sync (push) Has been cancelled
🔮 Sync Mirror / sync (push) Has been cancelled
This commit is contained in:
215
packages/sheets/src/basics/__tests__/range-merge.spec.ts
Normal file
215
packages/sheets/src/basics/__tests__/range-merge.spec.ts
Normal file
@@ -0,0 +1,215 @@
|
||||
/**
|
||||
* Copyright 2023-present DreamNum Co., Ltd.
|
||||
*
|
||||
* 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 type { IRange } from '@univerjs/core';
|
||||
import { cellToRange } from '@univerjs/core';
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { rangeMerge, RangeMergeUtil } from '../range-merge';
|
||||
|
||||
describe('test rangeMerge', () => {
|
||||
it('simple row', () => {
|
||||
const testRange: IRange[] = [cellToRange(2, 2), cellToRange(3, 2), cellToRange(4, 2)];
|
||||
const result = rangeMerge(testRange);
|
||||
expect(result).toEqual([{ startColumn: 2, endColumn: 2, startRow: 2, endRow: 4 }] as IRange[]);
|
||||
});
|
||||
it('simple col', () => {
|
||||
const testRange: IRange[] = [cellToRange(2, 2), cellToRange(2, 3), cellToRange(2, 4)];
|
||||
const result = rangeMerge(testRange);
|
||||
expect(result).toEqual([{ startColumn: 2, endColumn: 4, startRow: 2, endRow: 2 }] as IRange[]);
|
||||
});
|
||||
|
||||
it('simple col and simple row', () => {
|
||||
const testRange: IRange[] = [
|
||||
cellToRange(2, 2),
|
||||
cellToRange(2, 3),
|
||||
cellToRange(2, 4),
|
||||
cellToRange(2, 2),
|
||||
cellToRange(3, 2),
|
||||
cellToRange(4, 2),
|
||||
];
|
||||
const result = rangeMerge(testRange);
|
||||
expect(result).toEqual([
|
||||
{ startColumn: 2, endColumn: 4, startRow: 2, endRow: 2 },
|
||||
{ startColumn: 2, endColumn: 2, startRow: 3, endRow: 4 },
|
||||
] as IRange[]);
|
||||
});
|
||||
|
||||
it('multiple range', () => {
|
||||
const testRange1 = rangeMerge([cellToRange(2, 2), cellToRange(2, 3), cellToRange(2, 4)]);
|
||||
const testRange2 = rangeMerge([cellToRange(3, 2), cellToRange(3, 3), cellToRange(3, 4)]);
|
||||
const testRange3 = rangeMerge([cellToRange(4, 5), cellToRange(4, 6), cellToRange(4, 7)]);
|
||||
//1 1 1
|
||||
//2 2 2
|
||||
//0 0 0 1 1 1
|
||||
const result = rangeMerge([...testRange1, ...testRange3, ...testRange2]);
|
||||
expect(result).toEqual([
|
||||
{
|
||||
startRow: 2,
|
||||
endRow: 3,
|
||||
startColumn: 2,
|
||||
endColumn: 4,
|
||||
},
|
||||
{
|
||||
startRow: 4,
|
||||
endRow: 4,
|
||||
startColumn: 5,
|
||||
endColumn: 7,
|
||||
},
|
||||
]);
|
||||
//1 1 1 1
|
||||
//2 2 2 1
|
||||
//0 0 0 1 1 1
|
||||
const result2 = rangeMerge([...testRange1, ...testRange3, ...testRange2, cellToRange(2, 5), cellToRange(3, 5)]);
|
||||
expect(result2).toEqual([
|
||||
{
|
||||
startRow: 2,
|
||||
endRow: 3,
|
||||
startColumn: 2,
|
||||
endColumn: 5,
|
||||
},
|
||||
{
|
||||
startRow: 4,
|
||||
endRow: 4,
|
||||
startColumn: 5,
|
||||
endColumn: 7,
|
||||
},
|
||||
]);
|
||||
//0 0 0 0 0 0
|
||||
//0 0 0 0 0 0
|
||||
//0 0 1 1 1 1
|
||||
//0 0 2 0 2 2
|
||||
//0 0 0 0 3 3 1 1
|
||||
const result3 = rangeMerge([
|
||||
cellToRange(2, 2),
|
||||
cellToRange(2, 3),
|
||||
cellToRange(2, 4),
|
||||
cellToRange(2, 5),
|
||||
cellToRange(3, 2),
|
||||
cellToRange(3, 4),
|
||||
cellToRange(3, 5),
|
||||
cellToRange(4, 4),
|
||||
cellToRange(4, 5),
|
||||
cellToRange(4, 6),
|
||||
cellToRange(4, 7),
|
||||
]);
|
||||
expect(result3).toEqual([
|
||||
{
|
||||
startRow: 2,
|
||||
endRow: 4,
|
||||
startColumn: 4,
|
||||
endColumn: 5,
|
||||
},
|
||||
{
|
||||
startRow: 2,
|
||||
endRow: 2,
|
||||
startColumn: 2,
|
||||
endColumn: 3,
|
||||
},
|
||||
{
|
||||
startRow: 4,
|
||||
endRow: 4,
|
||||
startColumn: 6,
|
||||
endColumn: 7,
|
||||
},
|
||||
{
|
||||
startRow: 3,
|
||||
endRow: 3,
|
||||
startColumn: 2,
|
||||
endColumn: 2,
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('hollow range', () => {
|
||||
const result = rangeMerge([
|
||||
{ startRow: 2, endRow: 3, startColumn: 2, endColumn: 10 },
|
||||
{ startRow: 4, endRow: 6, startColumn: 2, endColumn: 4 },
|
||||
{ startRow: 4, endRow: 6, startColumn: 8, endColumn: 10 },
|
||||
{ startRow: 7, endRow: 10, startColumn: 2, endColumn: 10 },
|
||||
]);
|
||||
|
||||
expect(result).toEqual([
|
||||
{
|
||||
startRow: 7,
|
||||
endRow: 10,
|
||||
startColumn: 2,
|
||||
endColumn: 10,
|
||||
},
|
||||
{
|
||||
startRow: 2,
|
||||
endRow: 3,
|
||||
startColumn: 2,
|
||||
endColumn: 10,
|
||||
},
|
||||
{
|
||||
startRow: 4,
|
||||
endRow: 6,
|
||||
startColumn: 2,
|
||||
endColumn: 4,
|
||||
},
|
||||
{
|
||||
startRow: 4,
|
||||
endRow: 6,
|
||||
startColumn: 8,
|
||||
endColumn: 10,
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('test rangeMergeUtil', () => {
|
||||
const testRange: IRange[] = [cellToRange(2, 2), cellToRange(3, 2), cellToRange(4, 2)];
|
||||
expect(new RangeMergeUtil().add(...testRange).merge()).toEqual([
|
||||
{ startColumn: 2, endColumn: 2, startRow: 2, endRow: 4 },
|
||||
]);
|
||||
expect(new RangeMergeUtil().add(...testRange).subtract(cellToRange(4, 2)).merge()).toEqual([
|
||||
{ startColumn: 2, endColumn: 2, startRow: 2, endRow: 3 },
|
||||
]);
|
||||
expect(new RangeMergeUtil().add(...testRange).subtract(cellToRange(3, 2)).merge()).toEqual([
|
||||
{ startColumn: 2, endColumn: 2, startRow: 2, endRow: 2 },
|
||||
{ startColumn: 2, endColumn: 2, startRow: 4, endRow: 4 },
|
||||
]);
|
||||
expect(new RangeMergeUtil().add(...testRange).subtract(...testRange).merge()).toEqual([]);
|
||||
});
|
||||
|
||||
it('should be no overlapping regions', () => {
|
||||
const arr = [
|
||||
{
|
||||
startRow: 4,
|
||||
endRow: 12,
|
||||
startColumn: 1,
|
||||
endColumn: 6,
|
||||
},
|
||||
{
|
||||
startRow: 12,
|
||||
endRow: 13,
|
||||
startColumn: 2,
|
||||
endColumn: 5,
|
||||
},
|
||||
{
|
||||
startRow: 3,
|
||||
endRow: 3,
|
||||
startColumn: 2,
|
||||
endColumn: 5,
|
||||
},
|
||||
];
|
||||
const res = new RangeMergeUtil().add(...arr).merge();
|
||||
expect(res).toEqual([
|
||||
{ startRow: 4, endRow: 12, startColumn: 1, endColumn: 6 },
|
||||
{ startRow: 3, endRow: 3, startColumn: 2, endColumn: 5 },
|
||||
{ startRow: 13, endRow: 13, startColumn: 2, endColumn: 5 },
|
||||
]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user