public void Test_KC_FloatVector_CosineSim()
        {
            float[] vec1      = { 31.5202609F, 40.01996581F, 49.89208719F, 73.88465236F, 61.65325936F };
            float[] vec2      = { 60.74887955F, 69.51020825F, 21.68914134F, 24.71560093F, 86.70878694F };
            double  cosignsim = 0.8263762988702843;

            var fv1 = new KC_FloatVector(vec1);
            var fv2 = new KC_FloatVector(vec2);

            // Test combinations without normalized vectors
            Assert.True(EqualWithinTolerance(cosignsim, fv1.CosineSim(vec2)));
            Assert.True(EqualWithinTolerance(cosignsim, fv2.CosineSim(vec1)));
            Assert.True(EqualWithinTolerance(cosignsim, fv1.CosineSim(fv2)));
            Assert.True(EqualWithinTolerance(cosignsim, fv2.CosineSim(fv1)));

            // Normalize first vector and test combos
            fv1.Normalize();
            Assert.True(EqualWithinTolerance(cosignsim, fv1.CosineSim(vec2)));
            Assert.True(EqualWithinTolerance(cosignsim, fv2.CosineSim(vec1)));
            Assert.True(EqualWithinTolerance(cosignsim, fv1.CosineSim(fv2)));
            Assert.True(EqualWithinTolerance(cosignsim, fv2.CosineSim(fv1)));

            // Normalize second vector and test combos
            fv2.Normalize();
            Assert.True(EqualWithinTolerance(cosignsim, fv1.CosineSim(vec2)));
            Assert.True(EqualWithinTolerance(cosignsim, fv2.CosineSim(vec1)));
            Assert.True(EqualWithinTolerance(cosignsim, fv1.CosineSim(fv2)));
            Assert.True(EqualWithinTolerance(cosignsim, fv2.CosineSim(fv1)));
        }
        public void Test_KC_FloatVector_Normalize()
        {
            float[]        floats = { 0.1F, 0.2F, 0.3F, 0.4F, 0.5F };
            KC_FloatVector fv     = new KC_FloatVector(floats);

            Assert.False(fv.IsNormalized);
            Assert.Null(fv.NormalizedVector);

            fv.Normalize();
            Assert.Equal(floats, fv.FloatVector);
            float[] normfloats = { 0.13483997249264842F, 0.26967994498529685F, 0.40451991747794525F, 0.5393598899705937F, 0.674199862463242F };
            for (int i = 0; i < floats.Length; i++)
            {
                Assert.True(EqualWithinTolerance(normfloats[i], fv.NormalizedVector[i]));
            }

            float[] normalized = new float [fv.NormalizedVector.Count];
            fv.NormalizedVector.CopyTo(normalized, 0);
            double normlen = KC_FloatVector.Length(normalized);

            Assert.True(EqualWithinTolerance(1.0, normlen));
            Assert.True(fv.IsNormalized);
            fv.FloatVector = new float[] { 9.0F, 8.0F, 7.0F };
            Assert.False(fv.IsNormalized);
            Assert.Null(fv.NormalizedVector);
        }