import { compare } from '../version'; describe('version compare', () => { describe('major version comparison', () => { it('should return 1 when first major version is greater', () => { expect(compare('2.0.0', '1.0.0')).toBe(1); }); it('should return -1 when first major version is smaller', () => { expect(compare('1.0.0', '2.0.0')).toBe(-1); }); }); describe('minor version comparison', () => { it('should return 1 when first minor version is greater', () => { expect(compare('1.2.0', '1.1.0')).toBe(1); }); it('should return -1 when first minor version is smaller', () => { expect(compare('1.1.0', '1.2.0')).toBe(-1); }); }); describe('patch version comparison', () => { it('should return 1 when first patch version is greater', () => { expect(compare('1.0.2', '1.0.1')).toBe(1); }); it('should return -1 when first patch version is smaller', () => { expect(compare('1.0.1', '1.0.2')).toBe(-1); }); }); describe('prerelease version comparison', () => { it('should return -1 when comparing prerelease version with release version', () => { expect(compare('1.0.0-beta.1', '1.0.0')).toBe(-1); }); it('should return 1 when comparing release version with prerelease version', () => { expect(compare('1.0.0', '1.0.0-beta.1')).toBe(1); }); it('should compare prerelease versions correctly', () => { expect(compare('1.0.0-beta.2', '1.0.0-beta.1')).toBe(1); expect(compare('1.0.0-beta.1', '1.0.0-beta.2')).toBe(-1); expect(compare('1.0.0-beta.1', '1.0.0-beta.1')).toBe(0); }); }); describe('equal versions', () => { it('should return 0 when versions are equal', () => { expect(compare('1.0.0', '1.0.0')).toBe(0); expect(compare('1.1.1', '1.1.1')).toBe(0); expect(compare('1.0.0-beta.1', '1.0.0-beta.1')).toBe(0); }); }); describe('complex version comparison', () => { it('should handle complex version comparisons correctly', () => { expect(compare('2.0.0-beta.1', '1.9.9')).toBe(1); // Major version takes precedence expect(compare('1.2.3-beta.1', '1.2.3-alpha.1')).toBe(1); // beta > alpha expect(compare('1.0.0-rc.1', '1.0.0-beta.9')).toBe(1); // rc > beta }); }); });