| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- var assert = require('assert')
- function getEnergy(energyMap, memberId, dimensionCode) {
- var data = energyMap[memberId]
- if (!data) return 0
- var key = dimensionCode + 'Score'
- var val = data[key]
- return (typeof val !== 'undefined' && val !== null) ? val : 0
- }
- function getAvatarSize(energy, isSelf) {
- var clamped = Math.max(0, Math.min(100, energy))
- var base = 64 + (clamped / 100) * 56
- if (isSelf) return Math.max(96, base + 16)
- return base
- }
- function getLayoutMode(memberCount) {
- if (memberCount <= 3) return 'row'
- return 'multi-row'
- }
- function getDisplayOrder(members, selfId) {
- var self = null
- var others = []
- for (var i = 0; i < members.length; i++) {
- if (members[i].id == selfId) {
- self = members[i]
- } else {
- others.push(members[i])
- }
- }
- if (members.length === 2) return [self, others[0]]
- if (members.length === 3 && others.length >= 2) return [others[0], self, others[1]]
- return [self].concat(others)
- }
- function getLineEndPoints(selfCX, selfCY, selfR, otherCX, otherCY, otherR) {
- var dx = otherCX - selfCX
- var dy = otherCY - selfCY
- var dist = Math.sqrt(dx * dx + dy * dy)
- if (dist < 1) return null
- var ux = dx / dist
- var uy = dy / dist
- return {
- x1: selfCX + ux * selfR,
- y1: selfCY + uy * selfR,
- x2: otherCX - ux * otherR,
- y2: otherCY - uy * otherR
- }
- }
- assert.strictEqual(getAvatarSize(0, false), 64, 'min size for other at energy 0')
- assert.strictEqual(getAvatarSize(100, false), 120, 'max size for other at energy 100')
- assert.strictEqual(getAvatarSize(50, false), 92, 'mid size for other at energy 50')
- assert.strictEqual(getAvatarSize(0, true), 96, 'self min is 96')
- assert.strictEqual(getAvatarSize(100, true), 136, 'self max energy: 64+56+16=136')
- assert.strictEqual(getAvatarSize(-10, false), 64, 'negative energy clamped to 0')
- assert.strictEqual(getAvatarSize(150, false), 120, 'energy >100 clamped to 100')
- assert.strictEqual(getLayoutMode(0), 'row', '0 members → row (but v-if hides)')
- assert.strictEqual(getLayoutMode(2), 'row', '2 members → row')
- assert.strictEqual(getLayoutMode(3), 'row', '3 members → row')
- assert.strictEqual(getLayoutMode(4), 'multi-row', '4 members → multi-row')
- assert.strictEqual(getLayoutMode(10), 'multi-row', '10 members → multi-row')
- var m2 = [{ id: 1, nickname: '爸' }, { id: 2, nickname: '我' }]
- var order2 = getDisplayOrder(m2, 2)
- assert.strictEqual(order2[0].id, 2, '2-person: self first')
- assert.strictEqual(order2[1].id, 1, '2-person: other second')
- var m3 = [{ id: 1, nickname: '爸' }, { id: 2, nickname: '我' }, { id: 3, nickname: '妈' }]
- var order3 = getDisplayOrder(m3, 2)
- assert.strictEqual(order3[0].id, 1, '3-person: other1 left')
- assert.strictEqual(order3[1].id, 2, '3-person: self center')
- assert.strictEqual(order3[2].id, 3, '3-person: other2 right')
- var pts = getLineEndPoints(100, 100, 30, 300, 100, 20)
- assert.strictEqual(pts.x1, 130, 'line start x = self center + self radius')
- assert.strictEqual(pts.x2, 280, 'line end x = other center - other radius')
- assert.strictEqual(pts.y1, 100, 'line start y = self center y')
- assert.strictEqual(pts.y2, 100, 'line end y = other center y')
- var em = { 1: { bodyScore: 80, mindScore: 40 } }
- assert.strictEqual(getEnergy(em, 1, 'body'), 80, 'get body energy')
- assert.strictEqual(getEnergy(em, 1, 'mind'), 40, 'get mind energy')
- assert.strictEqual(getEnergy(em, 2, 'body'), 0, 'missing member returns 0')
- console.log('All FamilyRelationGraph tests passed!')
|