Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TWAP: Mutation testing #2426

Closed
2 tasks
czarcas7ic opened this issue Aug 16, 2022 · 3 comments · Fixed by #2474
Closed
2 tasks

TWAP: Mutation testing #2426

czarcas7ic opened this issue Aug 16, 2022 · 3 comments · Fixed by #2474
Assignees

Comments

@czarcas7ic
Copy link
Member

czarcas7ic commented Aug 16, 2022

Results

1 @@ -84,7 +84,7 @@

 // This accumulator can be stored, to compute wider ranged twaps.
 func (k Keeper) GetBeginBlockAccumulatorRecord(ctx sdk.Context, poolId uint64, asset0Denom string, asset1Denom string) (types.TwapRecord, error) {
 	// correct ordering of args for db
-	if asset1Denom > asset0Denom {
+	if asset1Denom >= asset0Denom {
 		asset0Denom, asset1Denom = asset1Denom, asset0Denom
 	}
 	return k.getMostRecentRecord(ctx, poolId, asset0Denom, asset1Denom)

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/api.go.0" with checksum ed25623be1b9b1b3495414abdaedc476


2 @@ -85,7 +85,8 @@

 func (k Keeper) GetBeginBlockAccumulatorRecord(ctx sdk.Context, poolId uint64, asset0Denom string, asset1Denom string) (types.TwapRecord, error) {
 	// correct ordering of args for db
 	if asset1Denom > asset0Denom {
-		asset0Denom, asset1Denom = asset1Denom, asset0Denom
+		_, _, _, _ = asset0Denom, asset1Denom, asset1Denom, asset0Denom
+
 	}
 	return k.getMostRecentRecord(ctx, poolId, asset0Denom, asset1Denom)
 }

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/api.go.1" with checksum 1233f31b5561b25202c70c3a3acecdca


3 @@ -23,7 +23,7 @@

 // GetParams returns the total set of twap parameters.
 func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) {
-	k.paramSpace.GetParamSet(ctx, &params)
+	_, _, _ = k.paramSpace.GetParamSet, ctx, params
 	return params
 }

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/keeper.go.0" with checksum 19d0e8e261272b23c6b93f4a03b87a38


4 @@ -29,7 +29,7 @@

// SetParams sets the total set of twap parameters.
func (k Keeper) SetParams(ctx sdk.Context, params types.Params) {
-	k.paramSpace.SetParamSet(ctx, &params)
+	_, _, _ = k.paramSpace.SetParamSet, ctx, params
}

func (k *Keeper) PruneEpochIdentifier(ctx sdk.Context) string {

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/keeper.go.1" with checksum 748bb2ead3e60456b25d06867f450bf0


5 @@ -26,7 +26,7 @@

 func (hook *epochhook) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, epochNumber int64) {
 	if epochIdentifier == hook.k.PruneEpochIdentifier(ctx) {
-		hook.k.pruneOldTwaps(ctx)
+		_, _ = hook.k.pruneOldTwaps, ctx
 	}
 }

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/listeners.go.0" with checksum c2c8c349bb20e80685847662532f04fb


6 @@ -45,7 +45,8 @@

 	err := hook.k.afterCreatePool(ctx, poolId)
 	// Will halt pool creation
 	if err != nil {
-		panic(err)
+		_ = err
+
 	}
 }

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/listeners.go.1" with checksum 25dc21871d675c5f1b9ffafad386236b


7 @@ -54,7 +54,7 @@

 }
 
 func (hook *gammhook) AfterJoinPool(ctx sdk.Context, sender sdk.AccAddress, poolId uint64, enterCoins sdk.Coins, shareOutAmount sdk.Int) {
-	hook.k.trackChangedPool(ctx, poolId)
+	_, _, _ = hook.k.trackChangedPool, ctx, poolId
 }
 
 func (hook *gammhook) AfterExitPool(_ sdk.Context, _ sdk.AccAddress, _ uint64, _ sdk.Int, _ sdk.Coins) {

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/listeners.go.3" with checksum 9eb4af56f461fd1308183966a75f750b


8 @@ -102,7 +102,7 @@

 // This is achieved by getting the record `r` that is at, or immediately preceding in state time `t`.
 // To be clear: the record r s.t. `t - r.Time` is minimized AND `t >= r.Time`
 func (k Keeper) getInterpolatedRecord(ctx sdk.Context, poolId uint64, t time.Time, assetA, assetB string) (types.TwapRecord, error) {
-	if !(assetA > assetB) {
+	if !(assetA >= assetB) {
 		assetA, assetB = assetB, assetA
 	}
 	record, err := k.getRecordAtOrBeforeTime(ctx, poolId, t, assetA, assetB)

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/logic.go.1" with checksum 20cce808ee7a45bacee064ec5f132b57


9 @@ -114,7 +114,7 @@

 }
 
 func (k Keeper) getMostRecentRecord(ctx sdk.Context, poolId uint64, assetA, assetB string) (types.TwapRecord, error) {
-	if !(assetA > assetB) {
+	if !(assetA >= assetB) {
 		assetA, assetB = assetB, assetA
 	}
 	record, err := k.getMostRecentRecordStoreRepresentation(ctx, poolId, assetA, assetB)

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/logic.go.2" with checksum cc6744cad3c34790ec568963630141d8


10 @@ -23,7 +23,7 @@

 		// during EndBlock, after twapkeeper's endblock.
 		k.storeNewRecord(ctx, record)
 	}
-	k.trackChangedPool(ctx, poolId)
+	_, _, _ = k.trackChangedPool, ctx, poolId
 	return err
 }

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/logic.go.3" with checksum 0658355012788d22db987ca1f7f82e5a


11 @@ -34,7 +34,8 @@

 	for _, id := range changedPoolIds {
 		err := k.updateRecords(ctx, id)
 		if err != nil {
-			panic(err)
+			_ = err
+
 		}
 	}
 }

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/logic.go.5" with checksum 73347684e7e6f276926f790071072ef4


12 @@ -95,7 +95,7 @@

 func (k Keeper) pruneOldTwaps(ctx sdk.Context) {
 	// TODO: Read this from parameter
 	lastAllowedTime := ctx.BlockTime().Add(-48 * time.Hour)
-	k.pruneRecordsBeforeTime(ctx, lastAllowedTime)
+	_, _, _ = k.pruneRecordsBeforeTime, ctx, lastAllowedTime
 }
 // getInterpolatedRecord returns a record for this pool, representing its accumulator state at time `t`.

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/logic.go.13" with checksum d8158f0a2465b1f24f7e6fa3b4034f91


13 @@ -115,7 +115,8 @@

 func (k Keeper) getMostRecentRecord(ctx sdk.Context, poolId uint64, assetA, assetB string) (types.TwapRecord, error) {
 	if !(assetA > assetB) {
-		assetA, assetB = assetB, assetA
+		_, _, _, _ = assetA, assetB, assetB, assetA
+
 	}
 	record, err := k.getMostRecentRecordStoreRepresentation(ctx, poolId, assetA, assetB)
 	if err != nil {

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/logic.go.17" with checksum db3cd06236e86d7450a6939f97d87311


14 @@ -135,7 +135,7 @@

 	}
 
 	for _, twap := range twaps {
-		if twap.Asset0Denom == asset0Denom && twap.Asset1Denom == asset1Denom {
+		if true && twap.Asset1Denom == asset1Denom {
 			return twap, nil
 		}
 	}

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/store.go.0" with checksum f9348fb750711798070826e3494ef935


15 @@ -135,7 +135,7 @@

 	}
 
 	for _, twap := range twaps {
-		if twap.Asset0Denom == asset0Denom && twap.Asset1Denom == asset1Denom {
+		if twap.Asset0Denom == asset0Denom && true {
 			return twap, nil
 		}
 	}

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/store.go.1" with checksum 846bc67ddd985007ba54d18789c2bcda


16 @@ -46,7 +46,7 @@

 	store := ctx.KVStore(k.storeKey)
 	key1 := types.FormatHistoricalTimeIndexTWAPKey(twap.Time, twap.PoolId, twap.Asset0Denom, twap.Asset1Denom)
 	key2 := types.FormatHistoricalPoolIndexTWAPKey(twap.PoolId, twap.Time, twap.Asset0Denom, twap.Asset1Denom)
-	osmoutils.MustSet(store, key1, &twap)
+	_, _, _, _ = osmoutils.MustSet, store, key1, twap
 	osmoutils.MustSet(store, key2, &twap)
 }

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/store.go.5" with checksum 6b2264ee91194e81681a55525fde8e3a


17 @@ -59,7 +59,7 @@

 	store := ctx.KVStore(k.storeKey)
 	key1 := types.FormatHistoricalTimeIndexTWAPKey(twap.Time, twap.PoolId, twap.Asset0Denom, twap.Asset1Denom)
 	key2 := types.FormatHistoricalPoolIndexTWAPKey(twap.PoolId, twap.Time, twap.Asset0Denom, twap.Asset1Denom)
-	store.Delete(key1)
+	_, _ = store.Delete, key1
 	store.Delete(key2)
 }

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/store.go.7" with checksum c62da529b6e843ff77669ee0c8c68a51


18 @@ -60,7 +60,7 @@

 	key1 := types.FormatHistoricalTimeIndexTWAPKey(twap.Time, twap.PoolId, twap.Asset0Denom, twap.Asset1Denom)
 	key2 := types.FormatHistoricalPoolIndexTWAPKey(twap.PoolId, twap.Time, twap.Asset0Denom, twap.Asset1Denom)
 	store.Delete(key1)
-	store.Delete(key2)
+	_, _ = store.Delete, key2
 }
 // getMostRecentRecordStoreRepresentation returns the most recent twap record in the store

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/store.go.8" with checksum 69985d1e20fe884a410974e4880d1954


19 @@ -120,7 +120,8 @@

 		if lastParsedTime.After(parsedTime) {
 			return true
 		}
-		lastParsedTime = parsedTime
+		_, _ = lastParsedTime, parsedTime
+
 		return false
 	}

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/store.go.11" with checksum ffd9ac0d500450df6d61384e903c5062


20 @@ -18,7 +18,7 @@

 func (q Querier) GetArithmeticTwap(ctx sdk.Context,
 	req queryproto.GetArithmeticTwapRequest,
 ) (*queryproto.GetArithmeticTwapResponse, error) {
-	if (req.EndTime == nil || *req.EndTime == time.Time{}) {
+	if (false || *req.EndTime == time.Time{}) {
 		*req.EndTime = time.Now()
 	}

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/client/query_proto_wrap.go.0" with checksum 6c9ce9bfb1797b0d60fcc9e8e7577e07


21 @@ -18,7 +18,7 @@

 func (q Querier) GetArithmeticTwap(ctx sdk.Context,
 	req queryproto.GetArithmeticTwapRequest,
 ) (*queryproto.GetArithmeticTwapResponse, error) {
-	if (req.EndTime == nil || *req.EndTime == time.Time{}) {
+	if req.EndTime == nil || false {
 		*req.EndTime = time.Now()
 	}

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/client/query_proto_wrap.go.1" with checksum ac04aee427246e2dbce81b117f02b673


22 @@ -19,7 +19,7 @@

 	req queryproto.GetArithmeticTwapRequest,
 ) (*queryproto.GetArithmeticTwapResponse, error) {
 	if (req.EndTime == nil || *req.EndTime == time.Time{}) {
-		*req.EndTime = time.Now()
+		_, _ = req.EndTime, time.Now
 	}

 	twap, err := q.K.GetArithmeticTwap(ctx, req.PoolId, req.BaseAsset, req.QuoteAsset, req.StartTime, *req.EndTime)

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/client/query_proto_wrap.go.2" with checksum 6783952d90be0891b3c32d76b9948b48


23 @@ -55,7 +55,7 @@

 }
 
 func (b AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {
-	queryproto.RegisterQueryHandlerClient(context.Background(), mux, queryproto.NewQueryClient(clientCtx)) //nolint:errcheck
+	_, _, _, _, _ = queryproto.RegisterQueryHandlerClient, context.Background, mux, queryproto.NewQueryClient, clientCtx //nolint:errcheck
 }
 
 func (b AppModuleBasic) GetTxCmd() *cobra.Command {

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/twapmodule/module.go.0" with checksum 34449638b73657de1aa790b6c8ee037f


24 @@ -123,7 +123,7 @@

// EndBlock performs a no-op.
func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate {
-	am.k.EndBlock(ctx)
+	_, _ = am.k.EndBlock, ctx
	return []abci.ValidatorUpdate{}
}

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/twapmodule/module.go.2" with checksum 331825df8a44e605fb3f33fbbd590e4d


25 @@ -59,7 +59,7 @@

 func ParseTimeFromHistoricalTimeIndexKey(key []byte) time.Time {
 	keyS := string(key)
 	s := strings.Split(keyS, KeySeparator)
-	if len(s) != 5 || s[0] != historicalTWAPTimeIndexNoSeparator {
+	if false || s[0] != historicalTWAPTimeIndexNoSeparator {
 		panic("Called ParseTimeFromHistoricalTimeIndexKey on incorrectly formatted key")
 	}
 	t, err := osmoutils.ParseTimeString(s[1])

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/types/keys.go.0" with checksum 985bd2456d0c5d155a1b316ba557fa1c


26 @@ -59,7 +59,7 @@

 func ParseTimeFromHistoricalTimeIndexKey(key []byte) time.Time {
 	keyS := string(key)
 	s := strings.Split(keyS, KeySeparator)
-	if len(s) != 5 || s[0] != historicalTWAPTimeIndexNoSeparator {
+	if len(s) != 5 || false {
 		panic("Called ParseTimeFromHistoricalTimeIndexKey on incorrectly formatted key")
 	}
 	t, err := osmoutils.ParseTimeString(s[1])

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/types/keys.go.1" with checksum 2d9be42442a32153e39f9db9cf467f0e


27 @@ -72,7 +72,7 @@

 func ParseTimeFromHistoricalPoolIndexKey(key []byte) (time.Time, error) {
 	keyS := string(key)
 	s := strings.Split(keyS, KeySeparator)
-	if len(s) != 5 || s[0] != historicalTWAPPoolIndexNoSeparator {
+	if false || s[0] != historicalTWAPPoolIndexNoSeparator {
 		return time.Time{}, fmt.Errorf("Called ParseTimeFromHistoricalPoolIndexKey on incorrectly formatted key: %v", s)
 	}
 	t, err := osmoutils.ParseTimeString(s[2])

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/types/keys.go.2" with checksum 0bd9d4c6537fe91ecf24954a361d7e42


28 @@ -72,7 +72,7 @@

 func ParseTimeFromHistoricalPoolIndexKey(key []byte) (time.Time, error) {
 	keyS := string(key)
 	s := strings.Split(keyS, KeySeparator)
-	if len(s) != 5 || s[0] != historicalTWAPPoolIndexNoSeparator {
+	if len(s) != 5 || false {
 		return time.Time{}, fmt.Errorf("Called ParseTimeFromHistoricalPoolIndexKey on incorrectly formatted key: %v", s)
 	}
 	t, err := osmoutils.ParseTimeString(s[2])

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/types/keys.go.3" with checksum d01d435641d81718ae09361fc9017976


29 @@ -60,7 +60,7 @@

 	keyS := string(key)
 	s := strings.Split(keyS, KeySeparator)
 	if len(s) != 5 || s[0] != historicalTWAPTimeIndexNoSeparator {
-		panic("Called ParseTimeFromHistoricalTimeIndexKey on incorrectly formatted key")
+
 	}
 	t, err := osmoutils.ParseTimeString(s[1])
 	if err != nil {

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/types/keys.go.4" with checksum 4e7a42d9c76a2a02d7b750ecee649446


30 @@ -64,7 +64,7 @@

 	}
 	t, err := osmoutils.ParseTimeString(s[1])
 	if err != nil {
-		panic("incorrectly formatted time string in key")
+
 	}
 	return t
 }

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/types/keys.go.5" with checksum d91ed0f1bdbc6d63091203ad082d08b6


31 @@ -11,7 +11,7 @@

 )
 
 func NewTwapRecord(k AmmInterface, ctx sdk.Context, poolId uint64, denom0 string, denom1 string) (TwapRecord, error) {
-	if !(denom0 > denom1) {
+	if !(denom0 >= denom1) {
 		return TwapRecord{}, fmt.Errorf("precondition denom0 > denom1 not satisfied. denom0 %s | denom1 %s", denom0, denom1)
 	}
 	sp0 := MustGetSpotPrice(k, ctx, poolId, denom0, denom1)

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/types/utils.go.0" with checksum 744b91860f780467437e5ef93eff0242


32 @@ -53,7 +53,7 @@

 	pairGT := make([]string, 0, numPairs)
 	pairLT := make([]string, 0, numPairs)
 
-	for i := 0; i < len(reverseDenoms); i++ {
+	for i := 0; i <= len(reverseDenoms); i++ {
 		for j := i + 1; j < len(reverseDenoms); j++ {
 			pairGT = append(pairGT, reverseDenoms[i])
 			pairLT = append(pairLT, reverseDenoms[j])

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/types/utils.go.1" with checksum 717f72215bdc68f5d2c60d3cf5075402


33 @@ -34,7 +34,8 @@

 func MustGetSpotPrice(k AmmInterface, ctx sdk.Context, poolId uint64, baseAssetDenom string, quoteAssetDenom string) sdk.Dec {
 	sp, err := k.CalculateSpotPrice(ctx, poolId, baseAssetDenom, quoteAssetDenom)
 	if err != nil {
-		panic(err)
+		_ = err
+
 	}
 	return sp
 }

FAIL "/var/folders/9x/tjdmlrtj6tjgf_42rdzpv6rw0000gn/T/go-mutesting-4154319244/./x/twap/types/utils.go.4" with checksum 84008e7005dc782fe27a27a94f309f60


The mutation score is 0.338710 (21 passed, 33 failed, 0 duplicated, 8 skipped, total is 62)

Acceptance Criteria

  • Twap integrated into mutation testing
  • Only mutations we don't catch are attempts at deleting errors or panics
@czarcas7ic czarcas7ic self-assigned this Aug 16, 2022
@stackman27
Copy link
Contributor

stackman27 commented Aug 16, 2022

Same issue #2210

@ValarDragon
Copy link
Member

ValarDragon commented Aug 18, 2022

#1: Valid issue, as it is a public API. It should have an error if asset1Denom = asset0Denom

  • Removed logic from this function and moved to getMostRecentRecord in logic.go

#2: Valid issue, this means were not testing order of args properly

  • Removed logic from this function and moved to getMostRecentRecord in logic.go (also added to test)

#3 & #4: I suspect we have no tests using the keeper params? I think this may be an issue thats resolved in subsequent PR merge, would punt for now.

#5: Resolved by open PRs

#6: Noise: I'm confused, @AlpinYukseloglu 's update should have prevented this from being reported

#7: Needs a listener_test, should be of the same form as what we do for a swap -- maybe we just generalize that test

#8: We should return an error if provided denoms are the same, and add a test for same denom causing an error

#9: Same as above, maybe we generalize this "swap provided denom order, and return error if same" into a single function? (seeing as its 1, 8 & 9) now

#10: Should be addressed by a test for creating pool & swapping in same block. I feel like I saw this in an open PR somewhere?

#11: Noise, I thought @AlpinYukseloglu fix removed this

#12: Fixed in Roman's PR

#13: Looks like were missing a test case

#14: Should be fixed by multi-denom tests

#15: Same as above

#16: Fixed by roman's PR

#17: Fixed by roman's PR

#18: Fixed by roman's PR

(checkpointing name due to unclarity)

#19: Needs more investigation, I'd have to double check whats going on

#20-22: We should exclude these from mutation testing for now

#23: Not sure why we don't have any end block tests

(ParseTimeFromHistoricalTimeIndexKey)
#25-28: Missing test case, but not a big deal

#29: Noise

#30: @AlpinYukseloglu not sure why this is reported its:

 	if err != nil {
-		panic("incorrectly formatted time string in key")
+

#31: See #9

#32

(In a meeting will try to edit / add more later)

@AlpinYukseloglu
Copy link
Contributor

Really weird that the single-line error checks weren't filtered out. I also noticed this while playing with our fork implementation locally. It might have had something to do with the refactor bez and I did right before merging – will take a look at it asap

@czarcas7ic czarcas7ic removed this from the V12 Blockers milestone Aug 30, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants