11import { describe , expect , it , vi } from 'vitest'
22
3- import { getScaleFactor } from './data-modules'
3+ import type { Modules } from '../types/lib'
4+ import { getModuleNeighbours , getScaleFactor } from './data-modules'
45
56describe ( 'getScaleFactor' , ( ) => {
67 it ( 'returns 0.75 for square-sm style' , ( ) => {
@@ -18,3 +19,146 @@ describe('getScaleFactor', () => {
1819 expect ( scaleFactor ) . toEqual ( 0.9 * ( 1 - 0.75 ) + 0.75 )
1920 } )
2021} )
22+
23+ describe ( 'getModuleNeighbours' , ( ) => {
24+ it ( 'should return correct neighbours for a center cell' , ( ) => {
25+ const modules : Modules = [
26+ [ false , true , false ] ,
27+ [ true , false , true ] ,
28+ [ false , true , false ] ,
29+ ]
30+
31+ const result = getModuleNeighbours ( 1 , 1 , modules )
32+
33+ expect ( result ) . toEqual ( {
34+ left : true ,
35+ right : true ,
36+ top : true ,
37+ bottom : true ,
38+ count : 4 ,
39+ } )
40+ } )
41+
42+ it ( 'should handle top-left corner cell' , ( ) => {
43+ const modules : Modules = [
44+ [ false , true , false ] ,
45+ [ true , false , false ] ,
46+ [ false , false , false ] ,
47+ ]
48+
49+ const result = getModuleNeighbours ( 0 , 0 , modules )
50+
51+ expect ( result ) . toEqual ( {
52+ left : false ,
53+ right : true ,
54+ top : false ,
55+ bottom : true ,
56+ count : 2 ,
57+ } )
58+ } )
59+
60+ it ( 'should handle bottom-right corner cell' , ( ) => {
61+ const modules : Modules = [
62+ [ false , false , false ] ,
63+ [ false , false , true ] ,
64+ [ false , true , false ] ,
65+ ]
66+
67+ const result = getModuleNeighbours ( 2 , 2 , modules )
68+
69+ expect ( result ) . toEqual ( {
70+ left : true ,
71+ right : false ,
72+ top : true ,
73+ bottom : false ,
74+ count : 2 ,
75+ } )
76+ } )
77+
78+ it ( 'should handle edge cell (middle of right edge)' , ( ) => {
79+ const modules : Modules = [
80+ [ false , false , false ] ,
81+ [ false , true , true ] ,
82+ [ false , false , false ] ,
83+ ]
84+
85+ const result = getModuleNeighbours ( 2 , 1 , modules )
86+
87+ expect ( result ) . toEqual ( {
88+ left : true ,
89+ right : false ,
90+ top : false ,
91+ bottom : false ,
92+ count : 1 ,
93+ } )
94+ } )
95+
96+ it ( 'should handle cell with no true neighbours' , ( ) => {
97+ const modules : Modules = [
98+ [ false , false , false ] ,
99+ [ false , false , false ] ,
100+ [ false , false , false ] ,
101+ ]
102+
103+ const result = getModuleNeighbours ( 1 , 1 , modules )
104+
105+ expect ( result ) . toEqual ( {
106+ left : false ,
107+ right : false ,
108+ top : false ,
109+ bottom : false ,
110+ count : 0 ,
111+ } )
112+ } )
113+
114+ it ( 'should handle cell with all true neighbours' , ( ) => {
115+ const modules : Modules = [
116+ [ true , true , true ] ,
117+ [ true , false , true ] ,
118+ [ true , true , true ] ,
119+ ]
120+
121+ const result = getModuleNeighbours ( 1 , 1 , modules )
122+
123+ expect ( result ) . toEqual ( {
124+ left : true ,
125+ right : true ,
126+ top : true ,
127+ bottom : true ,
128+ count : 4 ,
129+ } )
130+ } )
131+
132+ it ( 'should handle a 1x1 grid' , ( ) => {
133+ const modules : Modules = [ [ true ] ]
134+
135+ const result = getModuleNeighbours ( 0 , 0 , modules )
136+
137+ expect ( result ) . toEqual ( {
138+ left : false ,
139+ right : false ,
140+ top : false ,
141+ bottom : false ,
142+ count : 0 ,
143+ } )
144+ } )
145+
146+ it ( 'should handle cells in different size grids' , ( ) => {
147+ const modules : Modules = [
148+ [ true , false , true , false ] ,
149+ [ false , true , false , true ] ,
150+ [ true , false , true , false ] ,
151+ [ false , true , false , true ] ,
152+ ]
153+
154+ const result = getModuleNeighbours ( 2 , 2 , modules )
155+
156+ expect ( result ) . toEqual ( {
157+ left : false ,
158+ right : false ,
159+ top : false ,
160+ bottom : false ,
161+ count : 0 ,
162+ } )
163+ } )
164+ } )
0 commit comments