// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// For more tutorials  : https://learngoprogramming.com
// In-person training  : https://www.linkedin.com/in/inancgumus/
// Follow me on twitter: https://twitter.com/inancgumus

package main

import (
	s "github.com/inancgumus/prettyslice"
)

func main() {
	s.PrintBacking = true

	// #1: a nil slice has no backing array
	var nums []int
	s.Show("no backing array", nums)

	// #2: creates a new backing array
	nums = append(nums, 1, 3)
	s.Show("allocates", nums)

	// #3: creates a new backing array
	nums = append(nums, 2)
	s.Show("free capacity", nums)

	// #4: uses the same backing array
	nums = append(nums, 4)
	s.Show("no allocation", nums)

	// GOAL: append new odd numbers in the middle
	// [1 3 2 4] -> [1 3 7 9 2 4]

	// #6: [1 3 2 4] -> [1 3 2 4 2 4]
	nums = append(nums, nums[2:]...)
	s.Show("nums <- nums[2:]", nums)

	// #5: overwrites: [1 3 2 4 2 4] -> [1 3 7 9]
	nums = append(nums[:2], 7, 9)
	s.Show("nums[:2] <- 7, 9", nums)

	// #7: [1 3 7 9] -> [1 3 7 9 2 4]
	nums = nums[:6]
	s.Show("nums: extend", nums)
}

// don't mind about these options
// they're just for printing the slices nicely
func init() {
	s.MaxPerLine = 10
	s.Width = 45
}
